Gestionarea blocării tranzacționale. Setarea configurației la blocările gestionate Modul de blocare automată nu este permis într-o tranzacție

Principalele motive pentru trecerea la blocările gestionate sunt:

  • Motivul principal este recomandarea 1C: Expert bazat pe indicații sau 1C: MCC
  • Probleme cu munca simultană a utilizatorului ()
  • Folosind Oracle, PostgreSQL și.

Costul muncii:

Esența încuietorilor gestionate

Când lucrați în modul automat de blocare a controlului 1C: Enterprise setează un grad ridicat de izolare a datelor într-o tranzacție la nivelul SGBD. Acest lucru vă permite să excludeți complet posibilitatea de a primi date incoerente sau incorecte, fără eforturi speciale din partea dezvoltatorilor de aplicații.

Este confortabil și abordarea corectă la cantitate mică utilizatori activi. Prețul ușurinței de dezvoltare este o anumită cantitate de blocări redundante la nivelul SGBD. Aceste blocări sunt conectate atât cu particularitățile implementării mecanismelor de blocare în SGBD în sine, cât și cu faptul că SGBD nu poate lua în considerare (și nu ține cont) sensul fizic și structura obiectelor de metadate 1C: Enterprise.

Când se lucrează cu o mare dispută pentru resurse (un număr mare de utilizatori), la un moment dat, efectul redundanței blocărilor devine vizibil în ceea ce privește performanța în modul paralel.

După ce configurația este trecută în modul controlat, platforma se activează funcționalitate suplimentară„Managerul de blocare” și controlul asupra integrității datelor se efectuează acum nu pe partea DBMS, ci pe partea serverului 1C. Acest lucru crește încărcarea pe hardware-ul serverului 1C (sunt necesare procesoare mai rapide și mai multă memorie) și, de fapt, introduce chiar o ușoară încetinire (câteva procente), cu toate acestea, îmbunătățește situația cu blocări mult mai semnificativ (mai puține blocări datorită blocărilor un obiect și nu pe o combinație de tabele, mai puțină zonă de blocare și, în unele cazuri, durata de viață a blocărilor de citire este mai scurtă, adică nu până la sfârșitul tranzacției). Acest lucru îmbunătățește paralelismul general.


Noile configurații ale companiei 1C sunt implementate imediat într-un mod controlat.

  • Întrebare: Este posibil să faceți mai întâi un audit și apoi să transferați către UB?

Răspuns: Este posibil, auditul va servi ca o justificare suplimentară pentru oportunitatea transferului la blocările gestionate, precum și pentru a evalua contribuția blocărilor automate la încetinirea generală și dacă sunt necesare eforturi suplimentare în afară de transfer.

  • Întrebare: Pentru a transfera la UB, ce fel de acces trebuie să oferiți - RDP, TeamViewer? Sau vă pot trimite un fișier de configurare?

Răspuns: Încercăm să nu limităm o tehnologie specifică acces de la distanță, se potrivește orice tehnologie de acces la distanță... Dacă nu contează pentru tine, atunci RDP este mai practic.
Putem efectua optimizarea fișierului de configurare trimis, dar atunci nu vom putea depana unele date reale și va trebui să testați mai atent. Dacă realizăm optimizare pe o copie a bazei de date, atunci o putem testa cu atenție înainte de a vă trimite rezultatul muncii.

  • Întrebare: Avem 10 programatori cu normă întreagă care schimbă ceva în configurație în fiecare zi. Se utilizează stocarea configurației partajate. " Cum va fi organizată interacțiunea la transferul către UB? Sau ar trebui ca toți programatorii să plece în vacanță?

Răspuns: De regulă, modificările noastre se fac în câteva zile. Restul timpului este petrecut pentru testarea modificărilor făcute, inclusiv din punctul de vedere al logicii necesare determinate de companie și nu de considerații tehnice. noi putem face modificări la fișier separat configurare cf, apoi programatorul dvs. îl va adăuga în depozit. Nu trebuie să trimiteți pe nimeni în vacanță... În alte opțiuni de interacțiune, trebuie doar să fiți de acord asupra obiectelor pe care dezvoltatorii dvs. intenționează să le profite, astfel încât să construim un plan de lucru convenabil pentru ambele părți. De regulă, dezvoltatorii dvs. nu trebuie să capteze întreaga configurație sau să ne ofere „roata” pentru o zi.

Mecanism încuietori tranzacționale utilizat pentru accesul simultan al utilizatorului la SGBD.
O tranzacție este un fel de operațiune indisolubilă în timpul căreia se schimbă starea bazei. Aceasta este cuantumul minim al modificărilor: nu puteți efectua o jumătate de tranzacție; dacă tranzacția nu este finalizată, baza de date va fi readusă la starea inițială.
Deoarece o tranzacție captează o serie de date, apare o nuanță în ceea ce privește accesul la această matrice: de exemplu, o tranzacție schimbă datele, în timp ce alta încearcă să le citească. Rezultatul citirii poate fi incorect, deoarece nu se va porni schimbări recente... Prin urmare, izolarea tranzacțiilor funcționează la nivelul SGBD. Sunt posibile următoarele nivele de izolare:

  • Citiți fără angajament- în timp ce o tranzacție schimbă matricea, alta nu o poate modifica, dar poate citi. Cel mai scăzut nivel de izolare.
  • Citiți angajat- în timp ce o tranzacție schimbă matricea, cealaltă nu o poate modifica sau citi
  • Citire repetabilă- în timp ce o tranzacție citește matricea, alta nu o poate modifica, dar poate citi
  • Serialaizabil- în timp ce o tranzacție citește matricea, cealaltă nu o poate modifica sau citi. Toate operațiile sunt secvențiale. Nivel maxim de izolare.

Dacă este setată configurația 1C: Enterprise modul de blocare automată, atunci nivelul de izolare a tranzacției este selectat de SGBD. În cazul MS SQL, acesta va fi citire repetabilă sau niveluri serializabile, adică izolarea datelor este aproape de maxim. Acest lucru rezolvă problemele legate de corectitudinea datelor, dar poate duce la apariția blocărilor la nivelul SGBD în timpul unei lucrări intensive a utilizatorului. Prin urmare, 1C: Enterprise are propria sa funcționalitate pentru lucrul cu blocări, care este activată prin activarea modului blocări gestionate. În acest caz, nivelul de izolare a tranzacțiilor MS SQL va fi comis la citire. Platforma în sine va izola datele fără a se baza pe SGBD.

Activarea modului de blocare gestionată are loc în proprietățile de configurare:

De asemenea, modul de blocare poate fi setat pentru obiecte de configurare specifice:

Dacă configurația în ansamblu este setată Mod auto se blochează, apoi toate tranzacțiile din toate registrele vor funcționa în modul automat, indiferent de modul setat pentru obiectul de configurare. Dacă este gestionat - atunci în mod similar, toate tranzacțiile vor fi gestionate. Dacă configurația este setată la Automat și controlat, atunci modul pentru fiecare obiect va fi determinat de setările sale.

Există un punct pentru modurile automate și controlate. O singură tranzacție pentru un utilizator poate reprezenta mai multe tranzacții din punctul de vedere al platformei. De exemplu, navigarea interactivă a unui document în registru face Două tranzacțiile sunt o înregistrare a documentului în sine, iar în cadrul acestei tranzacții este o înregistrare a unui set de rânduri după registru. În funcție de modul de control al blocărilor pentru documentul însuși și de registrul mutat de acesta, sunt posibile patru situații:

  1. Mod document Automat, mod înregistrare Automat ->
  2. Mod document Gestionat, mod înregistrare Gestionat -> scriere prin înregistrare în modul controlat
  3. Mod document Automat, mod înregistrare Ghidat -> scriere prin înregistrare în modul automat
  4. Mod document Gestionat, mod înregistrare Automat -> excepție (eroare)

Întrebarea 06.59 a examenului 1C: Profesionist pe platformă. Atunci când înregistrați un document într-un registru, dacă documentul are un mod automat de gestionare a blocării tranzacționale și registrul are unul controlat (în proprietățile de configurare, este utilizată opțiunea „Automat și gestionat”), atunci o astfel de înregistrare va avea ca rezultat :

Răspunsul corect este al doilea, îl determinăm prin prima tranzacție, dacă este automată, atunci totul este automat.

Întrebarea 06.60 a examenului 1C: Profesionist pe platformă. Când înregistrați un document într-un registru, dacă documentul are un mod de gestionare a blocării tranzacționale gestionate, iar registrul are automat (opțiunea „Automat și gestionat” este utilizată în proprietățile de configurare), atunci o astfel de înregistrare va avea ca rezultat:

  1. la o situație de eroare
  2. întreaga tranzacție va fi efectuată automat
  3. întreaga tranzacție va fi executată într-un mod controlat

Primul răspuns corect este determinat de prima tranzacție, dacă este controlată, apoi de o eroare.

Întrebarea 06.61 a examenului 1C: Profesionist pe platformă. La postarea unui document în orice registru, dacă documentul are un mod automat de gestionare a blocării tranzacționale și registrul are unul controlat (opțiunea „Controlat” este utilizată în proprietățile de configurare), atunci o astfel de conduită va avea ca rezultat:

  1. la apariția unei situații de eroare
  2. întreaga tranzacție va fi efectuată automat
  3. întreaga tranzacție va fi executată într-un mod controlat

Mecanismul de gestionare a blocării datelorîntr-o tranzacție, permite blocarea datelor mutabile nu prin intermediul sistemului de gestionare a bazelor de date utilizate, ci prin intermediul platformei. O astfel de gestionare a blocării datelor se efectuează nu în ceea ce privește datele SGBD, ci în ceea ce privește domeniul. Acest lucru permite impunerea unor blocări mai precise și creșterea concurenței utilizatorilor.

Configurare 1C: Enterprise 8 poate funcționa într-unul din cele trei moduri de gestionare a blocărilor într-o tranzacție:

  • auto;
  • gestionat - modul standard pentru noi configurații;
  • automată și controlată.

ÎN mod automat gestionarea blocării datelor folosește nivelurile de izolare a tranzacțiilor citite și serializabile repetabile furnizate de sistemul de gestionare a bazei de date. Aceste niveluri de izolare a tranzacțiilor oferă o lectură consecventă și consecventă a datelor și nu este necesară nicio acțiune suplimentară din partea dezvoltatorului pentru a gestiona blocările.

Mod controlat permite creșterea paralelismului utilizatorilor în modul de lucru client-server datorită utilizării unui nivel mai mic de izolare a tranzacțiilor bazei de date (Read Committed). Când scrieți date într-o tranzacție, obiectele de limbă încorporate blochează automat datele necesare. Un dezvoltator trebuie să gestioneze blocările de date atunci când logica de afaceri necesită o lectură consecventă și consecventă a datelor într-o tranzacție.

Automat și controlat modul permite utilizarea capacității de a gestiona blocările într-o tranzacție numai pentru unele obiecte de configurare. Acest mod poate fi utilizat pentru a optimiza concurența utilizatorului cu obiecte individuale ale aplicației (de exemplu, cu mai multe dintre cele mai utilizate documente) sau pentru a transfera treptat configurații mari la gestionarea blocării tranzacționale.

Într-o formă rezumativă, diferențele dintre interblocări automate și interblocări controlate sunt prezentate în următorul tabel:

Cel mai adesea, necesitatea de a gestiona blocările de date într-o tranzacție apare în procesul de postare a documentelor, atunci când trebuie să citiți și apoi să scrieți datele modificate în aceleași tabele. De exemplu, dacă soldul este verificat în timpul înregistrării documentelor.

Mai ales pentru aceasta, seturile de înregistrări ale registrelor de acumulare și ale registrelor contabile au o proprietate BlockForChange.

Dacă trebuie să controlați soldurile și apoi să înregistrați mișcările în același registru, atunci această proprietate trebuie setată pentru setul de înregistrări ale acestui registru în proprietate Circulaţie.

Efectul acestei proprietăți este același ca și când dezvoltatorul a instalat independent (a scris în cod) blocările necesare 1C: Enterprise 8. Platforma va seta automat blocarea gestionată necesară atunci când scrie acest set de înregistrări. Ca urmare, alte tranzacții gestionate care utilizează o blocare similară nu vor putea începe citirea acestui registru până la încheierea tranzacției curente.

Mai jos este un exemplu de control „manual” al blocărilor de date la citirea datelor din registrul de acumulare. Nomenclatura contabilăîn procesarea postării documentelor Factură de vânzare... În acest exemplu, blocările gestionate sunt create și setate în întregime prin intermediul limbajului încorporat.

Sistemul 1C: Enterprise vă permite să utilizați două moduri de lucru cu baza de date: modul de blocare automată într-o tranzacție și modul de blocare controlată într-o tranzacție.

Diferența fundamentală dintre aceste moduri este următoarea. Modul de blocare automată nu necesită ca dezvoltatorul să întreprindă nicio acțiune pentru a gestiona blocările dintr-o tranzacție pentru a face acest lucru. Aceste reguli sunt furnizate de platforma 1C: Enterprise prin utilizarea anumitor niveluri de izolare a tranzacțiilor într-un anumit SGBD. Acest mod de funcționare este cel mai ușor pentru dezvoltator, dar în unele cazuri (de exemplu, cu o muncă simultană intensivă un numar mare utilizatori), nivelul de izolare a tranzacției utilizat în SGBD nu poate oferi suficient paralelism, care se manifestă sub forma unui număr mare de conflicte de blocare atunci când utilizatorii lucrează.

Când funcționează în modul de blocare controlată, sistemul 1C: Enterprise folosește mult mai mult nivel scăzut izolarea tranzacțiilor în SGBD, care poate crește semnificativ paralelismul utilizatorilor soluției aplicate. Cu toate acestea, spre deosebire de modul de blocare automată, acest nivel izolarea tranzacțiilor nu mai poate, prin ea însăși, să aplice toate regulile pentru lucrul cu datele într-o tranzacție. Prin urmare, atunci când lucrează într-un mod controlat, dezvoltatorul trebuie să gestioneze independent blocările setate în tranzacție.

Într-o formă rezumativă, diferențele dintre interblocări automate și interblocări controlate sunt prezentate în următorul tabel:

Setarea modului de blocare în configurație

Configurația are proprietatea Data Lock Control Mode. Fiecare obiect de configurare a aplicației are, de asemenea, o proprietate Mod de control blocare date.
Modul de control al blocării datelor pentru întreaga configurație poate fi setat la Automat, Gestionat (implicit pentru o nouă configurație) și Automat și Gestionat. Valorile automate și controlate înseamnă că modul de blocare corespunzător va fi utilizat pentru toate obiectele de configurare, indiferent de valorile setate pentru fiecare dintre obiecte. Valoarea automată și controlată înseamnă că pentru un anumit obiect de configurare se va utiliza modul specificat în proprietatea sa a modului de control Blocare date: Automat sau Controlat.
Trebuie remarcat faptul că modul de control al blocării datelor specificat pentru obiectul metadate este setat pentru acele tranzacții inițiate de sistemul 1C: Enterprise atunci când se lucrează cu datele acestui obiect (de exemplu, atunci când se modifică datele obiectului).
Dacă, de exemplu, se efectuează o operație de scriere a obiectului într-o tranzacție inițiată de dezvoltator (metoda StartTransaction ()), atunci modul de control al blocării datelor va fi determinat de valoarea parametrului Modului de blocare
metoda StartTransaction (), nu valoarea proprietății obiectului de metadate Data Lock Control Mode.
În mod implicit, modul de blocare este setat la modul de gestionare a blocării datelor. Automat, deci
pentru a utiliza modul de blocare gestionat într-o tranzacție explicită, trebuie să specificați valoarea acestui parametru
Modul de gestionare a blocării datelor.

Lucrul cu blocări gestionate utilizând limbajul încorporat

Pentru a gestiona blocările într-o tranzacție, se utilizează obiectul de limbă încorporat DataLock. Acest obiect poate fi instanțiat folosind constructorul și vă permite să descrieți spațiile de blocare necesare și modurile de blocare. Pentru a seta toate blocările create, utilizați metoda Lock () a obiectului DataLock. Dacă această metodă este executată într-o tranzacție (explicită sau implicită), blocările sunt achiziționate și vor fi eliberate automat la sfârșitul tranzacției. Dacă metoda Lock () este executată în afara unei tranzacții, atunci nu vor fi achiziționate blocări.

Condițiile sunt stabilite pentru egalitatea valorii câmpului cu valoarea specificată sau pentru apariția valorii câmpului în intervalul specificat.
Condițiile pot fi stabilite în două moduri:

  • specificând în mod explicit numele și valoarea câmpului (metoda SetValue () a obiectului DataLockElement);
  • prin specificarea unei surse de date care conține valorile necesare (proprietatea DataSource a obiectului DataLockElement).

Pentru fiecare element de blocare, poate fi setat unul dintre cele două moduri de blocare:

  • impartit,
  • excepţional.

Tabelul de compatibilitate a blocării gestionate arată astfel

Modul de blocare partajată înseamnă că datele blocate nu pot fi modificate de o altă tranzacție până la sfârșitul tranzacției curente.
Modul de blocare exclusiv înseamnă că datele blocate nu pot fi modificate de o altă tranzacție până la sfârșitul tranzacției curente și nici nu pot fi citite de o altă tranzacție care dobândește o blocare partajată a acestor date.

Caracteristici de lucru în modul „Automat și controlat”

Când funcționați în modul de control automat și controlat, există două puncte de luat în considerare:

Indiferent de modul specificat pentru o anumită tranzacție, sistemul va seta controlul corespunzător
blocare.
Modul de gestionare a blocării este determinat de tranzacția la cel mai înalt nivel. Cu alte cuvinte, dacă o altă tranzacție a fost inițiată în momentul în care a început tranzacția, atunci tranzacția inițiată poate fi efectuată numai în modul setat pentru o tranzacție care rulează deja.

Să luăm în considerare caracteristicile enumerate mai detaliat.

Prima caracteristică este că, chiar dacă modul de gestionare automată a blocării este utilizat pentru o tranzacție, sistemul va seta suplimentar blocările gestionate corespunzătoare atunci când scrie date în această tranzacție. Aceasta implică faptul că tranzacțiile care se execută în modul de blocare gestionată pot intra în conflict cu tranzacțiile care se execută în modul de gestionare automată a blocării.

A doua caracteristică este că modul de gestionare a blocării specificat pentru obiectul de metadate din configurație sau specificat explicit la începutul unei tranzacții (ca parametru al metodei StartTransaction ()) este doar modul „dorit”. Modul efectiv de gestionare a blocării în care va fi executată tranzacția depinde de faptul dacă acest apel pentru a începe o tranzacție este primul sau dacă a început deja o altă tranzacție în această sesiune a sistemului 1C: Enterprise.

De exemplu, dacă doriți să gestionați blocările atunci când scrieți seturi de înregistrări ale registrului, atunci când postați un document, atunci modul de blocare controlată trebuie setat atât pentru registrul în sine, cât și pentru document, deoarece scrierea seturilor de înregistrări ale registrului va fi efectuată în tranzacție deschisă când a fost scris documentul.