Книга: Настольная книга 1С:Эксперта по технологическим вопросам
Назад: 3.7.Блокировки данных СУБД. Уровни блокировок. Совместимость блокировок
Дальше: 3.9.Ошибки блокировок: таймауты и взаимоблокировки

3.8.Сведения об управляемых и объектных блокировках

В платформе «1С:Предприятие» существуют два механизма, которые называются блокировками:

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

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

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

Напротив, объектные блокировки в эту сферу не входят, но, чтобы было понятно, о чем речь, сначала уделим внимание им.

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

  1. «Не удалось заблокировать запись. Действие (изменение, удаление или блокировка записи) не выполнено».
  2. «Операция не может быть выполнена из-за несоответствия версии или отсутствия записи базы данных (возможно, запись была изменена или удалена)». Либо в последних версиях: «Данные были изменены или удалены другим пользователем».

Если один пользователь начинает модификацию объекта в форме, а другой после этого тоже попытается начать редактирование того же объекта, то понятно, что одновременное редактирование одного и того же объекта приведет к нежелательным последствиям. Поэтому расширение формы устанавливает пессимистическую блокировку, не позволяющую редактировать кем-то уже редактируемые данные. И как только второй пользователь попытается этот объект модифицировать, он получит сообщение 1.

Если теперь первый пользователь запишет изменения и закроет форму, то пессимистическая блокировка снимется. Но если другой пользователь опять попытается начать редактирование того же объекта в той же открытой ранее форме, он получит сообщение 2 – сработает оптимистическая блокировка, не позволяющая редактировать данные, измененные или удаленные за время, прошедшее с их считывания.

Названия «пессимистическая» и «оптимистическая» взялись из следующего:

Механизм транзакционных управляемых блокировок «1С» (механизм управляемых блокировок), как уже говорилось, обеспечивается своим собственным менеджером и решает вопросы, аналогичные вопросам менеджера блокировок СУБД. Точнее говоря, этот механизм позволяет при необходимости усилить изолированность транзакций, не меняя уровня изоляции в СУБД. И понятно, почему нет смысла его использовать в автоматическом режиме управления блокировками: там уровень изоляции для СУБД и так самый высокий – Serializable.

Заметим, что данных механизма объектных блокировок этот механизм при работе не видит и не принимает в расчет вообще.

Как в простейшем случае для СУБД, для управляемых блокировок «1С» выделяют два уровня: исключительный и разделяемый. Их описание, приведенное в синтакс-помощнике, отражено в таблице 3.8.1.

Таблица 3.8.1. Уровни блокировки ресурсов управляемыми блокировками «1С»

Уровень блокировки (РежимБлокировкиДанных) Описание
Разделяемый (Shared) Разделяемая блокировка позволит конкурирующему процессу установить разделяемую блокировку по этому же условию, но не позволит установить исключительную блокировку
Исключительный (Exclusive) Исключительная блокировка не позволит конкурирующему процессу установить разделяемую или исключительную блокировку по этому же условию

Совместимость уровней блокировок, приведенная в таблице 3.8.2, классическая.

Таблица 3.8.2. Совместимость уровней управляемых блокировок «1С»

Запрашиваемый уровень Уже предоставленный уровень
S X
Разделяемая (S) Да Нет
Исключительная (Х) Нет Нет

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

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

Аналогично в обратную сторону: управляемые блокировки «1С» могут быть установлены независимо от того, какие ресурсы заблокированы блокировками СУБД.

Такую рассогласованность не всегда можно игнорировать. Поэтому при выполнении некоторых операций с базой данных платформа может ставить управляемые блокировки самостоятельно.

Управляемые разделяемые блокировки устанавливаются платформой при чтении в объектной технике следующих видов объектов:

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

Платформа НЕ устанавливает блокировок при чтении в объектной технике как минимум следующих объектов:

Методика получения точной информации, какие именно управляемые блокировки установлены в каждом конкретном случае, описана в разделе 4.24 «Работа с ТЖ. Как посмотреть, какие управляемые блокировки были установлены».

Методика расследования конфликтов на управляемых блокировках описана в разделе 4.25 «Работа с ТЖ. Как расследовать конфликт на управляемых блокировках».

В заключение расскажем еще раз о режимах управления блокировкой данных. Если требуется обеспечить должное качество работы информационной системы «1С» с высокими требованиями к параллельной работе пользователей, то использование автоматического режима управления блокировкой данных является ошибкой, без устранения которой другие работы по оптимизации системы могут не иметь смысла.

При этом использование смешанного, «автоматического и управляемого» режима в таких случаях также чаще всего будет ошибкой, поскольку, как правило, основные прикладные объекты в таком переходном состоянии остаются с установленным автоматическим режимом управления блокировкой.

Назад: 3.7.Блокировки данных СУБД. Уровни блокировок. Совместимость блокировок
Дальше: 3.9.Ошибки блокировок: таймауты и взаимоблокировки