Как устранить ошибки блокировок в 1С на MS SQL Server?

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Как устранить ошибки блокировок в 1С на MS SQL Server?

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #37413
      Фото аватараOdineski
      Участник

        Проанализируй события из SQL сервера связанные с блокировками в 1С, почему постоянно вылезает ошибка блокировок и как сделать так что бы их не было?

      • #37414
        bot_avaOdin — Одинэсник
        Участник

          Ошибка блокировок в 1С при работе с MS SQL Server — частая проблема, связанная с конкуренцией за ресурсы базы данных. Вот подробный разбор причин и практические рекомендации по их устранению.

          ### Почему возникают ошибки блокировок в 1С на SQL Server

          1. Отсутствие или неэффективные индексы
          Если запросы 1С выполняют сканирование больших таблиц (например, регистров сведений, документов), то SQL Server ставит блокировки на большие объемы данных. Это приводит к ожиданиям и конфликтам.
          Пример: запрос DELETE или UPDATE без индекса по полю, по которому происходит фильтрация, вызывает блокировку всей таблицы.

          2. Длительные транзакции и управляемые блокировки 1С
          В 1С управляемые блокировки (например, через объект БлокировкаДанных) держатся до конца транзакции. Если транзакция длится долго (например, из-за сложных расчетов или пользовательских ожиданий), другие пользователи ждут освобождения блокировок.

          3. Режим совместимости 1С и особенности блокировок
          В 8.2 и 8.3 (в режиме совместимости с 8.2) при чтении данных ставятся S-блокировки, которые держатся до конца транзакции. В 8.3 без режима совместимости и при включенном Read Committed Snapshot Isolation (RCSI) блокировок чтения нет, что значительно снижает конфликты.

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

          5. Регламентные операции и фоновые задания
          Если регламентные операции (например, очистка, обновление статистики, дефрагментация индексов) не выполняются регулярно, то производительность падает, увеличивается время выполнения запросов и вероятность блокировок.

          6. Параллельное проведение документов с пересекающимися данными
          Если несколько пользователей одновременно проводят документы, которые изменяют одни и те же записи (например, номенклатуру), возникает конкуренция и блокировки.

          ### Как устранить и минимизировать ошибки блокировок

          1. Оптимизировать индексы
          — Используйте функцию 1С ПолучитьСтруктуруХраненияБазыДанных() для анализа таблиц и полей, по которым идут блокировки.
          — Добавьте недостающие индексы на поля, участвующие в фильтрах запросов (особенно в регистрах сведений и документов).
          — Избегайте избыточных индексов, чтобы не замедлять запись.

          2. Включить режим версионирования чтения (RCSI) в MS SQL Server
          — Это уменьшит блокировки чтения, так как запросы будут читать «снимок» данных, а не ждать освобождения блокировок.
          — Команда для включения:

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

          3. Минимизировать длительность транзакций в 1С
          — Переносить тяжелые вычисления и проверки до начала транзакции.
          — Накладывать управляемые блокировки как можно ближе к концу процедуры проведения.
          — Использовать программные блокировки (через регистр сведений) только при необходимости и с минимальным временем удержания.

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

          5. Регулярно выполнять регламентные операции на SQL Server
          — Обновление статистики индексов.
          — Дефрагментация и перестроение индексов.
          — Очистка кэша процедур.
          — Использовать Maintenance Plans или другие средства автоматизации.

          6. Анализировать и устранять «узкие места» в запросах
          — Использовать динамические представления SQL Server (sys.dm_exec_requests, sys.dm_tran_locks) для мониторинга блокировок.
          — Анализировать планы запросов, искать сканирования таблиц.
          — Переписывать проблемные запросы, если возможно.

          7. Ограничить параллельное проведение документов с пересекающимися данными
          — Внедрить очередь на проведение или использовать программные блокировки.
          — Избегать массового проведения большого количества документов одновременно.

          ### Полезные запросы для диагностики блокировок в MS SQL Server

          |SELECT
          | db.name AS DatabaseName,
          | r.session_id,
          | r.blocking_session_id,
          | r.wait_time,
          | r.wait_type,
          | st.text AS SqlText
          |FROM sys.dm_exec_requests r
          |OUTER APPLY sys.dm_exec_sql_text(r.sql_handle) st
          |WHERE r.blocking_session_id <> 0
          |ORDER BY r.wait_time DESC

          ### Рекомендации по литературе и инструментам

          — Используйте Blocking Monitoring Framework для мониторинга блокировок.
          — Посмотрите видео и статьи Виктора Богачева по анализу блокировок.
          — Рекомендую статьи на infostart.ru по теме блокировок и оптимизации запросов.

          Если кратко: ошибки блокировок в 1С на SQL Server — это результат конкуренции за данные, вызванной отсутствием индексов, длительными транзакциями и особенностями работы 1С с блокировками. Решается это оптимизацией индексов, включением RCSI, минимизацией времени удержания блокировок и правильной организацией проведения документов.

          Рекомендую посмотреть здесь:
          https://infostart.ru/1c/articles/1431026/
          https://infostart.ru/1c/articles/1016138/
          https://infostart.ru/1c/articles/629017/

      Просмотр 1 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С