Ошибка использования менеджера блокировок. Управление транзакционными блокировками

Основные причины перехода на управляемые блокировки:

  • Основная причина - рекомендация 1С:Эксперта на основании показаний или 1С:ЦУП
  • Проблемы с параллельной работой пользователей ()
  • Использование Oracle, PostgreSQL и .

Стоимость работ:

Суть управляемых блокировок

При работе в автоматическом режиме управления блокировкой 1С:Предприятие устанавливает высокую степень изоляции данных в транзакции на уровне СУБД. Это позволяет полностью исключить возможность получения не целостных или некорректных данных без каких-либо специальных усилий со стороны прикладных разработчиков.

Это удобный и правильный подход при небольшом количестве активных пользователей. Цена простоты разработки - некоторое количество избыточных блокировки на уровне СУБД. Эти блокировки связанны как с особенностями реализации механизмов блокировок в самой СУБД, так и с тем, что СУБД не может учитывать (и не учитывает) физический смысл и структуру объектов метаданных 1С:Предприятия.

При работе с высокой конкуренцией за ресурсы (большое количество пользователей) в какой-то момент влияние избыточности блокировок становиться заметным с точки зрения производительности при параллельном режиме.

После перевода конфигурации в управляемый режим в платформе активизуруется дополнительный функционал «менеджера блокировок» и контроль за целостностью данных осуществляется теперь не на стороне СУБД, а на стороне сервера 1С. Это увеличивает нагрузку на железо сервера 1С (нужны быстрее процессоры и больше памяти), и фактически вносит даже небольшое замедление (несколько процентов), однако куда существенней улучшает ситуацию с блокировками (меньше блокировок за счет блокировок на объект, а не на комбинацию таблиц, меньше область блокирования и в некоторых случаях меньше время жизни блокировок на чтение, т.е. не до конца транзакции). За счет этого общая параллельность улучшается.


Новые конфигурации фирмы 1С реализованы сразу в управляемом режиме.

  • Вопрос: Можно ли сначала сделать аудит, а потом перевод на УБ?

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

  • Вопрос: Для перевода на УБ, какой именно нужно предоставить доступ — RDP, TeamViewer ? Или можно вам выслать файл-конфигурации?

Ответ: Мы стараемся не ограничивать одной конкретной технологией удаленного доступа, годится любая технология удаленного доступа . Если для Вас не имеет значения, то практичней RDP.
Мы можем выполнить оптимизацию по высланному файлу конфигурации, но тогда не сможем отладить некоторые реальные данные и Вам придется внимательней тестировать. Если мы выполняем оптимизацию на копии базы, то мы можем тщательней протестировать, прежде чем передадим Вам результат работы.

  • Вопрос: У нас 10-ть штатных программистов, которые каждый день что-то изменяют в конфе. Используется общее хранилище конфигурации». Как будет организовано взаимодействие при переводе на УБ? Или всех программистов нужно отправлять в отпуск?

Ответ: Как правило наши изменения делаются в течении пары дней. Остальное время приходится на тестирование внесенных изменений, в том числе с точки зрения требуемой логики определяемой бизнесом а не техническими соображениями. Мы можем внести изменения в отдельный файл конфигурации cf , а затем Ваш программист внесет в хранилище. В отпуск ни кого отправлять не придется . В других вариантах взаимодействия надо просто договорится какие объекты планируют захватить Ваши разработчики, чтобы мы выстроили план работ, удобный обеим сторонам. Как правило целиком конфигурацию захватить Вашим разработчикам не требуется, либо отдадите на день нам «руль».

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

Конфигурация 1С:Предприятия 8 может работать в одном из трех режимов управления блокировками в транзакции:

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

В автоматическом режиме управления блокировками данных используются уровни изоляции транзакций repeatable read и serializable, обеспечиваемые системой управления базами данных. Эти уровни изоляции транзакций обеспечивают согласованное и целостное чтение данных, и от разработчика не требуется каких-либо дополнительных действий по управлению блокировками.

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

Автоматический и управляемый режим позволяет использовать возможность управления блокировками в транзакции только для некоторых объектов конфигурации. Этот режим может использоваться для оптимизации параллельности работы пользователей с отдельными прикладными объектами (например, с несколькими наиболее интенсивно используемыми документами) или для постепенного перевода больших конфигураций в режим управления блокировками в транзакции.

В сводном виде отличия при работе в режиме автоматических блокировок и в режиме управляемых блокировок приведены в следующей таблице:

