Chyba pri používaní automatického režimu správcu zámkov. Riadenie zámku dát transakcie, mechanizmus

Hlavné dôvody prechodu na spravované zámky:

  • Hlavným dôvodom je odporúčanie 1C:Expert na základe svedectva alebo 1C:TsUP
  • Problémy so súbežnými používateľmi ()
  • Pomocou Oracle, PostgreSQL a .

Cena práce:

Podstata spravovaných zámkov

Pri práci v režime riadenia automatického uzamykania nastavuje 1C:Enterprise vysoký stupeň izolácie údajov v transakcii na úrovni DBMS. To vám umožňuje úplne eliminovať možnosť získania neúplných alebo nesprávnych údajov bez zvláštneho úsilia zo strany vývojárov aplikácií.

Toto je pohodlný a správny prístup pre malý počet aktívnych používateľov. Cenou za jednoduchosť vývoja je určitá miera nadbytočného uzamykania na úrovni DBMS. Tieto zámky sú spojené tak so zvláštnosťami implementácie uzamykacích mechanizmov v samotnom DBMS, ako aj so skutočnosťou, že DBMS nemôže (a nezohľadňuje) brať do úvahy fyzický význam a štruktúru objektov metadát 1C:Enterprise.

Pri práci s vysokým sporom o zdroje (veľký počet používateľov) sa v určitom okamihu prejaví vplyv redundantných zámkov z hľadiska výkonu v paralelnom režime.

Po prenose konfigurácie do spravovaného režimu sa v platforme aktivuje dodatočná funkcia „správcu zámkov“ a kontrola integrity údajov sa teraz nevykonáva na strane DBMS, ale na strane servera 1C. To zvyšuje zaťaženie hardvéru servera 1C (sú potrebné rýchlejšie procesory a viac pamäte) a v skutočnosti zavádza dokonca mierne spomalenie (niekoľko percent), ale výrazne zlepšuje situáciu so zámkami (menej zámkov v dôsledku zámkov na objekte a nie na kombinácii tabuliek, menšej blokovacej oblasti a v niektorých prípadoch je životnosť zámkov na čítanie kratšia, t.j. nie do konca transakcie). To zlepšuje celkovú súbežnosť.


Nové konfigurácie od 1C boli implementované okamžite v riadenom režime.

  • Otázka: Je možné urobiť najprv audit a až potom prejsť do FM?

Odpoveď: Áno, audit bude slúžiť ako dodatočné zdôvodnenie uskutočniteľnosti prevodu na riadené plavebné komory a tiež na posúdenie príspevku automatických plavebných komôr k celkovému spomaleniu a či je potrebné ďalšie úsilie okrem prevodu.

  • Otázka: Aký druh prístupu by sa mal poskytnúť na prenos do UB - RDP, TeamViewer? Alebo vám môžem poslať konfiguračný súbor?

Odpoveď: Snažíme sa neobmedzovať sa na jednu konkrétnu technológiu vzdialeného prístupu, bude to stačiť akúkoľvek technológiu vzdialeného prístupu. Ak je vám to jedno, potom je praktickejšie RDP.
Môžeme vykonať optimalizáciu na základe odoslaného konfiguračného súboru, ale potom nebudeme môcť odladiť niektoré reálne údaje a budete musieť testovať pozornejšie. Ak vykonáme optimalizáciu na kópii databázy, môžeme ju dôkladnejšie otestovať predtým, ako vám poskytneme výsledok práce.

  • Otázka: Máme 10 programátorov na plný úväzok, ktorí každý deň na konferencii niečo menia. Používa sa zdieľaný ukladací priestor konfigurácie." Ako bude organizovaná interakcia počas prechodu do UX? Alebo treba všetkých programátorov poslať na dovolenku?

Odpoveď: Naše zmeny sa spravidla vykonajú v priebehu niekoľkých dní. Zvyšný čas sa strávi testovaním vykonaných zmien, a to aj z hľadiska požadovanej logiky určenej podnikaním a nie technickými úvahami. my môžeme vykonať zmeny v samostatnom konfiguračnom súbore cf a potom ho váš programátor odovzdá do úložiska. Nikto nebude musieť ísť na dovolenku. V ďalších možnostiach interakcie sa stačí dohodnúť, ktoré objekty plánujú vaši vývojári zachytiť, aby sme mohli zostaviť pracovný plán, ktorý bude vyhovovať obom stranám. Vaši vývojári spravidla nepotrebujú zachytiť celú konfiguráciu, ani nám dať „volant“ na daný deň.

Systém 1C:Enterprise umožňuje využívať dva režimy práce s databázou: režim automatických zámkov v transakcii a režim riadených zámkov v transakcii.

Základný rozdiel medzi týmito režimami je nasledujúci. Režim automatického uzamykania nevyžaduje, aby vývojár vykonal akúkoľvek akciu na správu zámkov v transakcii. Tieto pravidlá zabezpečuje systémová platforma 1C:Enterprise pomocou určitých úrovní izolácie transakcií v konkrétnom DBMS. Tento režim prevádzky je pre vývojára najjednoduchší, avšak v niektorých prípadoch (napríklad pri intenzívnej súčasnej práci veľkého počtu používateľov) úroveň izolácie transakcií používaná v DBMS nemôže poskytnúť dostatočný paralelizmus, čo sa prejavuje napr. vo forme veľkého počtu uzamykacích konfliktov pri práci používateľov.

Pri prevádzke v režime riadeného uzamykania využíva systém 1C:Enterprise oveľa nižšiu úroveň izolácie transakcií v DBMS, čo môže výrazne zvýšiť súbežnosť používateľov aplikačného riešenia. Na rozdiel od režimu automatického uzamykania však táto úroveň izolácie transakcií už sama o sebe nedokáže zabezpečiť súlad so všetkými pravidlami pre prácu s dátami v transakcii. Preto pri práci v riadenom režime je vývojár povinný samostatne spravovať zámky nastavené v transakcii.

Stručne povedané, rozdiely pri práci v režime automatického blokovania a v režime riadeného blokovania sú uvedené v nasledujúcej tabuľke:

Nastavenie režimu blokovania v konfigurácii

Konfigurácia má vlastnosť Data Lock Control Mode. Každý objekt konfiguračnej aplikácie má tiež vlastnosť Data Lock Control Mode.
Režim riadenia dátového zámku pre celú konfiguráciu možno nastaviť na Automatický, Spravovaný (predvolené nastavenie pre novú konfiguráciu) alebo Automatický a riadený. Hodnoty Automatic a Managed znamenajú, že príslušný režim blokovania sa použije pre všetky konfiguračné objekty, bez ohľadu na hodnoty nastavené pre každý z objektov. Hodnota Automatic and Managed znamená, že pre konkrétny konfiguračný objekt sa použije režim špecifikovaný v jeho vlastnosti Data Locking Control Mode: Automatic (Automaticky) alebo Managed (Spravovaný).
Je potrebné poznamenať, že režim riadenia uzamknutia údajov špecifikovaný pre objekt metaúdajov je nastavený pre tie transakcie, ktoré sú iniciované systémom 1C:Enterprise pri práci s údajmi tohto objektu (napríklad pri úprave údajov o objekte).
Ak je napríklad operácia zápisu objektu vykonaná v transakcii iniciovanej vývojárom (metóda StartTransaction()), potom režim riadenia uzamknutia dát bude určený hodnotou parametra Locking Mode
metóda StartTransaction(), a nie hodnota vlastnosti objektu metadát Data Lock Control Mode.
V predvolenom nastavení je parameter Režim blokovania nastavený na Režim riadenia blokovania údajov, takže napr
Ak chcete použiť režim riadeného uzamykania v explicitnej transakcii, musíte zadať hodnotu tohto parametra
Riadený režim uzamknutia údajov.

Práca so spravovanými zámkami pomocou vstavaného jazyka

Na správu zámkov v transakcii sa používa vstavaný jazykový objekt DataLock. Inštancia tohto objektu môže byť vytvorená pomocou konštruktora a umožňuje vám opísať požadované zámkové priestory a režimy zámkov. Ak chcete nastaviť všetky vytvorené zámky, použite metódu Lock() objektu DataLock. Ak je táto metóda vykonaná v transakcii (explicitnej alebo implicitnej), získajú sa zámky a po ukončení transakcie sa automaticky uvoľnia. Ak sa metóda Lock() vykoná mimo transakcie, nezískajú sa žiadne zámky.

Podmienky sú nastavené tak, aby sa hodnota poľa rovnala zadanej hodnote alebo aby bola hodnota poľa v rámci určeného rozsahu.
Podmienky je možné nastaviť dvoma spôsobmi:

  • explicitným zadaním názvu poľa a hodnoty (metóda SetValue() objektu DataLockElement);
  • zadaním zdroja údajov obsahujúceho požadované hodnoty (vlastnosť DataSource objektu DataLockElement).

Pre každý blokovací prvok je možné nastaviť jeden z dvoch blokovacích režimov:

  • zdieľané,
  • výnimočný.

Tabuľka kompatibility spravovaného uzamykania vyzerá takto:

Režim zdieľaného uzamykania znamená, že uzamknuté údaje nie je možné zmeniť ďalšou transakciou až do konca aktuálnej transakcie.
Exkluzívne uzamykanie znamená, že zamknuté údaje nie je možné zmeniť ďalšou transakciou až do konca aktuálnej transakcie, ani ich nemôže prečítať iná transakcia, ktorá má na dátach zdieľaný zámok.

Vlastnosti prevádzky v režime „Automatický a riadený“.

Pri práci v režime automatického a riadeného blokovania je potrebné vziať do úvahy dve funkcie:

Bez ohľadu na režim špecifikovaný pre danú transakciu systém nainštaluje príslušné riadené
blokovanie.
Režim ovládania zámku je určený transakciou najvyššej úrovne. Inými slovami, ak bola v čase spustenia transakcie spustená iná transakcia, potom môže byť začatá transakcia vykonaná len v režime, ktorý je nastavený pre už prebiehajúcu transakciu.

Pozrime sa na uvedené funkcie podrobnejšie.

Prvou vlastnosťou je, že aj keď sa pre transakciu použije režim automatického riadenia zámku, systém dodatočne nainštaluje zodpovedajúce spravované zámky pri zapisovaní údajov v tejto transakcii. Z toho vyplýva, že transakcie vykonávané v režime riadeného uzamykania môžu byť v konflikte s transakciami vykonávanými v režime riadenia automatického uzamykania.

Druhou vlastnosťou je, že režim správy zámku špecifikovaný pre objekt metadát v konfigurácii alebo špecifikovaný explicitne pri spustení transakcie (ako parameter metódy StartTransaction()) je len „požadovaný“ režim. Skutočný režim správy zámku, v ktorom bude transakcia vykonaná, závisí od toho, či ide o prvé volanie na spustenie transakcie, alebo či sa v tomto momente už začala iná transakcia v tejto relácii systému 1C:Enterprise.

Napríklad, ak potrebujete spravovať zámky pri zápise sád registratúrnych záznamov pri zaúčtovaní dokladu, potom musí byť režim riadeného zamykania nastavený pre samotný register aj pre doklad, keďže zápis sád registratúrnych záznamov sa vykoná v transakcii. otvoril pri písaní dokumentu.

Mechanizmus správy zámkov údajov v transakcii vám umožňuje uzamknúť vymeniteľné údaje nie pomocou použitého systému správy databázy, ale prostredníctvom platformy. Takáto správa uzamknutia údajov sa nevykonáva z hľadiska údajov DBMS, ale z hľadiska predmetnej oblasti. Vďaka tomu sa zámky aplikujú presnejšie a zvyšuje sa súbeh používateľov.

Konfigurácia 1C:Enterprise 8 môže pracovať v jednom z troch režimov na správu zámkov v transakcii:

  • auto;
  • riadený - štandardný režim pre nové konfigurácie;
  • automatické a riadené.

IN automatický režim Správa zámkov údajov využíva opakovateľné čítanie a serializovateľné úrovne izolácie transakcií, ktoré poskytuje systém správy databázy. Tieto úrovne izolácie transakcií zaisťujú konzistentné a konzistentné čítanie údajov bez toho, aby od vývojára vyžadovali ďalšie úsilie v oblasti správy zámkov.

Riadený režim umožňuje zvýšiť paralelnosť užívateľskej práce v prevádzkovom režime klient-server použitím nižšej úrovne izolácie databázových transakcií (Read Committed). Pri zápise údajov do transakcie vstavané jazykové objekty automaticky uzamknú požadované údaje. Vývojár potrebuje spravovať zámky údajov v prípadoch, keď obchodná logika vyžaduje konzistentné a konzistentné čítanie údajov v transakcii.

Automaticky a kontrolovane režim vám umožňuje použiť možnosť spravovať zámky v transakcii len pre niektoré konfiguračné objekty. Tento režim je možné použiť na optimalizáciu súbežnosti používateľov s jednotlivými objektmi aplikácie (napríklad niekoľko najintenzívnejšie používaných dokumentov) alebo na postupný prechod veľkých konfigurácií do režimu správy zámku transakcií.

Stručne povedané, rozdiely pri práci v režime automatického blokovania a v režime riadeného blokovania sú uvedené v nasledujúcej tabuľke:

Potreba spravovať zámky dát v transakcii najčastejšie vzniká v procese účtovania dokladov, keď potrebujete čítať a následne zapisovať zmenené údaje do rovnakých tabuliek. Napríklad, ak sledujete zostatky pri účtovaní dokladu.

Najmä na tento účel majú vlastnosť súbory evidencie akumulačných registrov a účtovných registrov BlockForChange.

Ak potrebujete kontrolovať zostatky a následne evidovať pohyby v tom istom registri, tak táto vlastnosť musí byť nastavená pre množinu záznamov tohto registra v majetku Pohyby.

Účinok tejto vlastnosti je rovnaký, ako keby vývojár nezávisle nainštaloval (predpísané v kóde) potrebné spravované zámky pre 1C:Enterprise 8. Platforma nainštaluje potrebný spravovaný zámok automaticky pri zápise tejto sady záznamov. V dôsledku toho ostatné spravované transakcie používajúce rovnaký zámok nebudú môcť začať čítať tento register, kým sa aktuálna transakcia nedokončí.

Nižšie je uvedený príklad „manuálneho“ ovládania zámkov údajov pri čítaní údajov akumulačného registra Účtovanie položiek pri spracovaní dokumentov Faktúra. V tomto príklade sa spravované zámky vytvárajú a nastavujú úplne pomocou vstavaného jazyka.

Mechanizmus transakčné zámky používa sa na konkurenčný prístup používateľov do DBMS.
Transakcia je druh nepretržitej operácie, počas ktorej sa mení stav databázy. Toto je minimálne množstvo zmeny: nemôžete uskutočniť polovičnú transakciu; ak sa transakcia nedokončí, databáza sa vráti do pôvodného stavu.
Keďže transakcia zachytáva pole údajov, pri prístupe k tomuto poľu vzniká nuansa: napríklad jedna transakcia zmení údaje a iná sa ich pokúsi prečítať. Výsledok čítania môže byť nesprávny, pretože nebude zahŕňať najnovšie zmeny. Preto izolácia transakcií funguje na úrovni DBMS. Možné sú nasledujúce úrovne izolácie:

  • Čítajte nezáväzne- zatiaľ čo jedna transakcia zmení pole, iná ho nemôže zmeniť, ale môže ho prečítať. Najnižšia úroveň izolácie.
  • Čítajte odhodlane- zatiaľ čo jedna transakcia zmení pole, iná ho nemôže zmeniť ani prečítať
  • Opakovateľné čítanie- zatiaľ čo jedna transakcia pole číta, iná ho nemôže zmeniť, ale môže ho čítať
  • Serializovateľné- zatiaľ čo jedna transakcia číta pole, iná ho nemôže zmeniť ani prečítať. Všetky operácie sú sekvenčné. Maximálna úroveň izolácie.

Ak je konfigurácia 1C:Enterprise nastavená na režim automatického uzamknutia, potom úroveň izolácie transakcie vyberie DBMS. V prípade MS SQL to budú úrovne Opakovateľné čítanie alebo Serializovateľné, to znamená, že izolácia údajov sa blíži k maximu. To rieši problémy so správnosťou údajov, ale môže viesť k zablokovaniu na úrovni DBMS pri intenzívnej práci používateľa. Preto má 1C:Enterprise vlastnú funkcionalitu pre prácu so zámkami, ktorá sa aktivuje povolením režimu spravovaných zámkov. V tomto prípade bude úroveň izolácie transakcií pre MS SQL potvrdená prečítaním. Samotná platforma bude izolovať údaje bez spoliehania sa na DBMS.

Režim riadeného uzamykania je povolený vo vlastnostiach konfigurácie:

Režim uzamknutia je možné nastaviť aj pre konkrétne konfiguračné objekty:

Ak je konfigurácia ako celok nastavená na režim automatického uzamykania, potom všetky transakcie pre všetky registre budú fungovať v automatickom režime bez ohľadu na režim, ktorý je nastavený pre konfiguračný objekt. Ak je Spravované, potom podobne budú všetky transakcie v Spravované. Ak je konfiguračný režim nastavený na Automatický a kontrolovaný, potom režim pre každý objekt bude určený jeho nastaveniami.

Pre automatický a riadený režim je jeden bod. Jedna transakcia pre používateľa môže predstavovať niekoľko transakcií z pohľadu platformy. Napríklad interaktívne zaúčtovanie dokumentu do registra robí dva transakcie - záznam samotného dokumentu a v rámci tejto transakcie záznam sady riadkov podľa registra. V závislosti od režimu správy zámku pre samotný dokument a registra, ktorým sa pohybuje, sú možné štyri situácie:

  1. Režim dokumentu Automatický, režim registrácie Automatický ->
  2. Režim dokumentu Riadený, režim registra Spravovaný -> záznam podľa registra v riadenom režime
  3. Režim dokumentu Automatický, režim registra Riadené -> záznam registrom v automatickom režime
  4. Režim dokumentu Riadený, režim registrácie Automaticky -> výnimka (chyba)

Otázka 06.59 skúšky 1C: Platform Professional. Pri zaúčtovaní dokumentu cez akýkoľvek register, ak má dokument automatický režim správy uzamknutia transakcií a register má spravovaný režim (vo vlastnostiach konfigurácie sa používa možnosť „Automaticky a spravované“), takéto zaúčtovanie povedie k:

Správna odpoveď je druhá, určíme ju podľa prvej transakcie, ak je automatická, tak je automatické všetko.

Otázka 06.60 zo skúšky 1C: Platform Professional. Ak má dokument pri zaúčtovaní dokumentu cez akýkoľvek register spravovaný režim na správu zámkov transakcií a register má automatický (vo vlastnostiach konfigurácie sa používa možnosť „Automaticky a spravované“), takéto zaúčtovanie povedie k:

  1. k chybovej situácii
  2. celá transakcia bude dokončená automaticky
  3. celá transakcia prebehne kontrolovaným spôsobom

Správna odpoveď je prvá, určíme podľa prvej transakcie, ak je kontrolovaná, tak je to chyba.

Otázka 06.61 skúšky 1C: Platform Professional. Ak má dokument pri zaúčtovaní dokumentu prostredníctvom akéhokoľvek registra automatický režim na správu zámkov transakcií a register má spravovaný režim (vo vlastnostiach konfigurácie sa používa možnosť „Spravovaný“), takéto zaúčtovanie povedie k:

  1. k chybovej situácii
  2. celá transakcia bude dokončená automaticky
  3. celá transakcia prebehne kontrolovaným spôsobom


 

Môže byť užitočné prečítať si: