Kontrollitav lukustusmehhanism. Andmelukkude haldamine tehingus, mehhanismis (tehinguandmete lukustuse juhtimine, mehhanism) Hallatud lukkudega töötamine sisseehitatud keele abil

Andmeluku haldusmehhanism tehingus võimaldab lukustada muudetavaid andmeid mitte kasutatava andmebaasihaldussüsteemi, vaid platvormi abil. Sellist andmeluku haldust ei teostata mitte DBMS-i andmete, vaid teemavaldkonna lõikes. Tänu sellele rakenduvad lukud täpsemalt ja kasutajate samaaegsus suureneb.

Konfiguratsioon 1C: Ettevõte 8 saab tehingu lukkude haldamiseks töötada ühes kolmest režiimist:

  • auto;
  • hallatud - standardrežiim uute konfiguratsioonide jaoks;
  • automaatne ja juhitav.

IN automaatrežiim Andmeluku haldamine kasutab andmebaasihaldussüsteemi pakutavaid korduvaid lugemis- ja serialiseeritavaid tehingute isolatsioonitasemeid. Need tehingute isolatsioonitasemed tagavad andmete järjepideva ja järjepideva lugemise, ilma et see eeldaks arendajalt täiendavaid lukuhalduse pingutusi.

Hallatud režiim võimaldab suurendada kasutajate töö paralleelsust klient-server töörežiimis, kasutades andmebaasi tehingute isolatsiooni madalamat taset (Read Committed). Andmete kirjutamisel tehingusse lukustavad sisseehitatud keeleobjektid automaatselt vajalikud andmed. Arendaja peab haldama andmete lukke juhtudel, kui äriloogika nõuab tehingus andmete järjepidevat ja järjepidevat lugemist.

Automaatne ja juhitav režiim võimaldab kasutada tehingu lukkude haldamise võimalust ainult mõne konfiguratsiooniobjekti puhul. Seda režiimi saab kasutada kasutaja samaaegsuse optimeerimiseks üksikute rakendusobjektidega (nt mõned kõige intensiivsemalt kasutatavad dokumendid) või suurte konfiguratsioonide järkjärguliseks üleminekuks tehinguluku haldusrežiimi.

Kokkuvõttes on erinevused automaatse blokeerimise režiimis ja kontrollitud blokeerimisrežiimis töötamisel näidatud järgmises tabelis:

Kõige sagedamini tekib vajadus tehingu andmelukke hallata dokumentide konteerimise käigus, kui on vaja lugeda ja seejärel samadesse tabelitesse kirjutada muutunud andmed. Näiteks kui jälgite dokumendi postitamisel saldosid.

Eelkõige selleks on vara kogumisregistrite ja raamatupidamisregistrite kirjete kogumitel BlockForChange.

Kui teil on vaja kontrollida saldosid ja seejärel salvestada liikumised samas registris, siis tuleb see atribuut määrata selle registri kirjete kogumile kinnistus Liikumised.

Selle atribuudi mõju on sama, kui arendaja paigaldaks iseseisvalt (koodis ette nähtud) vajalikud hallatavad lukud 1C:Enterprise 8 jaoks. Platvorm installib selle kirjekomplekti kirjutamisel vajaliku hallatava luku automaatselt. Seetõttu ei saa teised sama lukku kasutavad hallatavad tehingud seda registrit lugema hakata enne, kui praegune tehing on lõppenud.

Allpool on näide andmelukkude "käsitsi" juhtimisest akumulatsiooniregistri andmete lugemisel Esemete arvestus dokumentide töötlemisel Müügiarve. Selles näites luuakse ja seadistatakse hallatud lukud täielikult sisseehitatud keele abil.

mehhanism tehingu lukud kasutatakse konkureerivate kasutajate juurdepääsuks DBMS-ile.
Tehing on pidev toiming, mille käigus andmebaasi olek muutub. See on muutuste minimaalne suurus: te ei saa teha poolt tehingut; kui tehing ei jõua lõpule, veeretatakse andmebaas tagasi algolekusse.
Kuna tehing hõivab andmemassiivi, tekib sellele massiivile juurdepääsul nüanss: näiteks üks tehing muudab andmeid ja teine ​​proovib neid lugeda. Lugemistulemus võib olla vale, sest ei sisalda viimaseid muudatusi. Seetõttu toimib tehingute isoleerimine DBMS-i tasemel. Võimalikud on järgmised isolatsioonitasemed:

  • Lugege pühendumata- kui üks tehing muudab massiivi, siis teine ​​ei saa seda muuta, kuid saab seda lugeda. Madalaim isolatsioonitase.
  • Lugege pühendunud- kui üks tehing muudab massiivi, ei saa teine ​​seda muuta ega lugeda
  • Korratav lugemine- kui üks tehing loeb massiivi, siis teine ​​ei saa seda muuta, kuid saab lugeda
  • Serialiseeritav- kui üks tehing loeb massiivi, ei saa teine ​​seda muuta ega lugeda. Kõik toimingud on järjestikused. Maksimaalne isolatsioonitase.

Kui konfiguratsioon 1C:Enterprise on seatud väärtusele automaatne lukustusrežiim, siis valib DBMS tehingu isolatsioonitaseme. MS SQL-i puhul on selleks korratav lugemistase või järjestatav tase, st andmete eraldatus on maksimumilähedane. See lahendab probleemid andmete õigsusega, kuid võib intensiivse kasutajatöö ajal põhjustada blokeerimist DBMS-i tasemel. Seetõttu on 1C:Enterprise'il lukkudega töötamiseks oma funktsioon, mis aktiveeritakse hallatavate lukkude režiimi lubamisega. Sel juhul määratakse MS SQL-i tehingu eraldatuse tase Read. Platvorm ise isoleerib andmed ilma DBMS-ile tuginemata.

Hallatud lukustusrežiim on konfiguratsiooniatribuutides lubatud:

Samuti saab lukustusrežiimi määrata konkreetsete konfiguratsiooniobjektide jaoks:

Kui konfiguratsioon tervikuna on seatud režiimile Automaatne lukustus, töötavad kõik registrite tehingud automaatrežiimis, olenemata konfiguratsiooniobjektile seatud režiimist. Kui Hallatud, siis samamoodi on kõik tehingud Hallatud. Kui konfiguratsioonirežiimiks on seatud Automaatne ja juhitud, määratakse iga objekti režiim selle sätete järgi.

Automaatse ja juhitava režiimi jaoks on üks punkt. Üks kasutaja tehing võib platvormi seisukohast esindada mitut tehingut. Näiteks dokumendi interaktiivne postitamine registrisse teeb kaks tehingud - dokumendi enda kirje ja selle tehingu sees ridade kogumi kirje registrite kaupa. Sõltuvalt dokumendi enda lukuhaldusrežiimist ja registrist, mida see liigutab, on võimalik neli olukorda:

  1. Dokumendirežiim Automaatne, registrirežiim Automaatne ->
  2. Dokumendirežiim Hallatav, registrirežiim Hallatud -> kirje registri kaupa hallatavas režiimis
  3. Dokumendirežiim Automaatne, registrirežiim Juhitav -> automaatrežiimis registri järgi salvestamine
  4. Dokumendirežiim Hallatud, registrirežiim Automaatne -> erand (viga)

Eksami 1C küsimus 06.59: Platform Professional. Kui dokumendi postitamisel läbi mis tahes registri on automaatne tehinguluku haldusrežiim ja registril on hallatav režiim (konfiguratsiooniomadustes on kasutusel valik „Automaatne ja hallatud“), toob selline postitamine kaasa:

Õige vastus on teine, selle määrame esimese tehingu järgi, kui see on automaatne, siis on kõik automaatselt.

Eksami 1C küsimus 06.60: Platform Professional. Kui dokumendi postitamisel suvalise registri kaudu on dokumendil hallatud režiim tehingulukkude haldamiseks ja registril on automaatne (konfiguratsiooniatribuutides on kasutusel valik „Automaatne ja hallatud”), toob selline postitamine kaasa:

  1. veaolukorrale
  2. kogu tehing sooritatakse automaatselt
  3. kogu tehing viiakse läbi kontrollitult

Õige vastus on esimene, määrame esimese tehingu järgi, kui see on kontrollitud, siis on tegu veaga.

Eksami 1C küsimus 06.61: Platform Professional. Kui dokumendi postitamisel läbi mis tahes registri on dokumendil automaatne režiim tehingulukkude haldamiseks ja registril on hallatav režiim (konfiguratsiooniatribuutides kasutatakse valikut „Hallatud”), toob selline postitamine kaasa:

  1. veaolukorrale
  2. kogu tehing sooritatakse automaatselt
  3. kogu tehing viiakse läbi kontrollitult

Hallatud lukkudele ülemineku peamised põhjused:

  • Peamine põhjus on 1C:Experti soovitus, mis põhineb tunnistustel või 1C:TsUP
  • Probleemid samaaegsete kasutajatega ()
  • Kasutades Oracle, PostgreSQL ja .

Töö maksumus:

Hallatavate lukkude olemus

Automaatse lukustuse juhtimisrežiimis töötades seab 1C:Enterprise DBMS-i tasemel tehingus kõrge andmete isolatsiooni. See võimaldab teil täielikult välistada võimaluse saada mittetäielikke või ebaõigeid andmeid ilma rakenduste arendajate erilise pingutuseta.

See on mugav ja õige lähenemine väikesele hulgale aktiivsetele kasutajatele. Arenduslihtsuse hind on teatud summa üleliigne lukustamine DBMS-i tasemel. Need lukud on seotud nii DBMS-i enda lukustusmehhanismide rakendamise iseärasustega kui ka sellega, et DBMS ei saa (ja ei võta) arvesse 1C: Enterprise metaandmete objektide füüsilist tähendust ja struktuuri.

Kui töötate suure konkurentsiga ressursside pärast (suur hulk kasutajaid), muutub üleliigsete lukkude mõju paralleelrežiimis jõudluse osas mingil hetkel märgatavaks.

Pärast konfiguratsiooni ülekandmist hallatavasse režiimi aktiveeritakse platvormil lukuhalduri lisafunktsioonid ja andmete terviklikkuse kontrollimist teostatakse nüüd mitte DBMS-i, vaid 1C serveri poolel. See suurendab 1C serveri riistvara koormust (vaja on kiiremaid protsessoreid ja rohkem mälu) ja toob tegelikult kaasa isegi väikese aeglustumise (mitu protsenti), kuid parandab oluliselt olukorda lukkudega (objekti lukustuste tõttu on vähem lukke ja mitte tabelite kombinatsioonil, vähem blokeerimisala ja mõnel juhul on lugemislukkude eluiga lühem, st mitte tehingu lõpuni). See parandab üldist samaaegsust.


1C uued konfiguratsioonid rakendati koheselt kontrollitud režiimis.

  • Küsimus: Kas on võimalik enne auditit teha ja siis FM-i üle kanda?

Vastus: Jah, audit annab lisapõhjenduseks hallatavatele lukkudele ülemineku otstarbekust ning hindab ka automaatsete lukkude panust üldisesse aeglustumisse ning seda, kas peale ülemineku on vaja täiendavaid jõupingutusi.

  • Küsimus: UX-i üleviimiseks peaks olema juurdepääsetav - RDP, TeamViewer? Või kas ma saan teile konfiguratsioonifaili saata?

Vastus: Püüame mitte piirduda ühe konkreetse kaugjuurdepääsu tehnoloogiaga, see läheb korda mis tahes kaugjuurdepääsu tehnoloogia. Kui see pole teie jaoks oluline, on MAK praktilisem.
Saame optimeerida saadetud konfiguratsioonifaili põhjal, kuid siis ei saa me mõningaid reaalseid andmeid siluda ja peate hoolikamalt testima. Kui teeme andmebaasi koopiale optimeerimise, saame seda enne töö tulemuse üleandmist põhjalikumalt testida.

  • Küsimus: Meil ​​on 10 täiskohaga programmeerijat, kes iga päev konverentsil midagi muudavad. Kasutatakse jagatud konfiguratsioonipoodi." Kuidas korraldatakse suhtlust UX-i ülemineku ajal? Või tuleks kõik programmeerijad puhkusele saata?

Vastus: Meie muudatused tehakse reeglina paari päeva jooksul. Ülejäänud aeg kulub tehtud muudatuste testimisele, sh äri, mitte tehniliste kaalutluste poolt määratud vajaliku loogika seisukohalt. Meie saame teha muudatusi eraldi konfiguratsioonifailis cf ja seejärel sisestab teie programmeerija selle hoidlasse. Keegi ei pea puhkusele minema. Muude suhtlusvõimaluste puhul peate lihtsalt kokku leppima, milliseid objekte teie arendajad plaanivad jäädvustada, et saaksime koostada mõlemale poolele mugava tööplaani. Reeglina ei pea teie arendajad kogu konfiguratsiooni jäädvustama ega andma meile päeva "rooli".

Süsteem 1C:Enterprise võimaldab teil andmebaasiga töötamiseks kasutada kahte režiimi: tehingu automaatsete lukkude režiimi ja tehingus kontrollitavate lukkude režiimi.

Põhiline erinevus nende režiimide vahel on järgmine. Automaatne lukustusrežiim ei nõua arendajalt tehingu lukkude haldamiseks mingeid toiminguid. Need reeglid tagab 1C:Enterprise süsteemiplatvorm, kasutades konkreetses DBMS-is teatud tehingute isolatsiooni taset. See töörežiim on arendaja jaoks kõige lihtsam, kuid mõnel juhul (näiteks suure hulga kasutajate intensiivsel samaaegsel tööl) ei suuda DBMS-is kasutatav tehingute isolatsiooni tase tagada piisavat paralleelsust, mis väljendub suure hulga lukustuskonfliktide kujul, kui kasutajad töötavad.

Hallatud lukustusrežiimis töötades kasutab 1C:Enterprise süsteem DBMS-is palju madalamat tehingute isolatsiooni taset, mis võib oluliselt suurendada rakenduslahenduse kasutajate samaaegsust. Erinevalt automaatsest lukustusrežiimist ei saa see tehingute isolatsiooni tase aga enam iseenesest tagada kõigi tehingus andmetega töötamise reeglite järgimist. Seetõttu peab arendaja hallatud režiimis töötades tehingus seatud lukke iseseisvalt haldama.

Kokkuvõttes on erinevused automaatse blokeerimise režiimis ja kontrollitud blokeerimisrežiimis töötamisel näidatud järgmises tabelis:

Blokeerimisrežiimi määramine konfiguratsioonis

Konfiguratsioonil on atribuut Data Lock Control Mode. Igal konfiguratsioonirakenduse objektil on ka atribuut Data Lock Control Mode.
Kogu konfiguratsiooni andmeluku juhtimisrežiimiks saab määrata olekuks Automaatne, Hallatud (uue konfiguratsiooni vaikeseade) või Automaatne ja hallatud. Väärtused Automaatne ja Hallatud tähendavad, et vastavat blokeerimisrežiimi kasutatakse kõigi konfiguratsiooniobjektide jaoks, olenemata iga objekti jaoks määratud väärtustest. Automaatne ja hallatud väärtus tähendab, et konkreetse konfiguratsiooniobjekti jaoks kasutatakse selle atribuudis Data Locking Control Mode määratud režiimi: automaatne või hallatud.
Tuleb märkida, et metaandmete objektile määratud andmete lukustamise juhtimisrežiim seatakse nendele tehingutele, mille 1C:Enterprise süsteem algatab selle objekti andmetega töötamisel (näiteks objekti andmete muutmisel).
Kui näiteks objekti kirjutamise toiming sooritatakse arendaja algatatud tehingus (meetod StartTransaction()), siis määrab andmete lukustamise juhtimisrežiimi parameetri Locking Mode väärtus.
meetod StartTransaction(), mitte atribuudi Data Lock Control Mode metaandmete objekti väärtus.
Vaikimisi on blokeerimisrežiimi parameetriks Data Blocking Control Mode. Automaatne, nii et
Hallatud lukustusrežiimi kasutamiseks selgesõnalises tehingus peate määrama selle parameetri väärtuse
Andmeluku juhtimisrežiim. Hallatud.

Hallatud lukkudega töötamine sisseehitatud keele abil

Tehingu lukkude haldamiseks kasutatakse sisseehitatud keeleobjekti DataLock. Selle objekti eksemplari saab luua konstruktori abil ja see võimaldab kirjeldada vajalikke lukustusruume ja lukustusrežiime. Kõigi loodud lukkude määramiseks kasutage DataLock objekti meetodit Lock(). Kui seda meetodit rakendatakse tehingus (selgesõnaline või kaudne), omandatakse lukud ja need vabastatakse tehingu lõppedes automaatselt. Kui meetodit Lock() käivitatakse väljaspool tehingut, siis lukke ei omandata.

Määratakse tingimused, et välja väärtus oleks võrdne määratud väärtusega või et välja väärtus oleks määratud vahemikus.
Tingimusi saab määrata kahel viisil:

  • täpsustades selgesõnaliselt välja nime ja väärtuse (objekti DataLockElement meetod SetValue());
  • määrates nõutavaid väärtusi sisaldava andmeallika (objekti DataLockElement atribuut DataSource).

Iga blokeerimiselemendi jaoks saab määrata ühe kahest blokeerimisrežiimist:

  • jagatud,
  • erakordne.

Hallatud lukustamise ühilduvuse tabel näeb välja järgmine:

Jagatud lukustusrežiim tähendab, et lukustatud andmeid ei saa teise tehinguga muuta enne praeguse tehingu lõppu.
Eksklusiivne lukustamine tähendab, et lukustatud andmeid ei saa muuta teise tehinguga enne praeguse tehingu lõppu ega lugeda ka teise tehinguga, millel on andmetel jagatud lukk.

Töötamise omadused režiimis "Automaatne ja juhitud".

Automaatse ja juhitud blokeerimise juhtimisrežiimis töötades tuleks arvestada kahe funktsiooniga:

Sõltumata antud tehingu jaoks määratud režiimist installib süsteem vastava hallatava
blokeerimine.
Luku juhtimisrežiim määratakse kõrgeima taseme tehingu järgi. Teisisõnu, kui tehingu alustamise ajal alustati teist tehingut, saab alustatud tehingut sooritada ainult selles režiimis, mis on määratud juba käimasolevale tehingule.

Vaatleme loetletud funktsioone üksikasjalikumalt.

Esimene omadus on see, et isegi kui tehingu jaoks kasutatakse automaatset lukuhaldusrežiimi, paigaldab süsteem sellesse tehingusse andmete kirjutamisel täiendavalt vastavad hallatavad lukud. Sellest järeldub, et hallatud lukustusrežiimis sooritatud tehingud võivad olla vastuolus automaatse lukustuse haldusrežiimis sooritatud tehingutega.

Teine omadus on see, et konfiguratsioonis metaandmeobjekti jaoks määratud või tehingu käivitamisel selgesõnaliselt määratud lukuhaldusrežiim (meetodi StartTransaction() parameetrina) on ainult soovitud režiim. Tegelik lukuhaldusrežiim, milles tehing teostatakse, sõltub sellest, kas see on esimene tehingu alustamise kutse või on sellel hetkel süsteemi 1C:Enterprise seansi käigus juba alanud mõni muu tehing.

Näiteks kui dokumendi postitamisel on vaja hallata lukke registrikirjete komplektide kirjutamisel, siis tuleb hallatav lukustusrežiim määrata nii registrile endale kui ka dokumendile, kuna tehingus tehakse registrikirjete komplektide kirjutamine. avatakse dokumendi kirjutamisel.