Особенности блокировок регистров при работе с 1С:Предприятием 8 в варианте клиент-сервер 

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

Технологические особенности

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

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

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

Пример

Рассмотрим этот эффект на примере работы с регистрами накопления 1С:Предприятия 8.

Имеется документ и связанные с ним два регистра накопления, в которых регистрируются движения этого документа. При проведении этого документа, в процедуре проведения, проверяются остатки по этим регистрам, и производится запись движений этого документа. В случае, если по каким-либо причинам, один из регистров не используется для записи движений в процессе проведения документа, таблица этого регистра будет пустой.
Однако, если в процессе проведения документа, по этому регистру выполняется проверка остатков с использованием конструкции языка запросов "ДЛЯ ИЗМЕНЕНИЯ", вся таблица этого регистра окажется заблокированной до окончания транзакции. Это приведет к невозможности проведения аналогичных документов другими пользователями до окончания выполнения процедуры проведения.

Следует учитывать, что при обновлении записи таблицы базы данных с использованием уровня изоляции транзакций SERIALIZABLE, в общем случае, могут быть заблокированы и соседние записи этой таблицы, находящиеся рядом в индексе. То есть, если существуют записи с идентификаторами 3 и 5 и делается попытка изменить запись с идентификатором 4, то, в общем случае, будут дополнительно заблокированы записи с идентификаторами 3 и 5. Записи с идентификаторами меньше 3 и больше 5 могут быть модифицированы. 

Следует заметить, что тестирование параллельности на пустой базе данных непоказательно, поскольку вероятность блокировок в таких условиях существенно выше. Механизм генерации идентификаторов объектов базы данных устроен таким образом, чтобы минимизировать вероятность возникновения блокировок при работе с 1С:Предприятием 8.