Kļūda, izmantojot bloķēšanas pārvaldnieka automātisko režīmu. Darījumu datu bloķēšanas kontrole, mehānisms

Galvenie iemesli pārejai uz pārvaldītajām slēdzenēm:

  • Galvenais iemesls ir 1C:Expert ieteikums, pamatojoties uz liecību vai 1C:TsUP
  • Problēmas ar vienlaicīgiem lietotājiem ()
  • Izmantojot Oracle, PostgreSQL un .

Darba izmaksas:

Pārvaldīto slēdzeņu būtība

Strādājot automātiskās bloķēšanas vadības režīmā, 1C:Enterprise transakcijā DBVS līmenī uzstāda augstu datu izolācijas pakāpi. Tas ļauj pilnībā novērst iespēju iegūt nepilnīgus vai nepareizus datus bez īpašām lietojumprogrammu izstrādātāju pūlēm.

Šī ir ērta un pareiza pieeja nelielam skaitam aktīvo lietotāju. Izstrādes viegluma cena ir noteikta liekas bloķēšanas apjoms DBVS līmenī. Šīs slēdzenes ir saistītas gan ar bloķēšanas mehānismu ieviešanas īpatnībām pašā DBVS, gan ar to, ka DBVS nevar (un neņem) ņemt vērā 1C:Enterprise metadatu objektu fizisko nozīmi un struktūru.

Strādājot ar lielu konkurenci par resursiem (liels lietotāju skaits), kādā brīdī lieko bloķēšanas ietekme kļūst pamanāma veiktspējas ziņā paralēlajā režīmā.

Pēc konfigurācijas pārsūtīšanas uz pārvaldīto režīmu platformā tiek aktivizēta “bloķēšanas pārvaldnieka” papildu funkcionalitāte un datu integritātes kontrole tagad tiek veikta nevis DBVS, bet gan 1C servera pusē. Tas palielina 1C servera aparatūras slodzi (nepieciešami ātrāki procesori un vairāk atmiņas) un faktiski ievieš pat nelielu palēnināšanos (vairāki procenti), taču ievērojami uzlabo situāciju ar slēdzenēm (mazāk slēdzeņu objekta bloķēšanas dēļ un nevis uz tabulu kombinācijas, mazāk bloķēšanas zonas un dažos gadījumos lasīšanas bloķēšanas laiks ir īsāks, t.i., ne līdz darījuma beigām). Tas uzlabo kopējo vienlaicību.


Jaunās 1C konfigurācijas tika nekavējoties ieviestas kontrolētā režīmā.

  • Jautājums: Vai ir iespējams vispirms veikt auditu un pēc tam pāriet uz FM?

Atbilde: Jā, audits kalpos kā papildu pamatojums iespējamībai pāriet uz pārvaldītajām slēdzenēm, kā arī novērtēt automātisko slēdzeņu ieguldījumu kopējā palēninājumā un to, vai papildus pārejai ir nepieciešamas papildu pūles.

  • Jautājums: Lai pārietu uz UX, kāda veida piekļuve ir jānodrošina - RDP, TeamViewer? Vai arī es varu jums nosūtīt konfigurācijas failu?

Atbilde: Mēs cenšamies neaprobežoties ar vienu konkrētu attālās piekļuves tehnoloģiju, tas derēs jebkura attālās piekļuves tehnoloģija. Ja jums tas nav svarīgi, tad LAP ir praktiskāka.
Mēs varam veikt optimizāciju, pamatojoties uz nosūtīto konfigurācijas failu, bet tad mēs nevarēsim atkļūdot dažus reālus datus un jums būs rūpīgāk jāpārbauda. Ja mēs veicam datu bāzes kopijas optimizāciju, mēs varam to pārbaudīt rūpīgāk, pirms mēs sniedzam jums darba rezultātu.

  • Jautājums: Mums ir 10 pilna laika programmētāji, kuri katru dienu konferencē kaut ko maina. Tiek izmantots koplietots konfigurācijas veikals." Kā tiks organizēta mijiedarbība pārejas laikā uz UX? Vai arī visi programmētāji jāsūta atvaļinājumā?

Atbilde: Parasti mūsu izmaiņas tiek veiktas pāris dienu laikā. Pārējais laiks tiek pavadīts, pārbaudot veiktās izmaiņas, tostarp no biznesa, nevis tehnisku apsvērumu noteiktās vajadzīgās loģikas viedokļa. Mēs mēs varam veikt izmaiņas atsevišķā konfigurācijas failā cf , un tad jūsu programmētājs to ievietos repozitorijā. Nevienam nebūs jādodas atvaļinājumā. Citos mijiedarbības variantos jums vienkārši jāvienojas par to, kurus objektus jūsu izstrādātāji plāno uzņemt, lai mēs varētu izveidot abām pusēm ērtu darba plānu. Parasti jūsu izstrādātājiem nav jātver visa konfigurācija vai jāiedod mums dienas “stūre”.

Sistēma 1C:Enterprise ļauj izmantot divus darba režīmus ar datu bāzi: automātiskās bloķēšanas režīmu darījumā un vadāmo slēdzeņu režīmu darījumā.

Būtiskā atšķirība starp šiem režīmiem ir šāda. Automātiskās bloķēšanas režīmā izstrādātājam nav jāveic nekādas darbības, lai pārvaldītu bloķēšanas darījumus. Šos noteikumus nodrošina 1C:Enterprise sistēmas platforma, izmantojot noteiktus darījumu izolācijas līmeņus noteiktā DBVS. Šis darbības režīms izstrādātājam ir visvienkāršākais, tomēr dažos gadījumos (piemēram, intensīvi vienlaicīgi strādājot lielam lietotāju skaitam) DBVS izmantotais darījumu izolācijas līmenis nevar nodrošināt pietiekamu paralēlismu, kas izpaužas liela skaita bloķēšanas konfliktu forma, kad lietotāji strādā.

Darbojoties pārvaldītā bloķēšanas režīmā, sistēma 1C:Enterprise izmanto daudz zemāku darījumu izolācijas līmeni DBVS, kas var ievērojami palielināt lietojumprogrammas risinājuma lietotāju vienlaicīgumu. Tomēr atšķirībā no automātiskās bloķēšanas režīma šis darījumu izolācijas līmenis pats par sevi vairs nevar nodrošināt atbilstību visiem noteikumiem darbam ar datiem darījumā. Tāpēc, strādājot pārvaldītajā režīmā, izstrādātājam ir patstāvīgi jāpārvalda darījumā iestatītās slēdzenes.

Rezumējot, atšķirības, strādājot automātiskā bloķēšanas režīmā un kontrolētā bloķēšanas režīmā, ir parādītas šajā tabulā:

Bloķēšanas režīma iestatīšana konfigurācijā

Konfigurācijai ir rekvizīts Data Lock Control Mode. Katram konfigurācijas lietojumprogrammas objektam ir arī rekvizīts Data Lock Control Mode.
Datu bloķēšanas vadības režīmu visai konfigurācijai var iestatīt uz Automātiski, Pārvaldīts (jaunas konfigurācijas noklusējuma iestatījums) vai Automātiski un pārvaldīts. Automātiskās un Pārvaldītās vērtības nozīmē, ka visiem konfigurācijas objektiem tiks izmantots atbilstošais bloķēšanas režīms neatkarīgi no katram objektam iestatītajām vērtībām. Automātiskā un pārvaldītā vērtība nozīmē, ka konkrētam konfigurācijas objektam tiks izmantots tā rekvizītā Data Locking Control Mode norādītais režīms: automātisks vai pārvaldīts.
Jāņem vērā, ka metadatu objektam noteiktais datu bloķēšanas vadības režīms tiek iestatīts tām transakcijām, kuras iniciē sistēma 1C:Enterprise, strādājot ar šī objekta datiem (piemēram, modificējot objekta datus).
Ja, piemēram, objekta rakstīšanas operācija tiek veikta izstrādātāja iniciētā transakcijā (metode StartTransaction()), tad datu bloķēšanas vadības režīmu noteiks parametra Locking Mode vērtība.
metodi StartTransaction(), nevis metadatu objekta rekvizīta Data Lock Control Mode vērtību.
Pēc noklusējuma parametrs Bloķēšanas režīms ir iestatīts uz Datu bloķēšanas vadības režīms
Lai precīzā darījumā izmantotu pārvaldītās bloķēšanas režīmu, ir jānorāda šī parametra vērtība
Datu bloķēšanas vadības režīms.

Darbs ar pārvaldītajām slēdzenēm, izmantojot iebūvēto valodu

Lai pārvaldītu slēdzenes darījumā, tiek izmantots iebūvētais valodas objekts DataLock. Šī objekta eksemplāru var izveidot, izmantojot konstruktoru, un tas ļauj aprakstīt nepieciešamās bloķēšanas vietas un bloķēšanas režīmus. Lai iestatītu visas izveidotās slēdzenes, izmantojiet DataLock objekta metodi Lock(). Ja šī metode tiek izpildīta darījumā (tieši vai netieši), slēdzenes tiek iegūtas un tiks automātiski atbrīvotas, kad darījums beidzas. Ja Lock() metode tiek izpildīta ārpus darījuma, bloķēšana netiks iegūta.

Ir iestatīti nosacījumi, lai lauka vērtība būtu vienāda ar norādīto vērtību vai lai lauka vērtība būtu norādītajā diapazonā.
Nosacījumus var iestatīt divos veidos:

  • skaidri norādot lauka nosaukumu un vērtību (DataLockElement objekta SetValue() metode);
  • norādot datu avotu, kurā ir vajadzīgās vērtības (DataLockElement objekta rekvizīts DataSource).

Katram bloķēšanas elementam var iestatīt vienu no diviem bloķēšanas režīmiem:

  • dalīts,
  • ārkārtējs.

Pārvaldītās bloķēšanas saderības tabula izskatās šādi:

Koplietots bloķēšanas režīms nozīmē, ka bloķētos datus nevar mainīt ar citu darījumu līdz pašreizējā darījuma beigām.
Ekskluzīva bloķēšana nozīmē, ka bloķētos datus nevar mainīt cits darījums pirms pašreizējā darījuma beigām, kā arī tos nevar nolasīt cits darījums, kuram ir koplietota datu bloķēšana.

Darbības iezīmes režīmā “Automātiski un kontrolēti”.

Strādājot automātiskās un kontrolētās bloķēšanas vadības režīmā, jāņem vērā divas funkcijas:

Neatkarīgi no konkrētajam darījumam norādītā režīma sistēma instalēs atbilstošo pārvaldīto
bloķēšana.
Slēdzenes vadības režīmu nosaka augstākā līmeņa transakcija. Citiem vārdiem sakot, ja darījuma sākšanas brīdī tika sākts cits darījums, tad sākto darījumu var izpildīt tikai režīmā, kas ir iestatīts jau esošajam darījumam.

Apsvērsim uzskaitītās funkcijas sīkāk.

Pirmā iezīme ir tāda, ka pat tad, ja darījumam tiek izmantots automātiskais slēdzenes pārvaldības režīms, sistēma, ierakstot datus šajā darījumā, papildus instalēs atbilstošās pārvaldītās slēdzenes. No tā izriet, ka pārvaldītās bloķēšanas režīmā izpildītās transakcijas var būt pretrunā ar automātiskās bloķēšanas pārvaldības režīmā veiktajām transakcijām.

Otra iezīme ir tāda, ka bloķēšanas pārvaldības režīms, kas norādīts metadatu objektam konfigurācijā vai skaidri norādīts, uzsākot darījumu (kā StartTransaction() metodes parametrs), ir tikai “vēlamais” režīms. Faktiskais slēdzenes pārvaldības režīms, kurā tiks izpildīts darījums, ir atkarīgs no tā, vai šis ir pirmais darījuma sākšanas izsaukums, vai arī šajā sistēmas 1C:Enterprise sesijā tajā brīdī jau ir sācies cits darījums.

Piemēram, ja ir jāpārvalda slēdzenes, rakstot reģistra ierakstu kopas, grāmatojot, tad pārvaldītais bloķēšanas režīms ir jāiestata gan pašam reģistram, gan dokumentam, jo ​​darījumā tiks veikta reģistra ierakstu kopu rakstīšana. atvērts, rakstot dokumentu.

Datu bloķēšanas pārvaldības mehānisms darījumā ļauj bloķēt maināmos datus nevis ar izmantotās datu bāzes pārvaldības sistēmas, bet gan platformas palīdzību. Šāda datu bloķēšanas pārvaldība tiek veikta nevis DBVS datu, bet tematiskās jomas ziņā. Pateicoties tam, slēdzenes tiek pielietotas precīzāk un palielinās lietotāju vienlaicīgums.

Konfigurācija 1C: Uzņēmums 8 var darboties vienā no trim režīmiem, lai pārvaldītu slēdzenes darījumā:

  • auto;
  • pārvaldīts - standarta režīms jaunām konfigurācijām;
  • automātiska un kontrolēta.

IN automātiskais režīms Datu bloķēšanas pārvaldība izmanto atkārtojamus lasīšanas un serializējamus darījumu izolācijas līmeņus, ko nodrošina datu bāzes pārvaldības sistēma. Šie darījumu izolācijas līmeņi nodrošina konsekventu un konsekventu datu nolasīšanu, neprasot izstrādātājam papildu bloķēšanas pārvaldības pasākumus.

Pārvaldīts režīmsļauj palielināt lietotāja darba paralēlismu klienta-servera darbības režīmā, izmantojot zemāka līmeņa datu bāzes transakciju izolāciju (Read Committed). Ierakstot datus darījumam, iebūvētie valodas objekti automātiski bloķē nepieciešamos datus. Izstrādātājam ir jāpārvalda datu bloķēšana gadījumos, kad biznesa loģika prasa konsekventu un konsekventu datu nolasīšanu darījumā.

Automātiski un kontrolēti režīms ļauj izmantot iespēju pārvaldīt slēdzenes darījumā tikai dažiem konfigurācijas objektiem. Šo režīmu var izmantot, lai optimizētu lietotāja vienlaicīgumu ar atsevišķiem lietojumprogrammu objektiem (piemēram, dažiem no visintensīvāk izmantotajiem dokumentiem) vai lai pakāpeniski pārietu lielas konfigurācijas uz darījumu bloķēšanas pārvaldības režīmu.

Rezumējot, atšķirības, strādājot automātiskā bloķēšanas režīmā un kontrolētā bloķēšanas režīmā, ir parādītas šajā tabulā:

Visbiežāk nepieciešamība pārvaldīt datu bloķēšanas darījumus rodas dokumentu grāmatošanas procesā, kad nepieciešams nolasīt un pēc tam tajās pašās tabulās ierakstīt mainītos datus. Piemēram, ja, grāmatojot dokumentu, uzraugāt atlikumus.

Īpaši šim nolūkam īpašums ir uzkrāšanas reģistru un grāmatvedības reģistru ierakstu komplektiem BlockForChange.

Ja jums ir jākontrolē atlikumi un pēc tam jāreģistrē kustības tajā pašā reģistrā, tad šis rekvizīts ir jāiestata šī reģistra ierakstu kopai īpašumā Kustības.

Šī rekvizīta ietekme ir tāda pati kā tad, ja izstrādātājs neatkarīgi instalētu (norādīts kodā) nepieciešamās pārvaldītās slēdzenes priekš 1C:Enterprise 8. Platforma automātiski instalēs nepieciešamo pārvaldīto slēdzeni, rakstot šo ierakstu kopu. Rezultātā citas pārvaldītās transakcijas, kas izmanto to pašu slēdzeni, nevarēs sākt šī reģistra nolasīšanu, kamēr pašreizējā transakcija nebūs pabeigta.

Zemāk ir piemērs datu bloķēšanas "manuālai" kontrolei, nolasot uzkrāšanas reģistra datus Preču uzskaite dokumentu apstrādē Pārdošanas rēķins. Šajā piemērā pārvaldītās slēdzenes tiek izveidotas un iestatītas pilnībā, izmantojot iebūvēto valodu.

Mehānisms darījumu slēdzenes izmanto konkurētspējīgu lietotāju piekļuvei DBVS.
Darījums ir sava veida nepārtraukta darbība, kuras laikā mainās datu bāzes stāvoklis. Tas ir minimālais izmaiņu daudzums: jūs nevarat veikt pusi darījuma; ja darījums netiek pabeigts, datu bāze tiks atgriezta sākotnējā stāvoklī.
Tā kā darījums tver datu masīvu, piekļūstot šim masīvam, rodas nianse: piemēram, viens darījums maina datus, bet cits mēģina tos nolasīt. Lasīšanas rezultāts var būt nepareizs, jo netiks iekļautas jaunākās izmaiņas. Tāpēc darījumu izolācija darbojas DBVS līmenī. Ir iespējami šādi izolācijas līmeņi:

  • Lasīt bez saistībām- kamēr viens darījums maina masīvu, cits to nevar mainīt, bet var lasīt. Zemākais izolācijas līmenis.
  • Lasīt apņēmies- kamēr viens darījums maina masīvu, cits nevar to mainīt vai nolasīt
  • Atkārtojama lasāmviela- kamēr viens darījums nolasa masīvu, cits to nevar mainīt, bet var lasīt
  • Serializējams- kamēr viens darījums nolasa masīvu, cits nevar to mainīt vai nolasīt. Visas darbības ir secīgas. Maksimālais izolācijas līmenis.

Ja 1C:Uzņēmuma konfigurācija ir iestatīta uz automātiskās bloķēšanas režīms, tad DBVS izvēlas darījuma izolācijas līmeni. MS SQL gadījumā tas būs Repeatable read vai Serializable level, tas ir, datu izolācija ir tuvu maksimālajam. Tas atrisina problēmas ar datu pareizību, bet var izraisīt bloķēšanu DBVS līmenī intensīva lietotāja darba laikā. Tāpēc 1C:Enterprise ir sava funkcionalitāte darbam ar slēdzenēm, kas tiek aktivizēta, iespējojot pārvaldīto slēdzeņu režīmu. Šajā gadījumā MS SQL transakciju izolācijas līmenis tiks nolasīts. Pati platforma izolēs datus, nepaļaujoties uz DBVS.

Pārvaldītais bloķēšanas režīms ir iespējots konfigurācijas rekvizītos:

Arī bloķēšanas režīmu var iestatīt konkrētiem konfigurācijas objektiem:

Ja konfigurācijai kopumā ir iestatīts automātiskās bloķēšanas režīms, tad visas transakcijas visiem reģistriem darbosies automātiskajā režīmā neatkarīgi no konfigurācijas objektam iestatītā režīma. Ja Pārvaldīts, tad līdzīgi visi darījumi būs sadaļā Pārvaldīti. Ja konfigurācijas režīms ir iestatīts uz Automātisks un tiek kontrolēts, tad katra objekta režīmu noteiks tā iestatījumi.

Automātiskajam un kontrolētajam režīmam ir viens punkts. Viena lietotāja transakcija var atspoguļot vairākus darījumus no platformas viedokļa. Piemēram, interaktīva dokumenta ievietošana reģistrā padara divi transakcijas - paša dokumenta ieraksts un šī darījuma ietvaros rindu kopas ieraksts pa reģistriem. Atkarībā no paša dokumenta bloķēšanas pārvaldības režīma un reģistra, ko tas pārvieto, ir iespējamas četras situācijas:

  1. Dokumentu režīms Automātisks, reģistra režīms Automātiski ->
  2. Dokumentu režīms Pārvaldīts, reģistra režīms Pārvaldīts -> ierakstīšana pēc reģistra pārvaldītajā režīmā
  3. Dokumentu režīms Automātisks, reģistra režīms Kontrolēts -> ierakstīt pēc reģistra automātiskajā režīmā
  4. Dokumenta režīms Pārvaldīts, reģistra režīms Automātiski -> izņēmums (kļūda)

1C eksāmena 06.59. jautājums: Platform Professional. Ievietojot dokumentu caur jebkuru reģistru, ja dokumentam ir automātisks darījumu bloķēšanas pārvaldības režīms un reģistrā ir pārvaldīts režīms (konfigurācijas rekvizītos tiek izmantota opcija “Automātiski un pārvaldīts”), šāda grāmatošana novedīs pie:

Pareizā atbilde ir otrā, mēs to nosakām pēc pirmā darījuma, ja tas ir automātisks, tad viss ir automātiski.

1.C eksāmena 06.60. jautājums: Platform Professional. Ievietojot dokumentu caur jebkuru reģistru, ja dokumentam ir pārvaldīts darījumu bloķēšanas pārvaldības režīms, bet reģistrā ir automātisks (konfigurācijas rekvizītos tiek izmantota opcija “Automātiski un pārvaldīts”), tad šāda grāmatošana novedīs pie:

  1. uz kļūdas situāciju
  2. viss darījums tiks pabeigts automātiski
  3. viss darījums tiks pabeigts kontrolētā veidā

Pareizā atbilde ir pirmā, mēs nosakām pēc pirmā darījuma, ja tā ir kontrolēta, tad tā ir kļūda.

1.C eksāmena 06.61. jautājums: Platform Professional. Ievietojot dokumentu caur jebkuru reģistru, ja dokumentam ir automātisks transakciju bloķēšanas pārvaldības režīms un reģistrā ir pārvaldīts režīms (konfigurācijas rekvizītos tiek izmantota opcija “Pārvaldīta”), šāda grāmatošana novedīs pie:

  1. uz kļūdas situāciju
  2. viss darījums tiks pabeigts automātiski
  3. viss darījums tiks pabeigts kontrolētā veidā


 

Varētu būt noderīgi izlasīt: