Ошибка 1с ошибка блокировки данных

Обновлено: 07.07.2024

Просьба соблюдать формат и дословно приводить текст ошибки.

Ошибка блокировки при транзакциях

Microsoft OLE DB Provider for SQL Server: Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.

HRESULT=80004005, SQLSTATE=40001, native=1205

Возникает при конфликте транзакций, часто при записи объектов.

Ошибка блокировки при транзакциях 2

Microsoft OLE DB Provider for SQL Server: Lock request time out period exceeded.

HRESULT=80040E31, SQLSTATE=HYT00, native=1222


Более 256 таблиц в запросе

Ошибка выполнения запроса "Построенный запрос к СУБД использует слишком много таблиц. Допустимо не более 256."

Когда в запросе идет обращение более, чем к 256 таблицам.

Если эта ошибка возникает во внешнем соединении 1С:Предприятия, то это означает отсутствие соответствующих прав у пользователя того приложения, которое обратилось к внешнему соединению. Это может быть любое интерактивное приложение или, например, WEB-сервер. В частности, если в качестве WEB-сервера используется Microsoft Internet Information Services, то таким пользователем может быть пользователь IUSR_<Имя компьютера> или ASPNET.

Методика настройки прав доступа пользователей к COM+ серверу описана в разделах "Вопросы установки и настройки 1C:Предприятия 8.0 в варианте "клиент-сервер"" и "Особенности использования внешнего соединения 1С:Предприятия в WEB-приложениях".
(С) ИТС

Ошибка 80010108
Может возникнуть в том случае, если клиентское приложение некоторое время (несколько минут) находилась в неактивном состоянии, например из-за засыпания компьютера или долгого ожидания на точке останова в отладчике. Причиной этого является особенность механизма DCOM, обеспечивающего принудительный разрыв соединения с сервером, если клиент долго не проявлял активность.
(C) ИТС

Ошибка 80010005
Может возникнуть в клиентском приложении в процессе обращения к серверу 1С:Предприятия, если при перерисовке экрана клиентское приложение обратилось к серверу 1С:Предприятия повторно. Это может быть проявлением внутренней ошибки клиентского приложения 1С:Предприятия. Для ее оперативного исправления желательно описать обстоятельства ее возниконовения и обратиться на линию технической поддержки 1С:Предприятия 8.0.
(C) ИТС

Ошибки 800706BA, 800706BE
Сигнализируют об аварийной ситуации на сервере 1С:Предприятия, которая привела к его автоматическому перезапуску.
(С) ИТС

1. Переименуйте каталог %SystemRoot%\System32\Clbcatq.dll в %SystemRoot%\System32\

Ошибка при вызове метода контекста (Записать): Операция не выполнена!

Возникает, если в модуле записи/проведения присвоить Отказ=истина

Ошибка преобразования данных XML

возникает при рассинхронизации структуры данных (конфигурации) между узлами распределенной базы

В базе нет пользователя с административными правами
При редактировании списка пользователей роли берутся только из конфигурации БД. Обновить конфигурацию БД (F7).

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

Клиентский поток исполняется на сервере. Удалить клиента веременно невозможно
v8: Клиентский поток исполняется на сервере. Удалить клиента веременно невозмож

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

Ошибка SDBL: Поля 'CAST (Q_000_T_001/Recorder AS REF(Document4055)/Fld4092' и 'CAST (Q_000_T_001/Recorder AS REF(Document123)/Fld2322' не совместимы по типам.(pos=10173)

В документах "Приходный кассовый ордер" и "Расходный кассовый ордер" реквизит "Основание" имеет в свойстве "Неограниченная длина" включенный флаг , надо снимать флаг и указать длину этого реквизита

Юрий Сухарев

Мой опыт подсказывает, что вы – пользователь (не системный администратор и не программист*), а ваша информационная база – файловая (если база SQL, вашей проблемой уже занимаются специалисты). Для начала надо понять, в какой папке (каталоге) она расположена и удалить в этой папке один файл — 1Сv8.cdn (файл можно не сохранять, он больше не понадобится).

*Если вы ИТ-специалист, можете смело переходить к чтению раздела «Блокировка и снятие блокировки с информационной базы 1С».

В окне со списком информационных баз найдите свою базу (цифра 1 на иллюстрации ниже) и нажмите на нее один (и только один!) раз мышкой. Затем нажмите кнопку «Изменить» (цифра 2).

В списке может быть только одна база, поэтому это окно вам может быть знакомо как «окно запуска 1С». В этом случае просто нажмите кнопку «Изменить».

Если вы видите, что информационная база расположена на данном компьютере или в локальной сети — мой опыт не подвел – база файловая, и мы все делаем правильно. Скопируйте этот путь (цифры 3 и 4).

Теперь зайдите в эту папку.

На всякий случай, вот несколько вариантов запуска Проводника:

  • У вас Windows XP или Windows 7. Нажмите Пуск, Выполнить, вставьте ранее скопированное расположение информационной базы. Откроется Проводник.
  • У вас Windows 7. Но пункта «Выполнить» нет. Вставляйте расположение сразу после нажатия Пуск. Откроется Проводник.
  • У вас Windows 8 или Windows 10. Нажмите Пуск, в правом верхнем углу нажмите на Лупу, вставьте ранее скопированное расположение информационной базы, нажмите Enter. Откроется Проводник.
  • Найдите на панели задач желтую дискету и нажмите на нее. Вставьте расположение информационной базы в адресную строку в верхней части окна Проводника. (Правой кнопкой мыши на адресную строку, Изменить адрес, правой кнопкой еще раз на адресную строку, Вставить).
  • Универсальный способ для всех версий Windows и ее настроек. Нажмите на клавиатуре кнопку с флажком и, не отпуская ее, нажмите на клавиатуре латинскую R (или русскую К). Откроется окно «Выполнить», вставьте туда ранее скопированное расположение информационной базы и нажмите ОК.

Воспользовавшись одним из предложенных вариантов, вы попадете в окно проводника с расположением информационной базы.

Рис.5 Окно проводника с расположением информационной базы

Рис.5 Окно проводника с расположением информационной базы

В окне проводника найдите в списке файлов файл 1Сv8.cdn, нажмите на нем правой кнопкой мыши, выберите «Удалить», как показано на предыдущем рисунке.

Готово! Ваша «1С:Бухгалтерия» или «1С:Зарплата и управление персоналом» или «1С:Управление торговлей» снова запускаются.

Блокировка и снятие блокировки с информационной базы 1С. Разрушаем мифы.

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

Как установить блокировку?

Механизм блокировки информационной базы предназначен для завершения текущих открытых сеансов и предотвращения новых подключений. Расположение функционала блокировки в меню может различаться в зависимости от конфигурации. Например, в УТ, редакция 11 (11.3.3.163) это НСИ и администрирование, [Сервис] Блокировка работы пользователей. Альтернативный вариант: НСИ и администрирование, Поддержка и обслуживание, Блокировка работы пользователей. В УТ, редакция 10.3 (10.3.21.2) это Сервис, Пользователи, Блокировка установки соединений с информационной базой.

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

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

Параметр «Время начала» рекомендуется установить как текущая дата/время + время, необходимое пользователям на подготовку к выходу с сохранением редактируемых документов. Например, сейчас 9 ч 50 мин, даем 10 минут пользователям для сохранения их результатов. Итого время начала блокировки должно быть 10 ч 00 мин.

Время конца – можно не вводить, при этом блокировка объекта будет установлена бессрочно (навечно).

Код для разблокировки – однократный «пароль» на запуск «с нуля», вопреки установленной блокировке, который может понадобиться в некоторых случаях (будет сказано далее). Вводить и запоминать обязательно. Этот параметр в случае SQL-варианта информационной базы виден в оснастке «Администрирование серверов 1С предприятия» и называется там «Код разрешения».

В случае SQL-варианта информационной базы дополнительно потребуется авторизация администратора информационной базы или администратора кластера.

Итак, после нажатия кнопки «Установить блокировку» и положительного ответа на подтверждение…

…вы вернетесь в предыдущее диалоговое окно, внешний вид которого изменился:

Запланирована? Быть может это как-то связано с регламентными заданиями?

Сработает ли запланированная блокировка работы пользователей, если установлена блокировка регламентных заданий? Да, сработает. Механизм блокировки не использует регламентные задания.

Что увидят пользователи и я сам?

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

Рис.12 Предупреждение для пользователей о запланированной блокировке

Рис.12 Предупреждение для пользователей о запланированной блокировке

Бомба взрывается точно в назначенное время. Сирена воет до взрыва.

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

Не составляют исключения режимы ввода справочных значений, при которых введено значение, отсутствующее в справочнике – выйти из режима ввода нельзя (например, закрыть 1С крестиком), но это не помешает завершить работу. Более значительный интерес представляет режим модального диалога, поэтому о нем будет сказано подробнее.

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

А точно взорвется?

Для начала отметим, что в старых конфигурациях может не сработать блокировка для инициатора блокировки. А теперь перейдем к рассмотрению вопроса для платформы 8.3.

И это не единственная причина, по которой блокировка может не сработать (cм. далее разделы «По чьим часам?» и «А как же мои пользователи во Владивостоке?»).

Модальный диалог в SQL-варианте информационной базы на управляемых формах

Модальный диалог в SQL-варианте информационной базы на обычных формах

Сеансы пользователей завершаются.

Сработает ли блокировка, если установить блокировку и закрыть диалог?

Сработает ли блокировка, если установить блокировку и сразу выйти из 1С (т.е. завершить сеанс 1С до начала действия блокировки)?

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

По чьим часам сработает блокировка, если время на компьютерах немного отличается?

Проблема рассинхронизации часов

При файловой ИБ каждый компьютер сам проверяет, имеется ли в ИБ установленный временной диапазон блокировки, и сравнивает его со своими локальными часами. От точности своих часов зависит, сможет ли данный компьютер осуществить завершение сеанса точно в нужное время. Если база блокируется с 10:00, для одного компьютера этот момент наступит раньше, а для другого – позже.

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

Кажется, что речь может идти о секундах, в крайнем случае, минутах. Но на самом деле, на компьютере может быть, например, не установлено обновление операционной системы, поддерживающее переход на сезонное (зимнее/летнее) время, и ошибка уже может составлять не секунды, а часы. Легко провести такой эксперимент: запланируйте блокировку на 10 утра длительностью полчаса, а на одном из компьютеров переведите время на час вперед – блокировка на него не подействует.

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

А как же мои пользователи во Владивостоке?

Проблема абсолютного времени при пользователях из разных часовых поясов

Временной диапазон блокировки сохраняется в информационной базе. Посмотрите на содержимое блокировочного файла 1Сv8.cdn (который создается в файловом варианте ИБ), в нем записано время начала блокировки 17.07.2017 13:59 в формате ГГГГММДДЧЧММСС без какого-либо указания на часовой пояс:

Без указания на часовой пояс было бы понятно, о каком абсолютном времени идет речь, если время всегда относилось бы к какому-то конкретному часовому поясу, например UTC+0. Но в базе сохраняется локальное время по часам компьютера, который являлся инициатором блокировки. Из какого часового пояса был этот компьютер – неизвестно, а значит неизвестно абсолютное время блокировки.

Если в Москве, в централизованной ИБ, вы устанавливаете блокировку в 13:59, и этот момент времени для московских пользователей находится в будущем, то у пользователей этой же ИБ во Владивостоке 13:59 было 7 часов назад. И в зависимости от технического решения, в соответствии с которым осуществляется работа с ИБ пользователей Владивостока, блокировка этих пользователей либо сработает, либо нет.

Какие могут быть технические решения, в которых блокировка будет работать неправильно для пользователей Владивостока? Те, при которых клиентская часть 1С получит время по Владивостоку, а не по Москве. Например, офисы связаны в локальную сеть по VPN, а клиентская часть 1С запускается с локального компьютера, имея время UTC+10. Но если они работают с базой через RDP-соединение или в режиме RemoteApp на московском сервере, запуская на этом сервере клиентскую часть 1С – все будет хорошо, т.к. она будет иметь время UTC+3.

Имеется ли проблемы рассинхронизации часов и часового пояса в случае SQL-варианта информационной базы?

Нет. В данном варианте есть «часы сервера», которые принимаются за эталон.

Выкинет ли меня из Конфигуратора, если я был в нем, а блокировка начала действовать?

Можно ли будет зайти в Конфигуратор после начала действия блокировки?

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

Как снять блокировку?

В том же диалоге, в котором блокировка устанавливалась. Напоминаем, что после установки блокировки в нем вместо кнопки «Установить блокировку» кнопка «Снять блокировку».

В случае SQL-варианта ИБ снятие блокировки возможно также в оснастке «Администрирование серверов предприятия 1С». (см. далее)

Для чего нужен код разблокировки?

Для входа в ИБ в тот момент, когда действует блокировка. Ситуации, в которых это необходимо:

  • После установки блокировки был завершен сеанс работы с ИБ (вручную или в результате действия блокировки на самого инициатора), и требуется начать новый сеанс;
  • Время окончания блокировки по ошибке было не заполнено вообще;
  • Время окончания блокировки было заполнено ошибочно (например, был нечаянно введен следующий месяц или год);
  • Информационная база в SQL-варианте, и для отмены неверно установленной блокировки невозможно удалить файл 1Сv8.cdn в каталоге информационной базы.

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

ENTERPRISE /F"Z:\Обмен\УТ 11" /CРазрешитьРаботуПользователей /UC12345

… с учетом каталога расположения и кода разблокировки.

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

Что делать, если я не устанавливал блокировку, а SQL-база кем-то заблокирована? При этом я не знаю код разблокировки.

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

Где ее искать?

Оснастка «Администрирование серверов 1С:Предприятия» часто установлена на том же сервере, где развернут SQL server, а также где развернут сам «Сервер 1С» (или «Сервер приложений 1С»). Хотя это и не обязательно: SQL может быть установлен на одном компьютере, «Сервер приложений 1С» – на другом, а оснастку можно развернуть и на своей рабочей станции. С большой вероятностью успеха можно достигнуть, сделав следующее:

  • Подключитесь по RDP к серверу, который указан в строке Srvr=… используя свой доменный логин и пароль. При невозможности подключения попросите системного администратора добавить вас в группу пользователей удаленного рабочего стола. (В случае отказа в таких правах – разверните и настройте на рабочей станции оснастку «Администрирование серверов предприятия 1С»);
  • На сервере найдите оснастку «Администрирование серверов 1С:Предприятия»;
  • Запустите оснастку, разверните дерево до узла с вашей информационной базой;
  • В свойствах информационной базы снимите чекбокс «Блокировка начала сеансов включена» или исправьте время начала и конца блокировки или посмотрите «код разрешения» для входа в ИБ (он же «код для разблокировки» в диалоге установки блокировки).

Что делать, если все пользователи информационной базы SQL вышли, а запустить Конфигуратор по-прежнему нельзя, т.к. имеются активные пользователи?

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

Это далеко не все вопросы, связанные с темой блокировки информационной базы.

Если у вас остались вопросы:

  • Можно ли работать по московскому времени, если вы арендуете сервер в Европе и не хотите зависеть от его часового пояса?
  • Как найти Сервер приложений 1С, если неизвестно, где он установлен?
  • Как развернуть оснастку «Администрирование серверов 1С:Предприятия» и как ее настроить?
  • Если в одной локальной сети несколько серверов приложений, как быть?
  • Как быть в случае кластерной системы? и т.д.

. наши сертифицированные консультанты по технологическим вопросам 1С с удовольствием на них ответят и предоставят консультации по вопросам 1С:Предприятие.

Анна Викулина

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

Конфликт блокировок в 1С 8.3 и его значение

Причины возникновения ошибок блокировки в 1С

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

Если не брать идеальные варианты, то конфликты блокировок 1С встречаются по следующим причинам:

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

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

  • Неоптимальные запросы;
  • Запрос остатков в начале действий;
  • Непонимание предназначения объектов конфигурации и их неправильное применение;
  • Избыточность заложенных в системе или дополнительно разработанных блокировок.

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

Рис.2 Перевод на ручной режим управления блокировками

Рис.2 Перевод на ручной режим управления блокировками

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

Быстрое решение конфликта блокировок 1С

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

Для быстрого решения проблемы существуют два пути:

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

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

Количество пользователей нашей основной базы данных активно увеличивается за счет слияния второстепенных баз. Динамика примерно такая: 2020 – 150, 2021 – 300, 2022 – 500 (план). Поэтому оптимизация и быстродействие для нас важны: при увеличении числа пользователей проблемы растут нелинейно. Одно время даже хотели заключить договор ЦКТП, но пока справляемся своими силами.

Был один случай..

.. участились ошибки блокировки СУБД.



Анализ типов блокировок на сервере СУБД (за пол-дня). Ожидания LCK _ M _ X , LCK _ M _ U занимают доминирующие позиции.


Что делать ?

3-4 Поиск блокировок по dmv

4-5 Причина блокировок - отсутствует подходящий индекс

5-8 План запроса, поиск запроса в 1С, используя logcfg

10-12 Заключение, контакты

Решил посмотреть в СУБД. В ован запрос

представление sys.dm_exec_requests п оказывает выполняемые запросы в реальном времени, оно содержит поле blocking_session_id которое указывает на блокирующую сессию. (Доступна

Как я уже говорил, у нас большая компания с развитой инфраструктурой. Физически невозможно иметь доступ ко всем серверам компании. Получение информации с сервера целевой СУБД — через системного администратора. Поэтому просматривать состояние базы данных в реальном времени с помощью динамических представлений было неудобно. Мы не знали - в какой момент происходит блокировка. Договорились, что системный администратор соберет extended events по описанию (Спасибо, Юрий Пермитин) но напрямую задачу решить не удалось — события блокировок в СУБД происходят настолько часто, что производительность сервера упала. Составил более подробное описание, с фильтрами по длительности.

События lock_timeout, фрагменты sql_text

1. DELETE FROM T1 FROM dbo._InfoRg18447 T1 WHERE (T1._Fld18454RRef = @P1) AND (T1._Fld1420 = @P2)

С помощью функции ПолучитьСтруктуруБазыДанных() нашел имя регистра и имя поля. Как вы догадываетесь, индекс поля отсутствует. Очень похоже на ситуацию из видео на минуте 7. Для поля поставил значение «индексировать», флаг «ведущее» использовать не стал: могут быть пустые значения. Кстати, до добавления индекса события lock_deadlock на таблице dbo._InfoRg18447 тоже происходили. Причина блокировок СУБД подробно описана в видео: отсутствует индекс, происходит сканирование (с захватом) всей таблицы в режиме исключительной блокировки. При этом управляемые блокировки не учитывают план запроса, блокируют по значениям конкретных полей, конфликта между ними не происходит.

2. UPDATE T1 SET _Description = @P1, …. FROM dbo._ScheduledJobs31390 T1 WHERE T1._ID = @P15 AND T1._Version = @P16

3. Было несколько ошибок блокировок, связанных с шиной обмена Datareon . При зависании службы шины, отслеживаемые события в 1С не записывались, создавали lock_timeout. Эта ситуация была исправлена без моего участия.

События lock_escalation

Иногда происходит эскалация при работе с ценами по регистру «Цены номенклатуры» и табличной части документа «Установка цен». Документы больше 5000 строк табличной части, решение этой проблемы лежит в области организации процессов.

Итоги работы

Стало заметно лучше. Ниже анализ ожиданий на сервере СУБД за неделю, суммарная длительность ожиданий LCK _ M _ X , LCK _ M _ U составляет 18 минут, до начала работ суммарная длительность ожиданий могла быть до 2 часов в день.


P.S. Чтобы счастье было полным

настроил технологический журнал для dbmslocks (важно, что события собираются без отборов).

Есть один способ эффективно находить информацию на сайте ITS.



lka=‘1’ поток является источником блокировки.

lkp=‘1’ поток является жертвой блокировки.

lkpid номер запроса к СУБД, «кто кого заблокировал» (только для потока-жертвы блокировки).

lkaid список номеров запросов к СУБД, «кто кого заблокировал» (только для потока-источника блокировки).

lksrc номер соединения источника блокировки, если поток является жертвой.

lkpto время в секундах, прошедшее с момента обнаружения, что поток является жертвой.

lkato время в секундах, прошедшее с момента обнаружения, что поток является источником блокировок.

Файлы по часам получились более 6 Гб, поэтому для выделения информации использовал bash:

Для строчек, содержащих lkaid / lkpid выбрать 20 строк сверху и снизу, поместить в файл. Ниже пример: два источника, одна жертва. Ожидание длилось 0,84 секунды, прежде чем команда ПланыОбмена.ЗарегистрироватьИзменения() дождалась освобождения ресурса и установила блокировку.

По предварительной оценке, на подобных ожиданиях мы теряем 1 секунду в час. Эта информация интересная, вернусь к ней позже.

Читайте также: