Работаем удаленно и с выездом
Наши филиалыМоскваЯрославль
АВТОМАТИЗАЦИЯ, ВНЕДРЕНИЕ, СОПРОВОЖДЕНИЕ

Причины, которые вызывают взаимоблокировки в 1С

Избежать досадных зависаний в системе 1С позволяет правильная настройка СУБД. Зависания — это не просто дискомфорт. Они способны серьёзно помешать нормальной работе крупных организаций, где за одно и то же время обращаются сразу к нужной информации различные сотрудники. И это способно повлечь за собой взаимоблокировки.

Как возникает проблема зависаний 1С?

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

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

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

Взаимоблокировки (программа 1С зависла) и решение проблемы

Ниже описаны стандартные проблемы взаимоблокировок и решение данной проблемы. Если вы столкнулись с чем-то другим, обращайтесь к администраторам.

Несоответствующий уровень блокировки ресурса

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

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

Захват ресурсов 1С. Произвольная последовательность

Проблема в данном случае сводится к тому, что различные ресурсы блокируются разными транзакциями в произвольном порядке. Их общее число способно оказаться произвольным. 2 транзакции могут проходить синхронно, причём второе действие будет для документов вне доступа.

К примеру: есть документы 17 и 18. И если они одновременно двигаются по регистрам, хотя и в разной последовательности, то они взаимно заблокируют друг друга по строчке регистра. В итоге появится зависание на ожидание.

В этом случае возникает потребность в блокировке в одной последовательности. Оптимальный способ решения задачи — установка блокировки в нужном порядке прямо в коде.

Ошибка блокировок 1С при работе СУБД

Проблема 1. Утрата параллельности процесса.

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

Что делать, чтобы не сталкиваться с такой проблемой? Нужно заранее убедиться в том, что ресурс может быть предоставлен. У СУБД есть такой параметр как max degree of parallelism. Там автоматически установлена цифра 0. Если этот параметр установить на «1», то в этом случае проблем с параллельностью процессов не будет.

Проблема 2. План запроса с избыточными блокировками

Когда в системе возникает сложный запрос, СУБД способен внести в план запроса погрешность. Это касается запроса, блокирующего «лишние» ресурсы. В итоге появляется взаимная блокировка. Также риск ошибки возникает при обращении к опции «Для изменения», когда активен автоматический режим блокировок, причём всех.

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

Неоптимальные запросы

Иногда для появления проблемы достаточно, чтобы запрос был неоптимальным. Например, если вы хотите отобрать в виртуальной записи таблицы с указанием «ЧТО». В этом случае система обращается ко всем записям, а только потом уже происходит отбор, что вызывает блокировку.

Нужно не пользоваться полем «Регистратор». Запрос с его применением будет обращаться ко всем таблицам одновременно. Чтобы оптимизировать работу, нужно перестать пользоваться уникальным кодом или сократить объём хранимых данных.

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

Условия по неиндексируемым полям

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

Нужно провести индексацию полей, которые включают в себя довольно большое количество значений. И каждому условию необходимо присвоить оптимальный индекс. В начале — указать все поля, что перечислены в условии. При некорректном составлении индексов СУБД при запросе способен начать сканировать всю таблицу. Срок осуществления запроса существенно уменьшится. Это способно повлечь за собой блокировку набора записей.

Помощь в решении проблем в работе 1С

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

Получить помощь в решение проблем в работе 1С