Грешка при използване на автоматичен режим на диспечера на заключване. Контрол на заключването на данни за транзакция, механизъм

Основните причини за преминаване към управлявани ключалки:

  • Основната причина е препоръката на 1C: Expert въз основа на свидетелски показания или 1C: TsUP
  • Проблеми с едновременни потребители ()
  • Използвайки Oracle, PostgreSQL и .

Цена на работа:

Същността на управляваните брави

Когато работите в режим на управление на автоматично заключване, 1C:Enterprise задава висока степен на изолация на данните в транзакция на ниво СУБД. Това ви позволява напълно да елиминирате възможността за получаване на непълни или неправилни данни без никакви специални усилия от страна на разработчиците на приложения.

Това е удобен и правилен подход за малък брой активни потребители. Цената на лесната разработка е известно количество излишно заключване на ниво СУБД. Тези ключалки са свързани както с особеностите на внедряването на заключващи механизми в самата СУБД, така и с факта, че СУБД не може (и не) да вземе предвид физическото значение и структура на обектите с метаданни на 1C:Enterprise.

Когато работите с висока конкуренция за ресурси (голям брой потребители), в даден момент влиянието на излишните заключвания става забележимо по отношение на производителността в паралелен режим.

След прехвърляне на конфигурацията в управляван режим, допълнителната функционалност на „мениджъра на заключване“ се активира в платформата и контролът върху целостта на данните вече се извършва не от страна на СУБД, а от страна на сървъра 1C. Това увеличава натоварването на хардуера на 1C сървъра (необходими са по-бързи процесори и повече памет) и всъщност въвежда дори леко забавяне (няколко процента), но значително подобрява ситуацията с заключванията (по-малко заключвания поради блокировки на обект и не на комбинация от таблици, по-малко блокираща зона и в някои случаи животът на заключванията за четене е по-кратък, т.е. не до края на транзакцията). Това подобрява цялостната едновременност.


Новите конфигурации от 1C бяха внедрени веднага в контролиран режим.

  • Въпрос: Възможно ли е първо да се направи одит и след това да се прехвърли към FM?

Отговор: Да, одитът ще послужи като допълнителна обосновка за осъществимостта на прехвърлянето към управлявани брави, както и за оценка на приноса на автоматичните брави за общото забавяне и дали са необходими допълнителни усилия освен прехвърлянето.

  • Въпрос: За да се прехвърли към UX, какъв вид достъп трябва да се осигури - RDP, TeamViewer? Или мога да ви изпратя конфигурационния файл?

Отговор: Опитваме се да не се ограничаваме до една конкретна технология за отдалечен достъп, ще свърши работа всяка технология за отдалечен достъп. Ако за вас няма значение, тогава RDP е по-практичен.
Можем да извършим оптимизация въз основа на изпратения конфигурационен файл, но тогава няма да можем да отстраним грешки в някои реални данни и ще трябва да тествате по-внимателно. Ако извършим оптимизация на копие от базата данни, можем да я тестваме по-задълбочено, преди да ви дадем резултата от работата.

  • Въпрос: Имаме 10 програмисти на пълен работен ден, които всеки ден променят нещо в конференцията. Използва се споделено хранилище за конфигурация." Как ще бъде организирано взаимодействието по време на прехвърлянето към UX? Или всички програмисти трябва да бъдат изпратени в отпуск?

Отговор: Като правило, нашите промени се правят в рамките на няколко дни. Останалото време се изразходва за тестване на направените промени, включително от гледна точка на необходимата логика, определена от бизнес, а не от технически съображения. Ние можем да направим промени в отделен конфигурационен файл cf и след това вашият програмист ще го ангажира в хранилището. Никой няма да трябва да ходи на почивка. При други варианти за взаимодействие просто трябва да се споразумеете кои обекти планират да заснемат вашите разработчици, за да можем да изградим работен план, удобен и за двете страни. По правило вашите разработчици не трябва да заснемат цялата конфигурация или да ни предоставят „волана“ за деня.

Системата 1C:Enterprise ви позволява да използвате два режима на работа с базата данни: режим на автоматично заключване в транзакция и режим на контролирано заключване в транзакция.

Основната разлика между тези режими е следната. Автоматичният режим на заключване не изисква от разработчика да предприеме каквито и да било действия за управление на заключвания в транзакция. Тези правила се осигуряват от системната платформа 1C:Enterprise чрез използване на определени нива на изолация на транзакциите в конкретна СУБД. Този режим на работа е най-простият за разработчика, но в някои случаи (например при интензивна едновременна работа на голям брой потребители), нивото на изолация на транзакциите, използвано в СУБД, не може да осигури достатъчен паралелизъм, което се проявява в под формата на голям брой конфликти при заключване, когато потребителите работят.

Когато работи в режим на управлявано заключване, системата 1C:Enterprise използва много по-ниско ниво на изолация на транзакциите в СУБД, което може значително да увеличи едновременността на потребителите на приложното решение. Въпреки това, за разлика от режима на автоматично заключване, това ниво на изолация на транзакцията вече не може само по себе си да гарантира спазването на всички правила за работа с данни в транзакция. Следователно, когато работите в управляван режим, разработчикът е длъжен самостоятелно да управлява ключалките, зададени в транзакцията.

В обобщение разликите при работа в режим на автоматично блокиране и в режим на контролирано блокиране са показани в следната таблица:

Задаване на режима на блокиране в конфигурацията

Конфигурацията има свойството Data Lock Control Mode. Всеки обект на приложение за конфигурация също има свойството Data Lock Control Mode.
Режимът на управление на заключването на данни за цялата конфигурация може да бъде зададен на Автоматичен, Управляван (по подразбиране за нова конфигурация) или Автоматичен и Управляван. Стойностите Automatic и Managed означават, че съответният режим на блокиране ще се използва за всички конфигурационни обекти, независимо от стойностите, зададени за всеки от обектите. Стойността Automatic and Managed означава, че за определен конфигурационен обект ще се използва режимът, посочен в неговото свойство Data Locking Control Mode: Automatic или Managed.
Трябва да се отбележи, че режимът на управление на заключването на данни, определен за обект с метаданни, е зададен за онези транзакции, които се инициират от системата 1C:Enterprise при работа с данните на този обект (например при промяна на данните на обекта).
Ако например операцията по писане на обект се извършва в транзакция, инициирана от разработчика (методът StartTransaction(), тогава контролният режим на заключване на данни ще се определя от стойността на параметъра Locking Mode
метод StartTransaction(), а не стойността на свойството на метаданните на обекта за режим на заключване на данни.
По подразбиране параметърът за режим на блокиране е настроен на режим на управление на блокиране на данни, така че за
За да използвате режим на управлявано заключване в изрична транзакция, трябва да посочите стойността на този параметър
Управляван режим на заключване на данни.

Работа с управлявани ключалки с помощта на вградения език

За управление на заключвания в транзакция се използва вграденият езиков обект DataLock. Екземпляр на този обект може да бъде създаден с помощта на конструктор и ви позволява да опишете необходимите пространства за заключване и режими на заключване. За да зададете всички създадени ключалки, използвайте метода Lock() на обекта DataLock. Ако този метод се изпълни в транзакция (явна или неявна), заключванията се придобиват и ще бъдат освободени автоматично, когато транзакцията приключи. Ако методът Lock() се изпълни извън транзакция, няма да бъдат получени заключвания.

Задават се условия стойността на полето да бъде равна на посочената стойност или стойността на полето да е в посочения диапазон.
Условията могат да бъдат зададени по два начина:

  • чрез изрично указване на името и стойността на полето (метод SetValue() на обекта DataLockElement);
  • чрез указване на източник на данни, съдържащ необходимите стойности (свойството DataSource на обекта DataLockElement).

За всеки блокиращ елемент може да се зададе един от двата режима на блокиране:

  • споделено,
  • изключителен.

Таблицата за съвместимост на управляваното заключване изглежда така:

Режимът на споделено заключване означава, че заключените данни не могат да бъдат модифицирани от друга транзакция до края на текущата транзакция.
Изключително заключване означава, че заключените данни не могат да бъдат модифицирани от друга транзакция до края на текущата транзакция, нито могат да бъдат прочетени от друга транзакция, която поддържа споделена ключалка на данните.

Характеристики на работа в режим „Автоматично и контролирано“.

Когато работите в режим на автоматично и контролирано блокиране, трябва да се вземат предвид две характеристики:

Независимо от режима, определен за дадена транзакция, системата ще инсталира подходящия управляван
блокиране.
Режимът на управление на заключването се определя от транзакцията от най-високо ниво. С други думи, ако друга транзакция е стартирана по време на стартирането на транзакцията, тогава стартираната транзакция може да бъде изпълнена само в режима, който е зададен за вече изпълняваната транзакция.

Нека разгледаме изброените функции по-подробно.

Първата характеристика е, че дори ако режимът за автоматично управление на заключването се използва за транзакция, системата допълнително ще инсталира съответните управлявани заключвания, когато записва данни в тази транзакция. От това следва, че транзакциите, изпълнявани в режим на управлявано заключване, могат да бъдат в конфликт с транзакциите, изпълнявани в режим на управление на автоматично заключване.

Втората характеристика е, че режимът на управление на заключването, посочен за обект с метаданни в конфигурацията или посочен изрично при стартиране на транзакция (като параметър на метода StartTransaction()), е само „желан“ режим. Действителният режим на управление на заключването, в който ще се изпълни транзакцията, зависи от това дали това е първото извикване за стартиране на транзакция или дали друга транзакция вече е започнала в тази сесия на системата 1C:Enterprise в този момент.

Например, ако трябва да управлявате ключалки, когато пишете набори от регистрационни записи при публикуване на документ, тогава режимът на управлявано заключване трябва да бъде зададен както за самия регистър, така и за документа, тъй като записването на набори от регистрационни записи ще се извършва в транзакцията се отваря при писане на документа.

Механизъм за управление на заключването на даннив транзакция ви позволява да заключите променливи данни не чрез използваната система за управление на база данни, а чрез платформата. Такова управление на заключването на данни се извършва не по отношение на данните от СУБД, а по отношение на предметната област. Благодарение на това заключванията се прилагат по-точно и едновременността на потребителите се увеличава.

Конфигурация 1C:Enterprise 8 може да работи в един от трите режима за управление на заключвания в транзакция:

  • Автоматичен;
  • управляван - стандартен режим за нови конфигурации;
  • автоматичен и контролиран.

IN автоматичен режимУправлението на заключването на данни използва нивата на изолация на транзакциите за повторяемо четене и сериализиране, предоставени от системата за управление на базата данни. Тези нива на изолация на транзакциите гарантират последователно и последователно четене на данни, без да се изискват допълнителни усилия за управление на заключването от разработчика.

Управляван режимви позволява да увеличите паралелността на работата на потребителя в режим на работа клиент-сървър, като използвате по-ниско ниво на изолация на транзакция на базата данни (Read Committed). Когато записвате данни в транзакция, вградените езикови обекти автоматично заключват необходимите данни. Разработчикът трябва да управлява заключванията на данни в случаите, когато бизнес логиката изисква последователно и последователно четене на данни в транзакция.

Автоматично и контролиранорежимът ви позволява да използвате възможността за управление на заключвания в транзакция само за някои конфигурационни обекти. Този режим може да се използва за оптимизиране на паралелността на потребителите с отделни обекти на приложение (например няколко от най-интензивно използваните документи) или за постепенно прехвърляне на големи конфигурации към режим на управление на заключване на транзакции.

В обобщение разликите при работа в режим на автоматично блокиране и в режим на контролирано блокиране са показани в следната таблица:

Най-често необходимостта от управление на заключвания на данни в транзакция възниква в процеса на публикуване на документи, когато трябва да прочетете и след това да запишете променени данни в същите таблици. Например, ако следите салда при осчетоводяване на документ.

Специално за тази цел набори от записи на регистри за натрупване и счетоводни регистри имат свойството BlockForChange.

Ако трябва да контролирате салдата и след това да записвате движения в същия регистър, тогава това свойство трябва да бъде зададено за набора от записи на този регистър в имота Движения.

Ефектът от това свойство е същият, както ако разработчикът самостоятелно е инсталирал (предписан в код) необходимите управлявани ключалки за 1C:Enterprise 8. Платформата ще инсталира автоматично необходимото управлявано заключване, когато записва този набор от записи. В резултат на това други управлявани транзакции, използващи същата ключалка, няма да могат да започнат да четат този регистър, докато текущата транзакция не приключи.

По-долу е даден пример за "ръчно" управление на заключванията на данни при четене на данни от регистрите за натрупване Счетоводно отчитане на артикулипри обработка на документи Фактура. В този пример управляваните ключалки се създават и задават изцяло с помощта на вградения език.

Механизъм заключвания на транзакцииизползвани за конкурентен потребителски достъп до СУБД.
Транзакцията е вид непрекъсната операция, по време на която състоянието на базата данни се променя. Това е минималното количество промяна: не можете да направите половин транзакция; ако транзакцията не завърши, базата данни ще бъде върната до първоначалното си състояние.
Тъй като транзакцията улавя масив от данни, възниква нюанс при достъпа до този масив: например една транзакция променя данните, а друга се опитва да ги прочете. Резултатът от четенето може да е неправилен, т.к няма да включва най-новите промени. Следователно изолацията на транзакции работи на ниво СУБД. Възможни са следните нива на изолация:

  • Прочетете без ангажименти- докато една транзакция променя масива, друга не може да го промени, но може да го прочете. Най-ниско ниво на изолация.
  • Прочетете ангажирани- докато една транзакция променя масива, друга не може да го промени или прочете
  • Повторно четене- докато една транзакция чете масива, друга не може да го промени, но може да го прочете
  • Може да се сериализира- докато една транзакция чете масива, друга не може да го промени или прочете. Всички операции са последователни. Максимално ниво на изолация.

Ако конфигурацията на 1C:Enterprise е настроена на автоматичен режим на заключване, тогава нивото на изолация на транзакцията се избира от СУБД. В случая на MS SQL, това ще бъдат нивата на повторяемо четене или сериализуемо, тоест изолацията на данните е близка до максимума. Това решава проблеми с коректността на данните, но може да доведе до блокиране на ниво СУБД при интензивна работа на потребителя. Следователно 1C:Enterprise има собствена функционалност за работа с ключалки, която се активира чрез активиране на режима на управлявани ключалки. В този случай нивото на изолация на транзакцията за MS SQL ще бъде ангажирано за четене. Самата платформа ще изолира данните, без да разчита на СУБД.

Режимът на управлявано заключване е активиран в свойствата на конфигурацията:

Освен това режимът на заключване може да бъде зададен за конкретни конфигурационни обекти:

Ако конфигурацията като цяло е настроена на автоматичен режим на заключване, тогава всички транзакции за всички регистри ще работят в автоматичен режим, независимо от режима, зададен за конфигурационния обект. Ако се управлява, тогава по подобен начин всички транзакции ще бъдат в управляван. Ако режимът на конфигурация е зададен на Автоматичен и контролиран, тогава режимът за всеки обект ще се определя от неговите настройки.

Има една точка за автоматичен и контролиран режим. Една транзакция за потребител може да представлява няколко транзакции от гледна точка на платформата. Например, интерактивното осчетоводяване на документ в регистър прави дветранзакции - запис на самия документ, а в рамките на тази транзакция запис на набор от редове по регистър. В зависимост от режима на управление на заключването за самия документ и регистъра, който премества, са възможни четири ситуации:

  1. Режим на документ Автоматичен, режим на регистриране Автоматичен ->
  2. Режим на документи Управляван, режим на регистър Управляван -> запис по регистър в управляван режим
  3. Режим на документ Автоматичен, регистрационен режим Контролиран -> запис по регистър в автоматичен режим
  4. Режим на документи Управляван, режим на регистриране Автоматичен -> изключение (грешка)

Въпрос 06.59 от изпита 1C: Platform Professional. Когато публикувате документ през който и да е регистър, ако документът има автоматичен режим на управление на заключване на транзакция и регистърът има управляван режим (опцията „Автоматично и управлявано“ се използва в свойствата на конфигурацията), тогава такова публикуване ще доведе до:

Верният отговор е вторият, определяме го от първата транзакция, ако е автоматичен, значи всичко е автоматично.

Въпрос 06.60 от изпита 1C: Platform Professional. Когато публикувате документ през който и да е регистър, ако документът има управляван режим за управление на заключвания на транзакции, а регистърът има автоматичен (в свойствата на конфигурацията се използва опцията „Автоматично и управлявано“), тогава такова публикуване ще доведе до:

  1. до ситуация на грешка
  2. цялата транзакция ще бъде завършена автоматично
  3. цялата сделка ще бъде завършена по контролиран начин

Правилният отговор е първият, определяме по първата транзакция, ако е контролирана, значи е грешка.

Въпрос 06.61 от изпита 1C: Platform Professional. Когато публикувате документ през който и да е регистър, ако документът има автоматичен режим за управление на заключвания на транзакции, а регистърът има управляван режим (опцията „Управляван“ се използва в свойствата на конфигурацията), тогава такова публикуване ще доведе до:

  1. до ситуация на грешка
  2. цялата транзакция ще бъде завършена автоматично
  3. цялата сделка ще бъде завършена по контролиран начин


 

Може да е полезно да прочетете: