Stuck 1s hva du skal gjøre. Hvordan lukke et frossent program

Virkningen av blokkering på ytelsen til 1C:Enterprise 8

Gilev-teamet har jobbet med ytelsesspørsmål i mange år og har med suksess løst blant annet problemene med å eliminere ventetider på låser og vranglåser.

Nedenfor vil vi beskrive vår erfaring med å løse disse problemene.

Deteksjon av blokkeringsproblemer i 1C

Ytelsesproblemer i flerspillermodus er ikke nødvendigvis relatert til dårlig kode eller dårlig maskinvare. Først må vi svare på spørsmålet - hvilke ytelsesproblemer eksisterer og hva forårsaker dem?

Det er umulig å manuelt spore aktivitetene til hundrevis av brukere, du trenger et verktøy som automatiserer innsamlingen av slik informasjon.

Det er mange verktøy, men nesten alle av dem har en veldig betydelig ulempe - prisen.

Men det er en vei ut – vi velger

Vi vil undersøke problemet på MS SQL Server, så vi trenger følgende tjenester fra dette settet:

1. Overvåking og analyse av lange forespørsler(les mer om oppsett her) - nødvendig for å vurdere om det er langtidsdrift for subd.

Faktisk tillater faktumet av deres tilstedeværelse oss å si at det er ytelsesproblemer, og problemene ligger i linjene med 1C-konfigurasjonskode, som tjenesten vil rangere etter viktighet. Problemer øverst på listen må løses først. Slike løsninger på problematiske linjer vil gi størst effekt, d.v.s. vil være til størst nytte og fordel for brukerne av systemet.

(les mer her) vil tillate oss å vurdere om tiden med lange (lange) forespørsler faktisk er forårsaket av venting på låser eller det er andre årsaker (ikke-optimal kode, overbelastet maskinvare osv.) Tjenesten vil vise årsaken til ventetiden ved forespørselen, nemlig ressursen som ble blokkert og hvem som blokkerte ham. De. vi vil forstå tilstedeværelsen av blokkeringsproblemer og årsakene deres.

3. Analyse av gjensidige låser i 1C og MS SQL server(les mer om oppsettet her) - vil tillate oss å vurdere mer vanskelige situasjoner med å vente på ressurser, når flere deltakere allerede har klart å «fange» noen ressurser ved å blokkere og nå er tvunget til å vente på hverandre på grunn av at de ikke kan frigi okkuperte ressurser før fangst av andre ressurser blokkert av naboer er fullført.

Generelt kan en slik vanskelig situasjon ikke løses manuelt.

4. Kontroll av utstyrsbelastning(les mer om oppsettet her) hjelper oss med å svare på spørsmålene – hvor mange brukere er i systemet, har de låser, hvor mange låser er det, tåler maskinvaren belastningen?

Tjenester er veldig enkle å sette opp, men selv om du fortsatt har spørsmål, er det det!

Ved å bruke verktøyene som er oppført ovenfor, har vi objektiv informasjon om systemytelse. Dette gjør at vi kan vurdere situasjonen korrekt og foreslå adekvate tiltak.

Faktisk mottar vi informasjon om alle ytelsesproblemer og kan svare nøyaktig på spørsmål som "hvor mange problemer er i systemet", "hvor nøyaktig oppstår de", "hver av problemene med nøyaktig hvilken frekvens som oppstår", "hvilke problemer er betydelige og som er mindre». De. vi ser alle forutsetningene som dannet årsaken til problemet.

Tjenester lar deg forbedre forståelsen din av forholdene under hvilke problemer oppstår, uten å tvinge deg til å fordype deg manuelt i slike ting som datalagringsstrukturen til informasjonsbasen på DBMS-nivå, låsemekanismen, etc.

Som et resultat får vi et bilde av ytelse som måles

— forespørselstid (selvfølgelig rangering av problematiske forespørsler etter vekt (forespørselstid etter antall anrop til denne forespørselen);

— ventetid for låser;

Så vi lanserte tjenesten Analyse av forventninger til blokkeringer

I den øverste tabellen viser tjenesten en liste over "ofre" for blokkering, tatt i betraktning den totale vekten av "vekten av forventninger."

I den nedre tabellen vurderes for hvert offer en eller flere deltakere i "kampen for en svært konkurransedyktig ressurs", der blokkeringsventingen oppsto.

I den nedre tabellen åpner du detaljene for en av "timeout"-hendelsene. Som på bildet for eksempel.

Ved å markere linjen med "synderen", vil vi se at flaskehalsen var _Reference64-tabellen, og det oppsto et problem på den grupperte indeksen med det "ukjente" området. Kanskje i fremtiden vil vi gi det nytt navn til "tabell", siden denne oppførselen faktisk er typisk for å øke/forstørre blokkeringsområdet.

Linjen med "offeret" viser hvilken kode som var et gissel for situasjonen og ikke kunne blokkere alt, bare linjen "med nøkkel" (minste datablokkeringsområde i denne tabellen).

Dette problemet kan løses "riktig" og "enkelt".

Av den riktige måten det er vanskeligere å gjøre - du må faktisk skrive om koden, og minimere sannsynligheten for at slike situasjoner oppstår.

En av faktorene, hvor merkelig det enn kan høres ut, er en reduksjon i varighet.

Du kan redusere transaksjonsvarigheten:

1. omskriving av algoritmen

2. ved å omskrive spørringen (en raskere spørring reduserer sannsynligheten for låsinger i komplekse transaksjoner på tabeller, som noen ganger kanskje ikke en gang er med i spørringen!)

2.1 legge til den manglende dekkende indeksen (noen ganger øker en indeks ikke bare søket, men reduserer også dataleseområdet, noe som reduserer sannsynligheten for blokkering)

3. redusere mengden data som behandles i en transaksjon (i tillegg til lineær hastighet husker vi også låseskalering)

4. øke utstyrsproduktiviteten innenfor hver flyt

Be om utførelsestid

1) ulike brukere kan arbeide parallelt med ulike data
2) forskjellige brukere må jobbe strengt sekvensielt med de samme dataene

Det er imidlertid mulig å optimere bruken av låser, og dermed redusere den totale ventetiden.

Hvordan blokkering fungerer (du trenger ikke å lese dette avsnittet)

En spesiell SQL Server-modul, Lock Manager, håndterer låser. Hans oppgaver inkluderer:

  • opprette og installere låser;
  • opplåsing;
  • eskalering av blokkering;
  • bestemme låskompatibilitet;
  • eliminere vranglås og mye mer.

Når en bruker gjør en forespørsel om å oppdatere eller lese data, overfører DBMS-transaksjonsbehandleren kontrollen til DBMS-låsbehandleren for å bestemme om de forespurte ressursene er låst, og i så fall om den forespurte låsen er kompatibel med den gjeldende. Hvis låser er inkompatible, blir utføringen av den gjeldende transaksjonen forsinket til dataene er låst opp. Når dataene er tilgjengelige, anskaffer låseadministratoren den forespurte låsen og returnerer kontrollen til transaksjonsadministratoren.

Hovedårsaken til at ytelsen reduseres er blokkering

Venter på lås er et stort ytelsesproblem i flerspillermodus. Og dette er forståelig, fordi de øker ventetiden på operasjoner, og dermed responstiden. Er det mulig å si at venting på låser ikke er riktig og en feil i et flerbrukersystem? Dette kan ikke sies, siden ressursblokkeringsmekanismen i seg selv sikrer dataintegritet. Ved å bruke låsemekanismen SKRIVES samtidig data som følge.

Forskjellen mellom nødvendige og unødvendige låser

Når en bruker rapporterer en feil som venter på en lås, så er dette fra hans synspunkt alltid en feil, fordi det for eksempel forstyrrer arbeidet hans - tiden det tar å fullføre arbeidet hans øker.

Erfaring antyder en enkel regel: Hvis mer enn halvparten av forespørselsutførelsestiden faktisk venter på en blokkert ressurs, må du se: kanskje noe av låsingen kan optimaliseres og ressursblokkeringstiden kan reduseres.

Her, som ved en tilfeldighet, introduserer jeg en definisjon:

Venter på blokka er en situasjon som oppstår når to brukere prøver å fange opp de samme dataene samtidig. I dette tilfellet blir en av disse brukerne blokkert, det vil si at den må vente til den første brukerens transaksjon er fullført.

En transaksjon er et sett med beregninger og operasjoner med data (de fleste lysende eksempel— når du utfører et dokument) utført som en helhet. Unnlatelse av å utføre noen av transaksjonsoperasjonene resulterer i kansellering av hele transaksjonen.

Så brukere i multi-user infobaser kan ofte klage på at det er umulig å jobbe på grunn av disse låsene, mens koden faktisk kan ha låser som ikke er nødvendig på dette stedet (overflødig).
Og også i konfigurasjonskoden kan det hende at de selv ikke er til stede, for eksempel kan du lese om dem her http://kb.1c.ru/articleView.jsp?id=30 (artikkelen er et fragment av boken; av P.S. Belousov, A .V.Ostroverh "1C:Enterprise: fra 8.0 til 8.1."). Jeg tilbyr en forenklet måte å forklare forskjellene mellom låser på enkelt eksempel Så:

I konfigurasjonen din i 1C:Enterprise-modus oppretter du to identiske fakturaer med samme varesammensetning. Men husk å angi de forskjellige mottakslagrene.
I posteringsbehandlingskoden må du legge til en linje med en melding som vises på skjermen (eller annen kode som kan forsinke utførelsen av posteringsbehandlingen med 21 sekunder (blokkeringstidsavbruddet inntreffer etter 20 sekunder hvis parametrene er som standard)) .
Legg ut to dokumenter.
Hvis det oppstår en timeout, og logisk nok kommer varene til forskjellige varehus, er det redundante låser i applikasjonen. Forretningslogikk (vurder sunn fornuft) det bør ikke være noen blokkering her.
Hvis vi nå lager identiske varehus i disse to fakturaene. Da vil blokkeringen opprettet som følge av forsøk på samtidig utførelse føre til en NØDVENDIG blokkering og dette er BRA!

De. Mens fakturaen gjør endringer i lagersaldoene, må den andre vente.

Selv dette enkle eksemplet etterlater selvfølgelig mange spørsmål. For eksempel, hva om dokumentene er fra én leverandør og gjelden på den "flytter". Og hvis det ikke bare er saldoene på lageret som flytter, men flere registre og dokumenter av ulike typer.
Men det viktigste spørsmålet er: VED HVILKEN FORRETNINGSLOGIKK SKAL DET IKKE VÆRE BLOKKERINGER. Hvem foreskriver denne forretningslogikken og hvor i blokkeringssammenheng? Men la oss snakke om alt i rekkefølge.

Overdrevne låser er unødvendige låser som ikke er nødvendige med tanke på å sikre dataintegritet og samtidig redusere den generelle ytelsen til systemet, noe som øker den totale nedetiden - venter på låser.
Nødvendig låsing skjer når to brukere anskaffer de samme ressursene (dataobjekter). Hvis brukere arbeider med ikke-overlappende ressurser, men venter på en lås, anses låsen som redundant.

De mest forståelige kriteriene for låsing av redundans er:

1. Gjensidige låser;

2. Blokkeringsnivået (området) er høyere enn nødvendig (som spesielt tilfelleøke blokkeringsnivået, den såkalte. eskalering);

3. Låsetiden er lengre enn tiden for "reell" bruk av låseobjektet.

Etter å ha mottatt informasjon om grupperinger av problemer i sammenheng med 1C:Enterprise-metadata, anbefaler jeg først og fremst å ta hensyn til følgende objekter:

  • Konstanter
  • Etterfølge
  • Regnskapsregistre
  • Akkumulasjonsregistre
  • Informasjonsregistre
  • Beregningsregistre

1) Inntil nylig var det en velkjent anbefaling om ikke å skrive noe inn i konstanter. I ekstreme tilfeller, gjør dette fra under én bruker, og husk at mens brukeren "skriver" en konstant, ikke bare denne, men også en hvilken som helst annen konstant, vil andre brukere "vente". Derfor er det spesielt farlig å bruke konstanter i transaksjonsbehandlingen. Verdiene til alle konstanter lagres V én ressurs.

Figuren viser den fysiske plasseringen av SCP-konfigurasjonskonstanter i en MS SQL Server 2005-databasetabell.

Dette betyr at låsing av én konstant vil låse alle konstanter. DBMS pålegger en lås på HELE enkeltraden i tabellen, dvs. for alle konstanter.

I de siste utgivelsene av plattformen har imidlertid lagringen av konstanter blitt endret. Nå er hver konstant en separat tabell. Ikke la deg rive med, men hvis du lager tusenvis av bord, kan du få en lås på masterbasen.

Merk, hvis konfigurasjonen din har eksistert lenge, kan du endre lagringsformatet ved å "restrukturere" det i Testing og korrigering av konfiguratoren.

2) Slutt å bruke Sequence-metadataobjektet. I hvert fall fra bevegelser når operativ gjennomføring, utføres under ikke-operative (ytterligere) prosedyrer. Se hvordan det er implementert i siste versjoner UPP.

3) Hvis systemet utfører online registrering av bevegelser i regnskapsregisteret i flerbrukermodus, anbefales det:

  • aktiver totalseparasjonsmodus for dette registeret;
  • Ikke bruk registerbalansekontroll under operativt arbeid.

4) I akkumuleringsregisteret, i tilfeller der det ikke er behov for å innhente "operative" data, kan du aktivere deling av totaler, noe som vil øke parallelliteten til dataregistrering og øke hastigheten på arbeidet generelt. Overvåk målingene nøye slik at "restene" kan oppnås med maksimal detalj i målingene.

5) Du kan bli kvitt noen av de overflødige låsene som er opprettet av plattformen kun ved . I den automatiske driftsmodusen for konfigurasjoner "overtar" plattformen blokkeringsressurser. Bekymringsfri pris automatisk modus— Låser er mulig ved grensene til indeksområder, låser på et tomt bord og låseskalering.

Disse låsene forsvinner helt fra dataene i transaksjonen. Det vil si at denne forriglingen ikke vil være mulig ved drift i kontrollert modus.

Jeg har allerede sagt "administrerte låser" og "administrerte modus" flere ganger. Du må forstå at det er to typer låser:
DBMS-låser installeres automatisk på DBMS-nivå når spørringer utføres.
1C:Enterprise-låser installeres automatisk når du skriver (endrer) data og alltid manuelt når du leser data.

En nitid leser vil si at 1C også deler inn i objekt- og ikke-objektlåser, men nå skal vi ikke berøre denne tilnærmingen.

Men jeg legger merke til at det stiller flere krav til kvalifikasjonene og erfaringen til en 1C-spesialist.

6) Manglende indekser (spesielt i komplekse søk) er generelt hovedfaktoren i forekomsten av et høyere nivå av låsing enn nødvendig. De. paradoks, på den ene siden sa jeg at før jeg optimaliserte spørringen sa jeg at du først må se på låsene, men nå sier jeg at for å optimalisere låsene, må du optimalisere spørringen. Jeg har en unnskyldning, å bytte konfigurasjonen til administrerte låser reduserer redundante låser selv i en ikke-optimal spørring. Dette oppstår på grunn av en reduksjon i transaksjonsisolasjonsnivået, som igjen gir DBMS-låseadministratoren færre grunner til å pålegge en overdreven låsing.

Hovedårsakene til overdreven låsing (for å oppsummere det ovenstående)

— designfeil
(graden av parallellitet bestemmes av "hvor fint dataene er kuttet": parallelt arbeid med to rader i tabellen er mulig, arbeid med en rad vil bare skje sekvensielt)
(feil ved bruk av metadata: registrering av konstanter, sekvenser, driftsregnskap på regnskapsregistre)
— overdreven blokkering på grunn av feil i automatisk modus (plattform-DBMS-kombinasjon).
- Ikke-optimal søkeytelse
(for eksempel, når du skanner en tabell, er hele bordet låst - redundant område
og blokkeringstiden øker - overdreven tid, et ekstra antall blokkeringer øker sannsynligheten for blokkeringseskalering)

Som du kan se, er oppgaven med å optimalisere låser "mangsidig". Du må være så tydelig som mulig om "konteksten" som forårsaket problemet. På hvilke ressurser, hvilken kode. Hvor mye er denne blokkeringen egentlig nødvendig, eller er den overflødig?

Et barn og en voksen har sår hals. Når legen stiller spørsmålet "Hva er galt?", vil barnet se på legen og skrike (stol på meg, jeg vet), mens den voksne vil påpeke symptomene på sykdommen. Disse tilsynelatende forskjellene leder legen til forskjellige metoder for å identifisere problemet.
Med et barn må legen utføre mye av tester, samler inn data, kombinerer dem, utfører analyser og først deretter gi anbefalinger. Mens med en voksen vil han stille flere spørsmål, og siden antallet innledende data er lite, vil tiden for analyse og bestemmelse av problemet være betydelig mindre. Som et resultat vil anbefalinger bli gitt mye tidligere.

Bruk våre tjenester og du vil få flere muligheter til å analysere problemet og finne en løsning gratis!

Brukerklagen «1C henger», som er godt kjent for IT-spesialister, har mange årsaker. For å gjøre en riktig "diagnose" - identifisere og analysere et problem, er det nødvendig å reprodusere det, fordi et problem som ikke kan reproduseres, som regel er nesten umulig å løse. Etter å ha forstått symptomene på 1C-frysing, vil vi ta det første skrittet mot et effektivt fungerende system.

Veldig lang systemoppstart

Lang oppstart tung konfigurasjon under én bruker for første gang etter å ha lagt informasjonssikkerhet til listen over databaser på datamaskinen er et normalt fenomen. Under den første lanseringen bufres konfigurasjonen. Den andre og påfølgende kjøringen bør være raskere.

Systemoppstart som tar lang tid kan indikere problemer med den arkitektoniske implementeringen av konfigurasjonen. Det meste av konfigurasjonen leses av plattformen kun første gang det ønskede metadataobjektet åpnes. En lang oppstart indikerer sannsynligheten for bruk stort nummer metadataobjekter (mange anrop til ulike vanlige moduler, prosessering osv.).

Det bør tas i betraktning at første gang teksten til en modul åpnes, blir den kompilert. Denne prosessen tar også tid, noe som er spesielt merkbart hvis det er mange moduler. Dermed løses problemet med langsom oppstart ved å modifisere (optimalisere) konfigurasjonen, hvis formål er å deaktivere kjøringen av alle valgfrie algoritmer som kjøres ved systemoppstart.

Det er en mulighet for at konfigurasjonen ved oppstart prøver å lese data fra Internett. Dette øker også systemets oppstartstid.

Veldig lang åpning av skjemaer

Lang åpning av skjemaer kan skyldes:

  1. Et stort antall kontroller på skjemaet - tid brukes på å lage skjemaet og koble sammen arrangementet av skjemaelementer;
  2. Utførelse av algoritmer under skjemainitialisering. Det er mulig at når du oppretter skjemaet, sjekkes noen forhold og/eller relaterte objekter leses fra databasen.

Det første problemet "behandles" ved å forenkle skjemaet. For eksempel kan noen kontroller plasseres i separate former, noe som til og med kan være mer praktisk for brukeren. For eksempel, hvis skjemaet har et adressefelt "By", "Gate", "Hus", etc., så er det bedre å redigere adressen i et eget skjema.

Det andre problemet løses ved å analysere handlingene som utføres når du oppretter og åpner et skjema, og optimaliserer disse algoritmene. Kanskje er noen av algoritmene allerede utdaterte, mens andre kan forenkles og optimaliseres, for eksempel eliminere eller minimere tilgangen til data i databasen.

Som en interaktiv handling bør du vurdere brukeren som prøver å velge en verdi på et skjemaelement. Som svar på det, "tenker systemet på noe." Dette kan skje av følgende årsaker:

  1. Algoritmene som kjører i denne handlingen undersøker eller beregner tilknyttede data som påvirker verdivalgsatferden;
  2. Velg-skjemaet som åpnes for å velge denne verdien, leser alle objekter fra databasen når de initialiseres.

For å løse det første problemet, bør du bruke "Performance Measurement", finne ressurskrevende algoritmer og optimalisere dem.


Det andre problemet kan ofte løses ved ganske enkelt å analysere gjennomføringen av valgskjemaet. Du bør for eksempel sørge for at egenskapen "Dynamisk datalesing" er satt for en dynamisk liste, at egenskapen "Hovedtabell" er riktig satt, og at listeimplementeringen ikke bruker åpenbart ressurskrevende algoritmer.

Det er også situasjoner der, når du åpner utvalgsskjemaet, noen relaterte data leses fra databasen (for eksempel når du åpner "Vare"-utvalgsskjemaet, leses varebalansen i varehusene). Vanligvis er ikke dette Den beste avgjørelsen. Det er bedre å lese relaterte data asynkront etter å ha åpnet skjemaet. Dette vil gi mindre ubehag for brukeren, pga Etter at skjemaet er vist, vil brukeren bruke litt tid på å absorbere skjemaet, og denne tiden kan brukes til å laste inn relaterte data.

Veldig lang respons på oppdateringer

Et av de trivielle symptomene kan imidlertid fortelle om noen systemproblemer: 1C-oppdateringen fryser når du starter en sikkerhetskopi. Dette skjer hovedsakelig når du oppdaterer via Internett og indikerer mest sannsynlig at konfigurasjonen ikke har blitt oppdatert på lenge og utgivelsene, rullende etter hverandre, forårsaket en frysing. Du kan forhindre et slikt problem ved å installere oppdateringer i tide, og hvis du støter på det, kan du ganske enkelt avbryte sikkerhetskopieringsprosessen. Etter å ha startet konfiguratoren vil databasen starte med endringene som er gjort i normal modus.

Det skal bemerkes at 1C 8.3 fryser under oppdateringer oftest også fordi den krever mer ressurskrevende maskinvare enn tidligere versjoner plattformer. Det er verdt å ta hensyn til volumet tilfeldig tilgang minne og, om nødvendig, øk det - dette bør i prinsippet bidra til å løse problemet "1C fryser når du oppdaterer konfigurasjonen."

Lang prosess med registrering av objekter/utføring av dokumenter

I dette tilfellet er "behandling basert på fotografering" praktisk talt utelukket, siden årsakene kan være svært forskjellige, fra en stor mengde data i objektet til å vente ved låser.

Men selv i DETTE tilfellet er det mulig å skissere en retning for analyse.

Fraværet av betydelige endringer i opptakstid på grunn av tidspunktet på dagen eller antall brukere (som et grovt, subjektivt estimat) indikerer et problem i koden eller i datamengden til objektet. For analyse er det fornuftig å bruke verktøyet "Performance Measurement".

En dramatisk endring i registreringstid med uklare avhengigheter krever at man utfører en statistisk analyse av forekomsten av problemet, dvs. ytelsesanalyse. Den enkleste måten er å analysere bruken av loggboken. En ekstra fordel her er at 1C:Enterprise 8-plattformen støtter lagring av loggdata til en fil i SQLite-format. Dette vil tillate deg å bruke SQL-spørringer til å analysere loggdata. Det er fullt mulig å hente objektskrivetiden fra loggdataene, gitt det faktum at hver objektskriving utføres i en transaksjon, og hver transaksjon har sitt eget identifikasjonsnummer.


Hvis resultatet av statistisk analyse viste at opptakstiden til et objekt avhenger av tidspunktet på dagen, og ikke antall brukere, er det nødvendig å analysere belastningen på 1C-serveren og databaseserveren. Det er mulig at serveren kjører rutineprosesser som tar opp unødvendige ressurser.

Hvis tiden det tar å skrive objekter avhenger av antall brukere, ligger problemet mest sannsynlig i koden (eventuelt venter på låser) eller i båndbredde utstyr. For å løse dem bør du tiltrekke deg en spesialist med kompetansen "1C: Expert in teknologiske problemer", siden det ikke er noen enhetlige regler for å løse et slikt problem.

Denne artikkelen diskuterer hovedfaktorene: når 1C bremser ned, fryser 1C og 1C fungerer sakte. Dataene ble utarbeidet basert på SoftPoints mangeårige erfaring med å optimalisere store IT-systemer bygget på kombinasjonen 1C + MS SQL.

Til å begynne med er det verdt å merke seg myten om at 1C ikke er ment for det samtidige arbeidet til et stort antall brukere, aktivt støttet av forumbrukere som finner trygghet i disse innleggene og en grunn til å la alt være som det er. Med nok tålmodighet og kunnskap kan du bringe systemet til et hvilket som helst antall brukere. Sakte arbeid og 1C-frysing vil ikke lenger være et problem.

Fra praksis: Den enkleste måten å optimalisere på er 1C v7.7 (Optimalisering av 1C 8.1, 1C 8.2, 1C 8.3 er en vanskeligere oppgave, siden applikasjonen består av 3 lenker). Å bringe den opp til 400 samtidige brukere er et ganske typisk prosjekt. Opptil 1500 er allerede vanskelig og krever hardt arbeid.

Den andre myten: for å forbedre ytelsen til 1C og bli kvitt 1C fryser, må du installere en kraftigere server. Som regel er det i optimaliseringsprosjekter i 95 % av tilfellene mulig å oppnå akseptabel ytelse enten uten en oppgradering i det hele tatt, eller ved å oppdatere en mindre del av utstyret, for eksempel ved å legge til RAM. Det skal bemerkes at utstyret fortsatt må være serverbasert, spesielt disk undersystem. Et utdatert diskundersystem er bare en av grunnene til at 1C fungerer sakte.

Hovedbegrensningen ved arbeid med flere brukere i 1C er låsemekanismen. Det er blokkeringen i 1C, og ikke serverutstyret, som vanligvis hindrer et stort antall personer i å jobbe i databasen. For å overvinne dette problemet må du jobbe hardt og endre låselogikken i 1C - senke dem fra tabellbasert til radbasert. Da vil for eksempel poste et dokument blokkere kun ett, og ikke alle dokumenter i systemet.

Figur 1. 1C blokkeringskø i PerfExpert overvåkingssystem, med informasjon om 1C-brukere, en konfigurasjonsmodul og en spesifikk kodelinje i denne modulen.

Å endre 1C-låsemekanismen er en svært kompleks teknologi. Ikke alle kan ta et slikt triks, og for dem er det bare én vei igjen - å optimalisere strukturen og fremskynde gjennomføringstiden for operasjoner. Faktum er at blokkering i 1C og utførelsestiden for operasjoner er svært sammenhengende indikatorer. For eksempel, hvis operasjonen med å legge ut et dokument tar 15 sekunder, når store mengder brukere, er det stor sannsynlighet for at noen andre under transaksjonen vil prøve å overføre dokumentet og vil vente med å blokkere. Hvis du øker utførelsestiden til minst 1 sekund, vil 1C-blokkering for denne operasjonen reduseres betydelig.

Mer farlig fra et blokkeringssynspunkt er gruppebehandling, som kan ta lang tid å fullføre og samtidig forårsake 1C-blokkering. Enhver behandling som endrer dataene, for eksempel gjenoppretting av sekvensen eller batchbehandling av dokumenter, låser tabellene og hindrer andre brukere i å legge ut dokumenter. Naturligvis, jo raskere disse behandlingene utføres mindre tid blokkerer og gjør det enklere for brukere å jobbe.

Tunge rapporter som utfører skrivebeskyttede operasjoner kan også være farlige når det gjelder låsing, selv om det ser ut til at de ikke låser data. Slike rapporter påvirker intensiteten av blokkering i 1C, og bremser andre operasjoner i systemet. Det vil si at hvis rapporten er veldig tung og tar opp mesteparten av serverens ressurser, kan det vise seg at før rapporten ble lansert, ble de samme operasjonene utført i 1 sekund, og under rapportkjøringen ble de utført i 15 sekunder . Når utførelsestiden for operasjoner øker, vil naturligvis også blokkeringsintensiteten øke.

Figur 2. Last på fungerende server i form av konfigurasjonsmoduler, fra alle brukere. Hver modul har sin egen farge. Det er en tydelig ubalanse i belastningen skapt fra 1C.

Grunnregelen for optimalisering er at dokumentbehandling skal ta et minimum av tid og kun utføre nødvendige operasjoner. Registerberegninger brukes for eksempel ofte i konteringsbehandling uten å spesifisere filtreringsbetingelser. I dette tilfellet må du spesifisere filtre for registre som lar deg oppnå den beste selektiviteten, uten å glemme at i henhold til filtreringsbetingelsene, må registeret ha passende indekser.

I tillegg til å lansere tunge rapporter, kan ikke-optimale innstillinger for MS SQL og MS Windows redusere utførelsestiden for operasjoner og derfor øke intensiteten til 1C-blokkering. Dette problemet forekommer hos 95 % av klientene. Det bør bemerkes at dette er servere til seriøse organisasjoner, hele avdelinger med høyt kvalifiserte administratorer er involvert i deres støtte og konfigurasjon.

Hovedårsaken er ikke riktige innstillinger server er administratorers frykt for å endre noe på en kjørende server og regelen "Det beste er det godes fiende." Hvis administratoren endrer serverinnstillingene og problemer begynner, vil alt myndighetenes sinne strømme ut over den uforsiktige administratoren. Derfor er det mer lønnsomt for ham å la alt være som det er, og ikke ta et eneste skritt uten ordre fra sine overordnede, enn å eksperimentere på eget ansvar.

Den andre grunnen er mangelen på tydelig informasjon om problemer med nettverksoptimalisering. Det er mange meninger som ofte helt motsier hverandre. Hver mening dedikert til optimalisering har sine motstandere og fanatikere som vil forsvare den. Som et resultat er det mer sannsynlig at Internett og fora forvirrer serverinnstillingene enn å hjelpe. I en situasjon med slik usikkerhet har administratoren enda mindre ønske om å endre noe på en server som på en eller annen måte fungerer.

Ved første øyekast er bildet klart - du må optimalisere alt som bremser driften av 1C-serveren. Men la oss forestille oss i stedet for en slik optimizer - la oss si at vi har 1C 8.1 8.2 8.3 UPP og 50 brukere jobber samtidig. En forferdelig dag begynner brukere å klage over at 1C er treg, og vi må løse dette problemet.

Først av alt ser vi på hva som skjer på serveren - hva om et spesielt uavhengig antivirus utfører en fullstendig skanning av systemet. En inspeksjon viser at alt er i orden - serveren lastes med 100%, og kun av sqlservr-prosessen.

Fra praksis: en av junioradministratorene slo på eget initiativ på automatisk oppdatering på serveren, Windows og SQL oppdaterte gladelig, og etter oppdateringen begynte en massiv nedgang i arbeidet til 1C-brukere, eller 1C frøs rett og slett.

Det neste trinnet er å sjekke hvilke programmer som laster MS SQL. Inspeksjon viser at belastningen genereres av ca. 20 applikasjonsservertilkoblinger.

Fra praksis: et program som raskt oppdaterer data på et nettsted gikk inn i en løkke, og i stedet for å oppdatere en gang hver 4. time, gjorde det det kontinuerlig, uten pauser, belastet serveren tungt og blokkerte dataene.

Videre analyse av situasjonen står overfor store vanskeligheter. Vi har allerede funnet ut at belastningen kommer direkte fra 1C, men hvordan kan vi forstå hva brukerne gjør? Eller i det minste hvem de er. Det er bra hvis det er 10 1C-brukere i en organisasjon, så kan du bare gå gjennom dem og finne ut hva de gjør nå, men i vårt tilfelle er det femti av dem, og de er spredt over flere bygninger.

I eksemplet vi vurderer er situasjonen ennå ikke kompleks. Tenk deg at nedgangen ikke var i dag, men i går. I dag gjentar ikke situasjonen seg, alt er bra, men du må finne ut hvorfor operatørene ikke kunne jobbe i går (de klaget naturligvis bare før de dro hjemmefra, siden de liker å chatte hele dagen lang, på grunn av det faktum at ingenting er jobber, mer enn å jobbe). Denne saken understreker behovet for et serverloggingssystem som alltid vil holde en historikk over hovedparametrene for serverens drift og hvorfra hendelsesforløpet kan gjenopprettes.

Et loggsystem er rett og slett et uunnværlig verktøy i systemoptimalisering. Hvis du legger til muligheten til å se gjeldende status online, vil du få et overvåkingssystem for serverstatus. Hvert optimaliseringsprosjekt begynner med å samle inn serverstatusstatistikk for å identifisere flaskehalser.

Da vi begynte å jobbe innen optimalisering, prøvde vi mange serverovervåkingssystemer, dessverre klarte vi ikke å finne noe som løste dette problemet på riktig nivå, så vi måtte lage et system på egen hånd. Resultatet ble et unikt produkt, PerfExpert, som gjorde det mulig å automatisere og effektivisere prosessene med optimalisering av IT-systemer. Programmet utmerker seg ved sin tette integrasjon med 1C, fraværet av merkbar tilleggsbelastning og dets gjentatte beviste egnethet for praktisk bruk i kampsituasjoner.

For å gå tilbake til vårt eksempel, er det mest sannsynlige resultatet: Administratoren sier: "Det er programmererne som har skrevet konfigurasjonen som har skylden." Og vogna, som de sier, er der fortsatt. Som et resultat bremser 1C farten, fryser eller virker sakte.

I alle fall, for å løse 1C ytelsesproblemer, anbefaler vi at du først kjøper og bruker ytelsesovervåking PerfExpert , vil dette tillate deg å ta den riktige avgjørelsen ledelsesbeslutning og spar penger. Produktet passer både for små 1C:Enterprise IS-er - opptil 50 brukere, og for systemer - fra 1000 brukere. Siden juli 2015 ytelsesovervåking PerfExpert mottatt et 1C:kompatibelt sertifikat, bestått testing i Microsoft og hjelper til med å løse ytelsesproblemer ikke bare for 1C-systemer, men også for andre informasjonssystemer basert på MS SQL Server (Axapta, CRM Dynamics, Doc Vision og andre).

Hvis du likte informasjonen, anbefales ytterligere handlinger:

- Hvis du selv ønsker å håndtere tekniske problemer med 1C-ytelse (1C 7.7, 1C 8.1, 1C 8.2,1C 8.3) og andre informasjonssystemer, så for deg er det en unik liste over tekniske artikler i vår almanakk (Blokkering og vreklås, stor belastning på CPU og disker, databasevedlikehold og indeksjustering er bare en liten del av det tekniske materialet du finner der).
.
- Hvis du ønsker å diskutere ytelsesproblemer med vår ekspert eller bestille en PerfExpert-løsning for ytelsesovervåking, så legg igjen en forespørsel, så kontakter vi deg så snart som mulig.


Denne artikkelen vil hjelpe deg med å bli kvitt fryseprogrammer. I den vil jeg beskrive en metode som vil hjelpe avslutte et fryst program Ikke sant. Tross alt, ofte for å fullføre et program, bruker folk metoder kjent for dem - dette er feberaktige tastetrykk alt + f4 eller bare en knapp esc og i de fleste tilfeller gir dette ikke resultater. Da må du trykke på den eneste knappen som definitivt vil hjelpe - dette er knappen på systemenhet eller bærbar datamaskin for å slå av eller starte på nytt. I dette tilfellet risikerer du å miste data ikke bare fra det frosne programmet, men også fra andre som er åpne.

Det kan være flere årsaker til at programmet fryser:

  • Hvis du har 64x bitsystem(), og du kjører et program designet for 32-bits systemer, så vil programmet i beste fall ikke starte, i verste fall vil det fryse. Selv om det er en nyanse her - hender det at slike programmer fungerer, men enten feil eller fryser over tid.
  • Du har for lite RAM til å kjøre.
  • Du har for mange programmer og prosesser som kjører som allerede laster systemet.
  • Du har programmer som kjører i bakgrunnen som tar opp mye systemressurser
  • Virus
  • Tekniske problemer (termisk pasta på prosessoren har tørket ut, det er mye støv tilstoppet, "svak" maskinvare, etc.)

    Og nå har du lansert programmet og venter på at det skal starte. Og hun stoppet ved lasteprosessen og var "stille". Det er bra hvis bakgrunnsmusikk spilles (i hovedsak for spill), det kan gi deg et hint i form av looping. Du kan selvfølgelig vente noen minutter (ikke mer enn 5) i påvente av et "mirakel" og at programmet vil henge, men hvis du ikke vil vente og du vet sikkert at programmet har frosset, da må du begynne lukking av frosne programmer.

    For å avslutte et program som ikke svarer(dette er hva frysing også kalles) du må ringe oppgavebehandlingen. Du kan selvfølgelig bruke ctrl+skifte+esc, men jeg anbefaler å bruke en mer kjent og effektiv hurtigtast ctrl+alt+del.

    I Windows 7, når du trykker på disse tastene, åpnes et vindu med fem alternativer der du må velge det siste.


    I fanen applikasjoner Vi ser etter et frossent program (vanligvis er statusen ikke svarer), høyreklikk på det og velg fra menyen Gå til prosess:


    En fane åpnes Prosesser med en dedikert hengt prosess. Her klikker vi bare videre Avslutt prosessen


    og godta systemadvarselen

    Merk:
    Du kan selvfølgelig velge ikke i Oppgavebehandling-menyen Gå til prosess, A Avbryt oppgaven og dette vil være en mer "skånsom" metode, men noen ganger hjelper det ikke. Og jeg er på en eller annen måte vant til å løse slike problemer effektivt.

    Slik kan du "fjerne" et frossent program uten å starte datamaskinen på nytt og holde andre kjørende programmer intakte.

    Det hender det Explorer svarer ikke. Med dette mener jeg at du for eksempel åpnet en mappe på datamaskinen din eller til og med bare Min datamaskin og systemet frøs (det begynner å tenke lenge). Dette har skjedd meg selv.
    I dette tilfellet kan Task Manager og metoden beskrevet ovenfor også hjelpe.

    Men her viktig å huske En detalj: Utforsker-prosessen kalles explorer.exe, og når den avsluttes, vil alle mappene på datamaskinen din bli lukket. Men det er halve bryet. Etter at du "drepte" utforskeren, vil kontrollpanelet med Start-menyen også forsvinne. Derfor Ikke lukk Task Manager med en gang! For å returnere det som mangler (bortsett fra åpne mapper), klikk Fil -> Kjør


    og skriv inn explorer.exe i linjen


    Selvfølgelig, klikk OK og alt vil gå tilbake til sin plass.

    Som denne enkel måte for å fikse problemet Hva gjør jeg hvis programmet ikke svarer eller fryser.

  • 1) se på mengden minne som er tildelt av rphost på 1C-serveren. Hvis du har en x32-versjon av serveren, kan prosessen bruke maksimalt 1,75 GB RAM
    Hvis det ikke er nok minne, kan ikke serveren godta nye tilkoblinger eller henger når den gjeldende økten krever ekstra minne
    www.viva64.com/ru/k/0036
    2) Se på "Working server settings"-innstillingene. innstillingene kan være feil. Jeg hadde dette problemet og serveren fortsatte å fryse. Mine innstillinger er vedlagt. Serveren er tildelt 11 GB.
    3) Det kan være problemer med å sette opp Postgressql.

    Oppgi egenskapene til serveren din, databasestørrelser, Postgressql-konfigurasjoner. Det er vanskelig å si uten informasjon.

    Min PostgreSQL-konfigurasjon: https://drive.google.com/file/d/0B2qGCc-vzEVDMERVW...
    Denne konfigurasjonen er valgt for den tilgjengelige mengden RAM.
    PostgreSQL installert på Linux, 3 GB RAM, 3 CPU-kjerner.
    Server 1C8: 11 GB RAM, 5 CPU-kjerner
    4 databaser, omtrent 1 GB hver (lastet opp til dt)

    Gi alle egenskapene til serveren din: 1C8 server og database, fysisk eller virtuell, operativsystem, mengde RAM på hver server, hva slags CPU, hvor mye RAM tar rphost-prosesser opp, hvor mange er det? Bruker du et RAID-array?

    Tidligere brukte jeg PostgreSQL selv, men under prosessen møtte jeg noen problemer når jeg kjørte en database på PostgreSQL og byttet nylig til MS SQL.

    Serveren din er ikke dårlig for disse databasene. For å bruke PostgreSQL må du ha en veldig god forståelse av konfigurasjonen. Når databasene er små, tilgis mange konfigurasjonsfeil. Da vi nettopp begynte å implementere 1C + PostgreSQL, hadde vi også svært hyppige problemer med driften av databasen (det var hyppige fryser, det fungerte sakte). PostgreSQL er bedre brukt på Linux, ikke på Windows. Selv er jeg ikke databasespesialist for å sette opp databaseserveren, vi hyret inn en spesialist fra 1Sbit og han satte den opp for oss og det var ingen problemer i driften etter det.

    Råd:
    Du har store databaser, ikke spar, ansett en databasespesialist som kan sette opp for deg. Én person kan ikke være ekspert på alt.

    1) hvor lenge siden har du sjekket selve databasen og indeksert den på nytt? VAKUUM og REINDEKS
    2) hvor lenge siden testet og korrigerte du databasen ved hjelp av 1C-verktøy?
    3) er databaseloggfilen plassert på en separat harddisk?
    4) er harddisken tungt lastet?

    Vurder å bytte til MS Sql ofte krever det "nesten" ingen konfigurasjon og er enklere å bruke. I motsetning til PostgreSQL er MS Sql klar til å fungere ut av esken, men PostgreSQL må konfigureres.

    Hvis du har spørsmål, skriv, kanskje jeg kan hjelpe med noe på Skype: tisartisar

    Ansett en databaseoppsettspesialist

    Hvorfor vi byttet til MS SQL:
    Vi bruker UT-konfigurasjonen og ved månedsavslutning oppsto det noen ganger feil som ikke kunne løses. Hvis du overførte databasen til filmodus og begynte å lukke måneden, lukket alt normalt, den samme databasen ble lastet inn i PostgreSQL-server Det oppstod feil ved beregning av kostnaden. På den tiden lå vi et halvt år etter i siste måneder på grunn av flytefeil. Vi opprettet en testdatabase på MS SQL og måneden som ikke kunne lukkes på PostgreSQL på MS SQL ble stengt. Prisavrunding i prislisten fungerer heller ikke riktig på PostgreSQL. Faktisk støttes det å kjøre 1C på PostgreSQL, men det anbefales fortsatt å bruke MS SQL.
    På grunn av dette ble det besluttet å bytte til MS SQL fordi... driftsstabilitet 1C er dyrere.

    Jeg er glad jeg kunne hjelpe, vennligst kontakt meg hvis du har spørsmål eller problemer.

    1) hvor mye minne er allokert til MS SQL server? dette er konfigurert i selve MS SQL-serveren.
    2) Test databasen med 1C regelmessig
    3) artikkel om hvordan du setter opp backup og vedlikehold. Dette er viktig og må gjøres regelmessig. Jeg gjør det hver dag. Sjekk ut alle 3 delene av veiledningen.