Многие пользователи и администраторы 1С сталкиваются с ситуацией, когда при одновременном выполнении регламентных операций (например, закрытии кассовой смены) в файловой базе возникают ошибки конфликта блокировок. Рассмотрим подробно, почему это происходит и какие шаги необходимо предпринять для стабилизации работы системы.
Прежде всего, важно уяснить, что файловый режим работы (1CD) принципиально отличается от клиент-серверного (SQL). В файловой версии блокировки носят табличный характер. Когда один пользователь запускает операцию закрытия смены, которая включает в себя запись движений в регистры, 1С блокирует не конкретные записи, а таблицу целиком или значительные области данных. Поскольку база данных физически представляет собой один файл, одновременная запись несколькими пользователями приводит к тому, что транзакции выстраиваются в очередь. Если время ожидания доступа к файлу превышает установленный платформой таймаут, пользователь получает ошибку «Конфликт блокировок».
Часто возникает заблуждение, что RLS может помочь в борьбе с блокировками. На самом деле, включение RLS лишь усложняет запросы к базе данных, добавляя дополнительные условия фильтрации. Это заставляет систему дольше удерживать блокировки на таблицах, что в файловом режиме только ухудшает ситуацию, увеличивая вероятность возникновения «мертвых блокировок» (DEADLOCK) и таймаутов.
Прежде чем принимать радикальные меры, необходимо точно определить, какие именно объекты или действия вызывают блокировки. Для этого воспользуемся встроенными средствами платформы 1С:
TLOCK и DEADLOCK.Без анализа логов любое изменение настроек будет носить характер «гадания», так как вы не будете видеть реального виновника конкуренции за ресурсы.
Если переход на серверную архитектуру на текущем этапе невозможен, попробуем применить следующие подходы:
1CD.Apache или IIS может немного улучшить стабильность за счет более качественного управления сеансами, однако архитектурное ограничение файловой системы останется прежним.При росте количества магазинов и объема данных файловый режим неизбежно достигает своего «потолка» масштабируемости. Единственным верным техническим решением для устранения конфликтов блокировок является перевод базы на клиент-серверную архитектуру (PostgreSQL или MS SQL Server).
В SQL-режиме блокировки управляются на уровне строк базы данных. Это означает, что кассир первого магазина блокирует для записи только те строки в регистрах, которые относятся к его смене, а кассир второго магазина может параллельно записывать свои данные в те же регистры, если они не пересекаются по набору данных. Это позволяет всем магазинам закрывать смены одновременно без взаимных помех.
Подводя итог, можно сказать:
RLS — это лишь замедлит работу.Регулярное выполнение тестирования и исправления информационной базы также полезно для профилактики, но оно не отменяет фундаментальных ограничений файлового режима при высокой нагрузке.