Stuck 1s hvad skal man gøre. Sådan lukkes et frosset program

Indvirkningen af ​​blokering på ydeevnen af ​​1C:Enterprise 8

Gilev-teamet har arbejdet med præstationsproblemer i mange år og har med succes løst blandt andet problemerne med at eliminere ventetider på låse og dødvande.

Nedenfor vil vi beskrive vores erfaring med at løse disse problemer.

Detektering af blokeringsproblemer i 1C

Ydeevneproblemer i multiplayer-tilstand er ikke nødvendigvis relateret til dårlig kode eller dårlig hardware. Først skal vi besvare spørgsmålet - hvilke præstationsproblemer findes der, og hvad forårsager dem?

Det er umuligt manuelt at spore hundredvis af brugeres aktiviteter, du har brug for et værktøj, der automatiserer indsamlingen af ​​sådanne oplysninger.

Der er mange værktøjer, men næsten alle af dem har en meget væsentlig ulempe - prisen.

Men der er en vej ud – vi vælger

Vi vil undersøge problemet på MS SQL Server, så vi skal bruge følgende tjenester fra dette sæt:

1. Overvågning og analyse af lange forespørgsler(læs mere om opsætning her) - nødvendig for at vurdere om der er langsigtede drifter for subd.

Faktisk giver kendsgerningen af ​​deres tilstedeværelse os mulighed for at sige, at der er ydeevneproblemer, og problemerne ligger i linjerne med 1C-konfigurationskoden, som tjenesten vil rangere efter vigtighed. Problemer øverst på listen skal løses først. Sådanne løsninger på problematiske linjer vil give den største effekt, dvs. vil være til størst gavn og gavn for brugerne af systemet.

(læs mere her) vil give os mulighed for at vurdere, om tiden med lange (lange) anmodninger faktisk er forårsaget af at vente på låse, eller der er andre årsager (ikke-optimal kode, overbelastet hardware osv.) Tjenesten vil vise årsagen til ventetiden ved anmodningen, nemlig den ressource, der blev blokeret, og hvem der blokerede ham. Dem. vi vil forstå tilstedeværelsen af ​​blokeringsproblemer og deres årsager.

3. Analyse af gensidige låse i 1C og MS SQL server(læs mere om opsætningen her) - giver os mulighed for at vurdere mere svære situationer med at vente på ressourcer, når flere deltagere allerede har formået at "fange" nogle ressourcer ved at blokere og nu er tvunget til at vente på hinanden på grund af, at de ikke kan frigive besatte ressourcer, før fangsten af ​​andre ressourcer spærret af naboer er gennemført.

Generelt kan en sådan vanskelig situation ikke løses manuelt.

4. Kontrol af udstyrsbelastning(læs mere om opsætningen her) hjælper os med at besvare spørgsmålene - hvor mange brugere er der i systemet, har de låse, hvor mange låse er der, kan hardwaren klare belastningen?

Tjenester er meget nemme at konfigurere, men selvom du stadig har spørgsmål, er der!

Ved at bruge værktøjerne nævnt ovenfor har vi objektiv information om systemets ydeevne. Dette giver os mulighed for at vurdere situationen korrekt og foreslå passende foranstaltninger.

Faktisk modtager vi information om alle præstationsproblemer og kan præcist besvare spørgsmål som "hvor mange problemer er der i systemet", "hvor præcist opstår de", "hver af problemerne med præcis hvilken hyppighed der opstår", "hvilke problemer er væsentlige, og som er mindre”. Dem. vi ser alle de forudsætninger, der dannede årsagen til problemet.

Tjenester giver dig mulighed for markant at forbedre din forståelse af de forhold, hvorunder problemer opstår, uden at tvinge dig til manuelt at dykke ned i ting som datalagringsstrukturen i informationsbasen på DBMS-niveau, låsemekanismen osv.

Som et resultat får vi et billede af ydeevne, der måles

— anmodningstid (naturligvis rangering af problematiske anmodninger efter vægt (anmodningstid efter antallet af opkald til denne anmodning);

— ventetid på låse;

Så vi lancerede tjenesten Analyse af forventninger til blokeringer

I den øverste tabel viser tjenesten en liste over "ofre" for blokering under hensyntagen til den samlede vægt af "forventningsvægten."

I den nederste tabel betragtes for hvert offer en eller flere deltagere i "kampen om en yderst konkurrencedygtig ressource", hvor den blokerende ventetid opstod.

I den nederste tabel skal du åbne detaljerne for en af ​​"timeout"-begivenhederne. Som f.eks. på billedet.

Ved at fremhæve linjen med "synderen", vil vi se, at flaskehalsen var _Reference64-tabellen, og der opstod et problem på det klyngede indeks med det "ukendte" område. Måske vil vi i fremtiden omdøbe det til "tabel", da denne adfærd faktisk er typisk for at øge/forstørre blokeringsområdet.

Linjen med "offeret" viser, hvilken kode der var gidsel for situationen og ikke kunne blokere alt, kun linjen "med nøgle" (minimumsdatablokeringsområdet i denne tabel).

Dette problem kan løses "korrekt" og "let".

Ved den rigtige måde det er sværere at gøre - faktisk skal du omskrive koden for at minimere sandsynligheden for, at sådanne situationer opstår.

En af faktorerne, hvor mærkeligt det end kan lyde, er et fald i varigheden.

Du kan reducere transaktionens varighed:

1. omskrivning af algoritmen

2. ved at omskrive forespørgslen (en hurtigere forespørgsel reducerer sandsynligheden for låse i komplekse transaktioner på tabeller, som nogle gange måske ikke engang er i forespørgslen!)

2.1 tilføjelse af det manglende dækkende indeks (nogle gange fremskynder et indeks ikke kun forespørgslen, men reducerer også datalæseområdet, hvilket reducerer sandsynligheden for blokering)

3. at reducere mængden af ​​data, der behandles i en transaktion (udover lineær hastighed husker vi også låseeskalering)

4. øget udstyrs produktivitet inden for hvert flow

Anmod om udførelsestid

1) forskellige brugere kan arbejde parallelt med forskellige data
2) forskellige brugere skal arbejde strengt sekventielt med de samme data

Det er dog muligt at optimere brugen af ​​låse og derved reducere den samlede ventetid.

Sådan fungerer blokering (du behøver ikke at læse dette afsnit)

Et særligt SQL Server-modul, Lock Manager, håndterer låse. Hans opgaver omfatter:

  • oprettelse og installation af låse;
  • oplåsning;
  • eskalering af blokering;
  • bestemmelse af låsekompatibilitet;
  • eliminere dødvande og meget mere.

Når en bruger fremsætter en anmodning om at opdatere eller læse data, overfører DBMS-transaktionsadministratoren kontrol til DBMS-låseadministratoren for at bestemme, om de anmodede ressourcer er blevet låst, og, hvis det er tilfældet, om den anmodede lås er kompatibel med den aktuelle. Hvis låse er inkompatible, forsinkes udførelsen af ​​den aktuelle transaktion, indtil dataene låses op. Når dataene er tilgængelige, anskaffer låseadministratoren den ønskede lås og returnerer kontrollen til transaktionsadministratoren.

Hovedårsagen til, at ydelsen reduceres, er blokering

Låseventer er et stort præstationsproblem i multiplayer-tilstand. Og det er forståeligt, for de øger ventetiden på operationer og dermed også responstiden. Er det muligt at sige, at det at vente på låse ikke er korrekt og en fejl i et flerbrugersystem? Dette kan ikke siges, da ressourceblokeringsmekanismen i sig selv sikrer dataintegritet. Ved hjælp af låsemekanismen SKRIVES samtidig data.

Forskellen mellem nødvendige og unødvendige låse

Når en bruger rapporterer en fejl, der venter på en lås, så er dette fra hans synspunkt altid en fejl, fordi det for eksempel forstyrrer hans arbejde - tiden det tager at færdiggøre hans arbejde øges.

Erfaring tyder på en simpel regel: Hvis mere end halvdelen af ​​anmodningsudførelsestiden faktisk venter på en blokeret ressource, så skal du kigge efter: måske kan noget af låsningen optimeres, og ressourceblokeringstiden kan reduceres.

Her introducerer jeg som ved et tilfælde en definition:

Venter på blokken er en situation, der opstår, når to brugere forsøger at fange de samme data på samme tid. I dette tilfælde bliver en af ​​disse brugere blokeret, det vil sige, at den skal vente til slutningen af ​​den første brugers transaktion.

En transaktion er et sæt af beregninger og operationer med data (de fleste lysende eksempel— ved udførelse af et dokument) udført som en helhed. Manglende fuldførelse af nogen af ​​transaktionens operationer resulterer i, at hele transaktionen annulleres.

Så brugere i multi-user infobaser kan ofte klage over, at det er umuligt at arbejde på grund af disse låse, mens koden faktisk kan have låse, der ikke er nødvendige på dette sted (overflødigt).
Og også i konfigurationskoden er de muligvis ikke til stede, du kan for eksempel læse om dem her http://kb.1c.ru/articleView.jsp?id=30 (artiklen er et fragment af bogen; af P.S. Belousov, A .V.Ostroverh "1C:Enterprise: fra 8.0 til 8.1."). Jeg tilbyder en forenklet måde at forklare forskellene mellem låse på simpelt eksempel Så:

I din konfiguration i 1C:Enterprise-tilstand skal du oprette to identiske fakturaer med samme varesammensætning. Men sørg for at angive de forskellige modtagelagre.
I posteringsbehandlingskoden skal du tilføje en linje med en meddelelse vist på skærmen (eller anden kode, der kan forsinke udførelsen af ​​bogføringsbehandlingen med 21 sekunder (blokeringstimeoutet indtræffer efter 20 sekunder, hvis parametrene er som standard)) .
Post to dokumenter.
Hvis der opstår en timeout, og logisk nok ankommer varerne til forskellige lagre, er der redundante låse i applikationen. Forretningslogik (overvej sund fornuft) der bør ikke være nogen blokering her.
Hvis vi nu laver identiske varehuse i disse to fakturaer. Så vil den blokering, der er oprettet som følge af et forsøg på samtidig udførelse, føre til en NØDVENDIG blokering, og det er GODT!

Dem. Mens fakturaen ændrer saldi på lageret, må den anden vente.

Selvfølgelig efterlader selv dette simple eksempel mange spørgsmål. For eksempel, hvad hvis dokumenterne er fra én leverandør, og gælden på den "flytter". Og hvis det ikke kun er saldi på lageret, der flytter, men flere registre og dokumenter af forskellige typer.
Men det vigtigste spørgsmål er: VED HVILKEN FORRETNINGSLOGIK SKAL DER IKKE VÆRE BLOKERINGER. Hvem foreskriver denne forretningslogik og hvor i forbindelse med blokering? Men lad os tale om alt i rækkefølge.

Overdrevne låse er unødvendige låse, der ikke er nødvendige ud fra et synspunkt om at sikre dataintegritet og samtidig reducere systemets samlede ydeevne, hvilket øger den samlede nedetid - venter på låse.
Nødvendig låsning opstår, når to brugere anskaffer de samme ressourcer (dataobjekter). Hvis brugere arbejder med ikke-overlappende ressourcer, men venter på en lås, betragtes låsen som overflødig.

De mest forståelige kriterier for låsning af redundans er:

1. Gensidige låse;

2. Niveauet (området) af blokering er højere end nødvendigt (som særligt tilfælde forøgelse af blokeringsniveauet, det såkaldte. eskalering);

3. Låsetiden er længere end tidspunktet for "rigtig" brug af låseobjektet.

Efter at have modtaget information om grupperinger af problemer i forbindelse med 1C:Enterprise-metadata, anbefaler jeg først og fremmest at være opmærksom på følgende objekter:

  • Konstanter
  • Efterfølgende
  • Regnskabsregistre
  • Akkumuleringsregistre
  • Informationsregistre
  • Beregningsregistre

1) Indtil for nylig var der en velkendt anbefaling om ikke at skrive noget i konstanter. I ekstreme tilfælde skal du gøre dette fra under én bruger, og så husk, at mens brugeren "skriver" en konstant, ikke kun denne, men også enhver anden konstant, vil andre brugere "vente". Derfor er det særligt farligt at bruge konstanter i transaktionsbehandlingen. Værdierne af alle konstanter gemmes V én ressource.

Figuren viser den fysiske placering af SCP-konfigurationskonstanter i en MS SQL Server 2005-databasetabel.

Det betyder, at låsning af en konstant vil låse alle konstanter. DBMS pålægger en lås på HELE den enkelte RÆKKE af bordet, dvs. for alle konstanter.

Men i de seneste udgivelser af platformen er lagringen af ​​konstanter blevet ændret. Nu er hver konstant en separat tabel. Lad dig dog ikke rive med, hvis du opretter tusindvis af borde, kan du få en lås på masterbasen.

Bemærk, hvis din konfiguration har eksisteret i lang tid, så kan du ændre lagringsformatet ved at "omstrukturere" det i Test og korrigering af konfiguratoren.

2) Nægt at bruge Sequence-metadataobjektet. I hvert fald ud fra bevægelser operationel implementering, udføres under ikke-operative (yderligere) procedurer. Se hvordan det implementeres i seneste versioner UPP.

3) Hvis systemet udfører online registrering af bevægelser i regnskabsregistret i flerbrugertilstand, anbefales det:

  • aktiver totalseparationstilstanden for dette register;
  • Brug ikke registerbalancekontrol under operationelt arbejde.

4) I akkumuleringsregisteret kan du i de tilfælde, hvor der ikke er behov for at indhente "operative" data, aktivere opdelingen af ​​totaler, hvilket vil øge paralleliteten i dataregistreringen og fremskynde arbejdet generelt. Overvåg omhyggeligt målingerne, så "resterne" kan opnås med maksimal detaljering i målingerne.

5) Du kan kun slippe af med nogle af de overflødige låse oprettet af platformen ved . I den automatiske driftstilstand for konfigurationer "overtager" platformen blokerende ressourcer. Bekymringsfri pris automatisk tilstand— låse er mulige ved grænserne af indeksområder, låse på et tomt bord og låseeskalering.

Disse låse forsvinder fuldstændigt fra dataene i transaktionen. Det vil sige, at denne sammenlåsning ikke vil være mulig ved drift i kontrolleret tilstand.

Jeg har allerede sagt "administrerede låse" og "administreret tilstand" flere gange. Du skal forstå, at der er to typer låse:
DBMS-låse installeres automatisk på DBMS-niveau, når forespørgsler udføres.
1C:Enterprise-låse installeres automatisk ved skrivning (modificering) af data og altid manuelt ved læsning af data.

En omhyggelig læser vil sige, at 1C også opdeler i objekt- og ikke-objektlåse, men nu vil vi ikke røre ved denne tilgang.

Men jeg bemærker, at det stiller flere krav til en 1C-specialists kvalifikationer og erfaring.

6) Manglende indekser (især i komplekse forespørgsler) er generelt hovedfaktoren i forekomsten af ​​et højere niveau af låsning end nødvendigt. Dem. paradoks, på den ene side sagde jeg, at før jeg optimerede forespørgslen, sagde jeg, at du først skal se på låsene, men nu siger jeg, at for at optimere låsene, skal du optimere forespørgslen. Jeg har en undskyldning, at skifte konfigurationen til administrerede låse reducerer unødvendige låse, selv i en ikke-optimal forespørgsel. Dette sker på grund af et fald i transaktionsisolationsniveauet, hvilket igen giver DBMS-låseadministratoren færre grunde til at pålægge en overdreven låsning.

Hovedårsagerne til overdreven låsning (for at opsummere ovenstående)

— designfejl
(graden af ​​parallelitet bestemmes af "hvor fint dataene er hakket": parallelt arbejde med to rækker i tabellen er muligt, arbejde med en række vil kun ske sekventielt)
(fejl ved brug af metadata: registrering af konstanter, sekvenser, driftsregnskab på regnskabsregistre)
— overdreven blokering på grund af fejl i den automatiske tilstand (platform-DBMS-kombination).
- ikke-optimal forespørgselsydeevne
(for eksempel, når du scanner en tabel, er hele bordet låst - redundant område
og blokeringstiden øges - overdreven tid, et yderligere antal blokeringer øger sandsynligheden for blokeringseskalering)

Som du kan se, er opgaven med at optimere låse "mangefacetteret". Du skal være så klar som muligt om den "kontekst", der forårsagede problemet. På hvilke ressourcer, hvilken kode. Hvor meget er denne blokering egentlig nødvendig, eller er den overflødig?

Et barn og en voksen har ondt i halsen. Når lægen stiller spørgsmålet "Hvad er der galt?", vil barnet se på lægen og skrige (tro mig, jeg ved det), mens den voksne vil påpege symptomerne på sygdommen. Disse tilsyneladende forskelle leder lægen til forskellige metoder til at identificere problemet.
Med et barn skal lægen udføre mange test, indsamle data, kombinere dem, udføre analyser og først derefter komme med anbefalinger. Mens en voksen vil stille flere spørgsmål, og da antallet af indledende data er lille, vil tiden til analyse og bestemmelse af problemet være væsentligt mindre. Som følge heraf vil anbefalinger blive udstedt meget tidligere.

Brug vores tjenester, og du vil have flere muligheder for at analysere problemet og finde en løsning gratis!

Brugerklagen "1C hænger", som er velkendt af it-specialister, har mange årsager. For at lave en korrekt "diagnose" - at identificere og analysere et problem, kræver det dets reproduktion, fordi et problem, der ikke kan reproduceres, som regel er næsten umuligt at løse. Efter at have forstået symptomerne på 1C-frysning, vil vi tage det første skridt mod et effektivt fungerende system.

Meget lang systemstart

Lang opstart tung konfiguration under én bruger for første gang efter tilføjelse af informationssikkerhed til listen over databaser på computeren er et normalt fænomen. Under den første lancering cachelagres konfigurationen. Det andet og efterfølgende løb skal være hurtigere.

Systemstart, der tager lang tid, kan indikere problemer med den arkitektoniske implementering af konfigurationen. Det meste af konfigurationen læses kun af platformen første gang, det ønskede metadataobjekt tilgås. En lang opstart indikerer sandsynligheden for brug stort antal metadataobjekter (mange opkald til forskellige fælles moduler, behandling osv.).

Det skal tages i betragtning, at første gang, teksten til et modul åbnes, kompileres den. Denne proces tager også tid, hvilket især er mærkbart, hvis der er mange moduler. Således løses problemet med langsom opstart ved at ændre (optimere) konfigurationen, hvis formål er at deaktivere udførelsen af ​​alle valgfri algoritmer, der udføres ved systemstart.

Der er en mulighed for, at konfigurationen forsøger at læse data fra internettet, når den startes. Dette øger også systemstarttiden.

Meget lang åbning af formularer

Lang åbning af formularer kan skyldes:

  1. Et stort antal kontroller på formularen - der bruges tid på at skabe formularen og sammenkoble arrangementet af formularelementer;
  2. Udførelse af algoritmer under formularinitialisering. Det er muligt, at når formularen oprettes, kontrolleres nogle betingelser og/eller relaterede objekter læses fra databasen.

Det første problem "behandles" ved at forenkle formularen. For eksempel kan nogle kontroller placeres i separate former, hvilket endda kan være mere bekvemt for brugeren. For eksempel, hvis formularen har et adressefelt "By", "Gade", "Hus" osv., så er det bedre at redigere adressen i en separat formular.

Det andet problem løses ved at analysere de handlinger, der udføres ved oprettelse og åbning af en formular, og optimere disse algoritmer. Måske er nogle af algoritmerne allerede forældede, mens andre kan forenkles og optimeres, for eksempel ved at eliminere eller minimere adgangen til data i databasen.

Som en interaktiv handling skal du betragte brugeren, der forsøger at vælge en værdi på et formularelement. Som svar på det "tænker systemet på noget." Dette kan ske af følgende årsager:

  1. Algoritmerne, der kører i denne handling, undersøger eller beregner tilknyttede data, der påvirker værdivalgstilstanden;
  2. Vælg-formularen, der åbner for at vælge denne værdi, læser alle objekter fra databasen, når de initialiseres.

For at løse det første problem, bør du bruge "Performance Measurement", finde ressourcekrævende algoritmer og optimere dem.


Det andet problem kan ofte løses ved blot at analysere implementeringen af ​​valgskemaet. For eksempel bør du sikre dig, at egenskaben "Dynamisk datalæsning" er indstillet til en dynamisk liste, at egenskaben "Hovedtabel" er indstillet korrekt, og at listeimplementeringen ikke bruger åbenlyst ressourcekrævende algoritmer.

Der er også situationer, hvor der ved åbning af udvælgelsesformularen læses nogle relaterede data fra databasen (f.eks. ved åbning af udvælgelsesformularen "Vare", læses saldi af varer i lagre). Typisk er dette ikke bedste løsning. Det er bedre at læse relaterede data asynkront efter åbning af formularen. Dette vil medføre mindre ubehag for brugeren, pga Efter formularen er vist, vil brugeren bruge lidt tid på at opfatte den åbnede formular, og denne tid kan bruges til at indlæse relaterede data.

Meget lang respons på opdateringer

Et af de trivielle symptomer kan dog fortælle om nogle systemproblemer: 1C-opdateringen fryser, når du starter en sikkerhedskopi. Dette sker hovedsageligt ved opdatering via internettet og indikerer højst sandsynligt, at konfigurationen ikke er blevet opdateret i lang tid, og udgivelser, der rullede efter hinanden, forårsagede en frysning. Du kan forhindre et sådant problem ved at installere opdateringer rettidigt, og hvis du støder på det, kan du blot afbryde sikkerhedskopieringsprocessen. Efter start af konfiguratoren vil databasen starte med de ændringer, der er foretaget i normal tilstand.

Det skal bemærkes, at 1C 8.3 fryser under opdateringer oftest også fordi den kræver mere ressourcekrævende hardware end tidligere versioner platforme. Det er værd at være opmærksom på lydstyrken VÆDDER og om nødvendigt øg det - dette skulle i princippet hjælpe med at løse problemet "1C fryser ved opdatering af konfigurationen."

Lang proces med registrering af genstande/udførelse af dokumenter

I dette tilfælde er "behandling baseret på fotografering" praktisk talt udelukket, da årsagerne kan være meget forskellige, fra en stor mængde data i objektet til at vente ved sluser.

Men selv i DETTE tilfælde er det muligt at skitsere en retning for analyse.

Fraværet af væsentlige ændringer i optagelsestiden på grund af tidspunktet på dagen eller antallet af brugere (som et groft, subjektivt skøn) indikerer et problem i koden eller i mængden af ​​data for objektet. Til analyse giver det mening at bruge værktøjet "Performance Measurement".

En dramatisk ændring i registreringstid med uklare afhængigheder kræver, at der udføres en statistisk analyse af problemets forekomst, dvs. præstationsanalyse. Den nemmeste måde er at analysere brugen af ​​logbogen. En yderligere fordel her er, at 1C:Enterprise 8-platformen understøtter lagring af logdata til en fil i SQLite-format. Dette giver dig mulighed for at bruge SQL-forespørgsler til at analysere logdataene. Det er ganske muligt at hente objektskrivetiden fra logdataene, givet det faktum, at hver objektskrivning udføres i en transaktion, og hver transaktion har sit eget identifikationsnummer.


Hvis resultatet af statistisk analyse viste, at optagelsestiden for et objekt afhænger af tidspunktet på dagen og ikke af antallet af brugere, er det nødvendigt at analysere belastningen på 1C-serveren og databaseserveren. Det er muligt, at serveren kører rutineprocesser, der optager unødvendige ressourcer.

Hvis tiden det tager at skrive objekter afhænger af antallet af brugere, er problemet højst sandsynligt i koden (venter muligvis på låse) eller i båndbredde udstyr. For at løse dem bør du tiltrække en specialist med kompetencen "1C: Ekspert i teknologiske problemer", da der ikke er nogen fælles regler for at løse et sådant problem.

Denne artikel diskuterer de vigtigste faktorer: Når 1C sænker farten, fryser 1C, og 1C virker langsomt. Dataene er udarbejdet på baggrund af SoftPoints mangeårige erfaring med at optimere store IT-systemer bygget på 1C + MS SQL kombinationen.

Til at begynde med er det værd at bemærke myten om, at 1C ikke er beregnet til det samtidige arbejde af et stort antal brugere, aktivt støttet af forumbrugere, der i disse indlæg finder tryghed og en grund til at forlade alt, som det er. Med tilstrækkelig tålmodighed og viden kan du bringe systemet til et hvilket som helst antal brugere. Langsomt arbejde og 1C-frysning vil ikke længere være et problem.

Fra praksis: Den nemmeste måde at optimere er 1C v7.7 (Optimering af 1C 8.1, 1C 8.2, 1C 8.3 er en sværere opgave, da applikationen består af 3 links). At bringe det til 400 samtidige brugere er et ret typisk projekt. Op til 1500 er allerede svært og kræver hårdt arbejde.

Den anden myte: for at forbedre ydeevnen af ​​1C og slippe af med 1C fryser, skal du installere en mere kraftfuld server. Som regel er det i optimeringsprojekter i 95 % af tilfældene muligt at opnå acceptabel ydeevne enten uden en opgradering overhovedet, eller ved at opdatere en mindre del af udstyret, for eksempel ved at tilføje RAM. Det skal bemærkes, at udstyret stadig skal være serverbaseret, især disk undersystem. Et forældet diskundersystem er blot en af ​​grundene til, at 1C arbejder langsomt.

Den vigtigste begrænsning, når du arbejder med flere brugere i 1C, er låsemekanismen. Det er blokeringen i 1C, og ikke serverudstyret, der normalt forhindrer et stort antal personer i at arbejde i databasen. For at overvinde dette problem skal du arbejde hårdt og ændre låselogikken i 1C - sænk dem fra tabelform til rækkebaserede. Så vil f.eks. bogføring af et dokument kun blokere ét, og ikke alle dokumenter i systemet.

Figur 1. 1C-blokeringskø i PerfExpert-overvågningssystemet, med information om 1C-brugere, et konfigurationsmodul og en specifik kodelinje i dette modul.

Ændring af 1C-låsemekanismen er en meget kompleks teknologi. Ikke alle kan trække sådan et trick, og for dem er der kun én vej tilbage - optimering af strukturen og fremskyndelse af udførelsestiden for operationer. Faktum er, at blokering i 1C og udførelsestiden for operationer er stærkt indbyrdes forbundne indikatorer. For eksempel, hvis handlingen med at bogføre et dokument tager 15 sekunder, hvornår store mængder brugere, er der stor sandsynlighed for, at en anden under transaktionen vil forsøge at overføre dokumentet og vente med at blokere. Hvis du øger udførelsestiden til mindst 1 sekund, vil 1C-blokering for denne operation blive reduceret betydeligt.

Mere farligt ud fra et blokeringssynspunkt er gruppebehandling, som kan tage lang tid at gennemføre og samtidig forårsage 1C-blokering. Enhver behandling, der ændrer data, for eksempel gendannelse af sekvensen eller batchbehandling af dokumenter, låser tabellerne og forhindrer andre brugere i at bogføre dokumenter. Jo hurtigere disse behandlinger udføres, jo hurtigere mindre tid blokerer og gør det nemmere for brugerne at arbejde.

Tunge rapporter, der udfører skrivebeskyttede handlinger, kan også være farlige med hensyn til låsning, selvom det ser ud til, at de ikke låser data. Sådanne rapporter påvirker intensiteten af ​​blokering i 1C, hvilket bremser andre operationer i systemet. Det vil sige, at hvis rapporten er meget tung og optager størstedelen af ​​serverens ressourcer, kan det vise sig, at før rapporten blev lanceret, blev de samme handlinger udført i 1 sekund, og under udførelse af rapporten blev de udført i 15 sekunder. . Naturligvis vil intensiteten af ​​blokering også stige, efterhånden som udførelsestiden for operationer øges.

Figur 2. Belastning på den fungerende server i form af konfigurationsmoduler, fra alle brugere. Hvert modul har sin egen farve. Der er en tydelig ubalance i belastningen skabt fra 1C.

Grundreglen for optimering er, at dokumentbehandling skal tage et minimum af tid og kun udføre nødvendige operationer. Registerberegninger uden angivelse af filtreringsbetingelser bruges f.eks. ofte ved bogføringsbehandling. I dette tilfælde skal du angive filtre for registre, der giver dig mulighed for at opnå den bedste selektivitet, uden at glemme, at registret ifølge filtreringsbetingelserne skal have passende indekser.

Ud over at lancere tunge rapporter kan ikke-optimale indstillinger af MS SQL og MS Windows sænke udførelsestiden for operationer og derfor øge intensiteten af ​​1C-blokering. Dette problem opstår hos 95 % af klienterne. Det skal bemærkes, at disse er servere for seriøse organisationer, hele afdelinger af højt kvalificerede administratorer er involveret i deres support og konfiguration.

Hovedårsagen er ikke korrekte indstillinger server er administratorers frygt for at ændre noget på en kørende server og reglen "Det bedste er det godes fjende." Hvis administratoren ændrer serverindstillingerne og problemer begynder, vil al myndighedernes vrede strømme ud over den skødesløse administrator. Derfor er det mere rentabelt for ham at lade alt være, som det er, og ikke tage et eneste skridt uden ordre fra sine overordnede, end at eksperimentere på eget ansvar.

Den anden grund er manglen på klare oplysninger om netværksoptimeringsproblemer. Der er mange meninger, der ofte helt modsiger hinanden. Enhver mening dedikeret til optimering har sine modstandere og fanatikere, som vil forsvare den. Som følge heraf er der større sandsynlighed for, at internettet og fora forvirrer serverindstillingerne end til at hjælpe. I en situation med sådan usikkerhed har administratoren endnu mindre lyst til at ændre noget på en server, der på en eller anden måde fungerer.

Ved første øjekast er billedet klart - du skal optimere alt, hvad der bremser driften af ​​1C-serveren. Men lad os forestille os, at vi er i stedet for en sådan optimizer - lad os sige, at vi har 1C 8.1 8.2 8.3 UPP og 50 brugere arbejder på samme tid. En frygtelig dag begynder brugerne at klage over, at 1C er langsom, og vi skal løse dette problem.

Først og fremmest ser vi på, hvad der sker på serveren - hvad nu hvis nogle særligt uafhængige antivirus udfører en fuld scanning af systemet. En inspektion viser, at alt er i orden - serveren indlæses 100%, og kun ved sqlservr-processen.

Fra praksis: En af junioradministratorerne slog på eget initiativ automatisk opdatering til på serveren, Windows og SQL opdaterede gladeligt, og efter opdateringen begyndte en massiv opbremsning i 1C-brugernes arbejde, eller 1C frøs simpelthen.

Det næste trin er at kontrollere, hvilke programmer der indlæser MS SQL. Inspektion viser, at belastningen genereres af ca. 20 applikationsserverforbindelser.

Fra praksis: et program, der omgående opdaterer data på et websted, gik i en løkke, og i stedet for at opdatere en gang hver 4. time, gjorde det det kontinuerligt, uden pauser, tungt at belaste serveren og blokere dataene.

Yderligere analyse af situationen står over for store vanskeligheder. Vi har allerede fundet ud af, at belastningen kommer direkte fra 1C, men hvordan kan vi forstå, hvad brugerne præcist gør? Eller i det mindste hvem de er. Det er godt, hvis der er 10 1C-brugere i en organisation, så kan du bare gå dem igennem og finde ud af, hvad de laver nu, men i vores tilfælde er der halvtreds af dem, og de er spredt ud over flere bygninger.

I det eksempel, vi overvejer, er situationen endnu ikke kompleks. Forestil dig, at afmatningen ikke var i dag, men i går. I dag gentager situationen sig ikke, alt er fint, men du skal finde ud af, hvorfor operatørerne ikke kunne arbejde i går (de klagede naturligvis først, før de tog hjemmefra, da de kan lide at chatte hele dagen lang, på grund af det faktum, at intet er arbejder, mere end arbejder). Denne sag understreger behovet for et serverlogningssystem, der altid vil føre en historie over de vigtigste parametre for serverens drift, og hvorfra hændelsessekvensen kan gendannes.

Et logningssystem er simpelthen et uundværligt værktøj i systemoptimering. Hvis du tilføjer muligheden for at se den aktuelle status online, får du et serverstatusovervågningssystem. Ethvert optimeringsprojekt begynder med at indsamle serverstatistik for at identificere flaskehalse.

Da vi begyndte at arbejde inden for optimering, prøvede vi mange serverovervågningssystemer, desværre kunne vi ikke finde noget, der løste dette problem på det rigtige niveau, så vi var nødt til at lave et system på egen hånd. Resultatet blev et unikt produkt, PerfExpert, som gjorde det muligt at automatisere og effektivisere processerne for optimering af IT-systemer. Programmet er kendetegnet ved dets tætte integration med 1C, fraværet af nogen mærkbar ekstra belastning og dets gentagne gange beviste egnethed til praktisk brug i kampsituationer.

For at vende tilbage til vores eksempel er det mest sandsynlige resultat: Administratoren siger: "Det er programmørerne, der har skrevet konfigurationen, der er skylden." Og vognen, som man siger, er der stadig. Som følge heraf sænker 1C farten, fryser eller arbejder langsomt.

Under alle omstændigheder, for at løse 1C ydeevneproblemer, anbefaler vi, at du først køber og bruger ydeevneovervågning PerfExpert , vil dette give dig mulighed for at træffe den rigtige beslutning ledelsesbeslutning og spar penge. Produktet er velegnet til både små 1C:Enterprise informationssystemer - op til 50 brugere, og til systemer - fra 1000 brugere. Siden juli 2015 præstationsovervågning PerfExpert modtaget et 1C:Compatible certifikat, bestået test i Microsoft og hjælper med at løse ydeevneproblemer ikke kun for 1C-systemer, men også for andre informationssystemer baseret på MS SQL Server (Axapta, CRM Dynamics, Doc Vision og andre).

Hvis du kunne lide oplysningerne, anbefales yderligere handlinger:

- Hvis du selvstændigt vil håndtere tekniske problemer med 1C ydeevne (1C 7.7, 1C 8.1, 1C 8.2,1C 8.3) og andre informationssystemer, så er der til dig en unik liste over tekniske artikler i vores almanak (blokering og deadlocks, stor belastning på CPU'en og diske, databasevedligeholdelse og indeksjustering er blot en lille del af de tekniske materialer, som du finder der).
.
- Hvis du gerne vil diskutere præstationsproblemer med vores ekspert eller bestille en PerfExpert præstationsovervågningsløsning, så læg en anmodning, og vi kontakter dig hurtigst muligt.


Denne artikel hjælper dig med at slippe af med fryseprogrammer. I den vil jeg beskrive en metode, der vil hjælpe afslutte et fastfrosset program Højre. Når alt kommer til alt, ofte for at fuldføre et program, bruger folk metoder, de kender - det er febrilske tastetryk alt + f4 eller bare en knap esc og i de fleste tilfælde giver dette ikke resultater. Så skal du trykke på den eneste knap, der helt sikkert vil hjælpe - dette er knappen på systemenhed eller bærbar computer for at lukke ned eller genstarte. I dette tilfælde risikerer du at miste data ikke kun fra det frosne program, men også fra andre, der er åbne.

Der kan være flere årsager til, at programmet fryser:

  • Hvis du har 64x bit system(), og du kører et program designet til 32-bit systemer, så starter programmet i bedste fald ikke, i værste fald fryser det. Selvom der er en nuance her - det sker, at sådanne programmer fungerer, men enten forkert eller fryser over tid.
  • Du har for lidt RAM til at køre.
  • Du har for mange programmer og processer kørende, som allerede indlæser systemet.
  • Du har programmer, der kører i baggrunden, som optager mange systemressourcer
  • Virus
  • Tekniske problemer (den termiske pasta på processoren er tørret ud, der er meget støv tilstoppet, "svag" hardware osv.)

    Og nu har du lanceret programmet og venter på, at det starter. Og hun stoppede ved læsseprocessen og var "tavs". Det er godt, hvis der afspilles baggrundsmusik (hovedsagelig til spil), det kan give dig et tip i form af looping. Du kan selvfølgelig vente et par minutter (ikke mere end 5) i forventning om et “mirakel”, og at programmet hænger, men hvis du ikke vil vente, og du ved med sikkerhed, at programmet er frosset, så skal du i gang lukning af fastfrosne programmer.

    For at afslutte et program, der ikke reagerer(det er det, at fryse også kaldes) skal du ringe til Task Manager. Du kan selvfølgelig bruge ctrl+flytte+esc, men jeg anbefaler at bruge en mere velkendt og effektiv tastaturgenvej ctrl+alt+del.

    I Windows 7, når du trykker på disse taster, åbnes et vindue med fem muligheder, hvor du skal vælge den sidste.


    I fanen Ansøgninger Vi leder efter et frosset program (normalt er dets status ikke reagerer), højreklik på det og vælg fra menuen Gå til proces:


    En fane åbnes Processer med en dedikeret ophængningsproces. Her klikker vi blot videre Afslut processen


    og er enig i systemadvarslen

    Note:
    Du kan selvfølgelig vælge ikke i menuen Task Manager Gå til proces, A Annuller opgave og dette vil være en mere "skånsom" metode, men nogle gange hjælper det ikke. Og jeg er på en eller anden måde vant til at løse sådanne problemer effektivt.

    Sådan kan du "fjerne" et fastfrosset program uden at genstarte computeren og holde andre kørende programmer intakte.

    Det sker det Explorer svarer ikke. Med dette mener jeg, at du for eksempel åbnede en mappe på din computer eller endda bare Min computer, og systemet frøs (det begynder at tænke i lang tid). Dette er sket for mig selv.
    I dette tilfælde kan Task Manager og metoden beskrevet ovenfor også hjælpe.

    Men her vigtigt at huske En detalje: Explorer-processen kaldes explorer.exe, og når den slutter, lukkes alle mapper på din computer. Men det er halvdelen af ​​besværet. Efter du har "dræbt" opdagelsesrejsende, vil kontrolpanelet med Start-menuen også forsvinde. Det er derfor Luk ikke Task Manager med det samme! For at returnere det, der mangler (bortset fra åbne mapper), skal du klikke på Filer -> Kør


    og indtast explorer.exe i linjen


    Klik selvfølgelig på OK, og alt vender tilbage til sin plads.

    Ligesom denne enkel måde for at løse problemet Hvad skal man gøre, hvis programmet ikke reagerer eller fryser.

  • 1) se på mængden af ​​hukommelse, der er allokeret af rphost på 1C-serveren. Hvis du har en x32-version af serveren, kan processen maksimalt bruge 1,75 GB RAM
    Hvis der ikke er nok hukommelse, kan serveren ikke acceptere nye forbindelser eller hænger, når den aktuelle session kræver yderligere hukommelse
    www.viva64.com/ru/k/0036
    2) Se på indstillingerne for "Working server settings" indstillingerne kan være forkerte. Jeg havde dette problem, og serveren blev ved med at fryse. Mine indstillinger er vedhæftet. Serveren er tildelt 11 GB.
    3) Der kan være problemer med at opsætte Postgressql.

    Angiv egenskaberne for din server, databasestørrelser, Postgressql-konfigurationer. Det er svært at sige uden information.

    Min PostgreSQL-konfiguration: https://drive.google.com/file/d/0B2qGCc-vzEVDMERVW...
    Denne konfiguration er valgt for den tilgængelige mængde RAM.
    PostgreSQL installeret på Linux, 3 GB RAM, 3 CPU-kerner.
    Server 1C8: 11 GB RAM, 5 CPU-kerner
    4 databaser, ca. 1 GB hver (uploadet til dt)

    Angiv alle egenskaberne for din server: 1C8 server og database, fysisk eller virtuel, operativsystem, mængden af ​​RAM på hver server, hvilken slags CPU, hvor meget RAM optager rphost-processer, hvor mange er der? Bruger du et RAID-array?

    Tidligere brugte jeg selv PostgreSQL, men undervejs stødte jeg på nogle problemer, da jeg kørte en database på PostgreSQL og skiftede for nylig til MS SQL.

    Din server er ikke dårlig til disse databaser. For at bruge PostgreSQL skal du have en meget god forståelse af dens konfiguration. Når databaserne er små, tilgives mange konfigurationsfejl. Da vi lige er begyndt at implementere 1C + PostgreSQL, havde vi også meget hyppige problemer med driften af ​​databasen (der var hyppige frysninger, det virkede langsomt). PostgreSQL er bedre brugt på Linux, ikke på Windows. Jeg er ikke selv databasespecialist til at sætte databaseserveren op, vi hyrede en specialist fra 1Sbit, og han satte den op for os, og der var ingen problemer i driften efter det.

    Råd:
    Du har store databaser, spar ikke på, hyr en databasespecialist, der kan oprette det for dig. Én person kan ikke være ekspert i alt.

    1) hvor længe siden har du tjekket selve databasen og genindekseret den? VAKUUM og REINDEX
    2) hvor længe siden testede og rettede du databasen ved hjælp af 1C-værktøjer?
    3) er databasens logfil placeret på en separat HDD?
    4) er harddisken tungt belastet?

    Overvej at skifte til MS Sql ofte kræver det "stort set" ingen konfiguration og er lettere at bruge. I modsætning til PostgreSQL er MS Sql klar til at fungere ud af boksen, men PostgreSQL skal konfigureres.

    Hvis du har spørgsmål, så skriv, måske kan jeg hjælpe med noget på Skype: tisartisar

    Hyr en databaseopsætningsspecialist

    Hvorfor vi skiftede til MS SQL:
    Vi bruger UT-konfigurationen og ved månedens lukning opstod der nogle gange fejl, som ikke kunne løses. Hvis du overførte databasen til filtilstand og begyndte at lukke måneden, lukkede alt normalt, den samme database blev indlæst i PostgreSQL server Der opstod fejl ved beregning af omkostningerne. På det tidspunkt var vi et halvt år bagud i lukkemåneder på grund af flydende fejl. Vi oprettede en testdatabase på MS SQL og den måned, der ikke kunne lukkes på PostgreSQL på MS SQL, blev lukket. Prisafrunding i prislisten virker heller ikke korrekt på PostgreSQL. Faktisk er det understøttet at køre 1C på PostgreSQL, men det anbefales stadig at bruge MS SQL.
    På grund af dette blev det besluttet at skifte til MS SQL, fordi... driftsstabilitet 1C er dyrere.

    Jeg er glad for, at jeg kunne hjælpe, kontakt mig venligst, hvis du har spørgsmål eller problemer.

    1) hvor meget hukommelse er allokeret til MS SQL server? dette er konfigureret i selve MS SQL-serveren.
    2) Test databasen med 1C regelmæssigt
    3) artikel om, hvordan man opsætter backup og vedligeholdelse. Dette er vigtigt og skal gøres regelmæssigt. Jeg gør det hver dag. Tjek alle 3 dele af guiden.