Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Особенности блокировок регистров при работе с 1С:Предприятием 8 в варианте клиент-сервер          
Batchir Подменю пользователя
сообщение 21.03.09, 11:16
Сообщение #1

Живет на форуме
Иконка группы
Группа: Команда
Сообщений: 3568
Из: Киев
Спасибо сказали: 1426 раз
Рейтинг: 0

Блокировки, которые использует 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.

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 28.03.24, 14:53
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!