Наиболее часто необходимость в управлении блокировками данных в транзакции возникает в процессе проведения документов, когда нужно прочитать, а затем записать измененные данные в те же самые таблицы. Например, если выполняется контроль остатков при проведении документа.

Специально для этого у наборов записей регистров накопления и регистров бухгалтерии существует свойство БлокироватьДляИзменения .

Если нужно контролировать остатки, а затем записывать движения в этот же регистр, то это свойство нужно установить для набора записей этого регистра в свойстве Движения .

Действие этого свойства аналогично тому, как если бы разработчик самостоятельно установил (прописал в коде) нужные управляемые блокировки 1С:Предприятия 8. Необходимую управляемую блокировку платформа установит автоматически при записи этого набора записей. В результате другие управляемые транзакции, использующие аналогичную блокировку, не смогут начать читать этот регистр, пока не закончится текущая транзакция.

Ниже приведен пример "ручного" управления блокировками данных при чтении данных регистра накопления УчетНоменклатуры в обработке проведения документа РасходнаяНакладная . В этом примере управляемые блокировки создаются и устанавливаются полностью только средствами встроенного языка.

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

  • Read uncommited - пока одна транзакция меняет массив, другая не может его менять, но может читать. Низший уровень изоляции.
  • Read commited - пока одна транзакция меняет массив, другая не может его ни менять, ни читать
  • Repeatable read - пока одна транзакция читает массив, другая не может его менять, но может прочесть
  • Serialaizable - пока одна транзакция читает массив, другая не может его ни менять, ни читать. Все операции последовательны. Максимальный уровень изоляции.

Если для конфигурации 1С:Предприятия установлен режим автоматических блокировок , то уровень изоляции транзакции выбирается СУБД. В случае с MS SQL, это будет Repeatable read или Serializable уровни, то есть изоляция данных близка к максимальной. Это решает проблемы с корректностью данных, но может приводить к появлению блокировок на уровне СУБД при интенсивной работе пользователей. Поэтому, в 1С:Предприятии есть свой функционал работы с блокировками, который активизируется включением режима управляемых блокировок. В этом случае уровень изоляции транзакций для MS SQL будет Read commited. Платформа сама будет изолировать данные, не полагаясь на СУБД.

Включение режима управляемых блокировок происходит в свойствах конфигурации:

Также, режим блокировок может быть установлен для конкретных объектов конфигурации:

В случае, если для конфигурации в целом установлен Автоматический режим блокировок, то все транзакции по всем регистрам будут работать именно в автоматическом режиме, безотносительно того режима, что выставлен для объекта конфигурации. Если Управляемый - то аналогично, все транзакции будут в управляемом. Если же для конфигурации выставлен режим Автоматический и управляемый, то режим для каждого объекта будет определяться его настройками.

Для режима Автоматический и управляемый есть один момент. Транзакция, единая для пользователя может представлять собой несколько транзакций с точки зрения платформы. Например, интерактивное проведение документа по регистру делает две транзакции - запись самого документа, и внутри этой транзакции запись набора строк по регистру. В зависимости от режима управления блокировками для самого документа и двигаемого им регистра, возможны четыре ситуации:

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

Вопрос 06.59 экзамена 1С:Профессионал по платформе. При проведении документа по какому-либо регистру в случае если у документа установлен автоматический режим управления транзакционными блокировками, а у регистра управляемый (в свойствах конфигурации используется вариант "Автоматический и управляемый"), то такое проведение приведет:

Правильный ответ второй, определяем по первой транзакции, если автоматическая, то все автоматически.

Вопрос 06.60 экзамена 1С:Профессионал по платформе. При проведении документа по какому-либо регистру в случае если у документа установлен управляемый режим управления транзакционными блокировками, а у регистра автоматический (в свойствах конфигурации используется вариант "Автоматический и управляемый"), то такое проведение приведет:

  1. к возникновению ошибочной ситуации
  2. вся транзакция будет выполнена в автоматическом режиме
  3. вся транзакция будет выполнена в управляемом режиме

Правильный ответ первый, определяем по первой транзакции, если управляемая, то ошибка.

Вопрос 06.61 экзамена 1С:Профессионал по платформе. При проведении документа по какому-либо регистру в случае если у документа установлен автоматический режим управления транзакционными блокировками, а у регистра управляемый (в свойствах конфигурации используется вариант "Управляемый"), то такое проведение приведет:

  1. к возникновению ошибочной ситуации
  2. вся транзакция будет выполнена в автоматическом режиме
  3. вся транзакция будет выполнена в управляемом режиме