Как перевести 1С:Розница на MS SQL Express и устранить блокировки при обмене РИБ?

Системный администратор 1С v8.3 (Управляемые формы) 1С:Розница Торговля и дистрибуция
← На главную

При активном использовании распределенных информационных баз (РИБ) в конфигурации 1С:Розница многие компании сталкиваются с блокировками в рабочем месте кассира (РМК). В файловом режиме работы блокировка накладывается на уровне целых таблиц базы данных (файла *.1CD). Когда инициируется регламентный обмен РИБ, система блокирует ключевые регистры накопления, сведений и цен, из-за чего кассиры не могут провести чек или подобрать товар. Разберем по шагам, поможет ли переход на бесплатную СУБД MS SQL Server Express, с какими ограничениями придется столкнуться и как правильно организовать архитектуру работы кассовых узлов.

Причины блокировок в файловом режиме и механизм их устранения

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

При переводе базы на клиент-серверный вариант (MS SQL Server) платформа 1С переходит на использование управляемых блокировок данных. В этом случае блокируются исключительно конкретные строки таблиц, участвующие в проводке или записи пакета обмена, что существенно снижает количество конфликтов между кассирами и процессами синхронизации.

Технические ограничения MS SQL Server Express

Рассмотрим аппаратные и функциональные лимиты бесплатной редакции MS SQL Server Express (версий 2012, 2014 и выше), которые необходимо учитывать перед развертыванием:

  1. Ограничение по объему базы данных: Максимальный размер основного файла данных (.mdf) составляет 10 ГБ. Файл журнала транзакций (.ldf) этим лимитом не ограничен, однако при модели восстановления Full без регулярной очистки журнала диск может быстро переполниться. Для базы розницы рекомендуется использовать простую модель восстановления (Simple).
  2. Ограничение по оперативной памяти: Экземпляр MS SQL Express выделяет под буферный кэш (Buffer Pool) не более 1410 МБ ОЗУ на одну базу, что снижает скорость выполнения тяжелых аналитических отчетов при росте объема данных.
  3. Ограничение вычислительных мощностей: СУБД использует максимум 1 физический сокет или до 4 ядер процессора.
  4. Отсутствие службы SQL Server Agent: В Express-версии отсутствует встроенный планировщик задач для автоматического обслуживания СУБД (создания бэкапов, дефрагментации индексов и обновления статистик).

Лицензирование и системные требования «1С:Предприятия»

Выясним важную деталь: сам по себе переход на клиент-серверную СУБД невозможен без лицензии на Сервер 1С:Предприятия. Рассмотрим ключевые системные и лицензионные требования:

  1. Недостаточность лицензии «1С:Сервер МИНИ»: Лицензия «Сервер МИНИ» ограничена 5 пользовательскими сеансами. В схеме с 4 активными пользователями (2 кассира + 2 товароведа) фоновые регламентные задания обмена РИБ открывают дополнительные сеансы, что приводит к превышению лимита подключений и сбоям в работе. Для стабильной работы требуется полноценная лицензия на сервер 1С (x86 или x64).
  2. Установка драйвера Native Client: На машине, где функционирует служба кластера серверов ragent, обязательно должен быть установлен компонент SQL Server Native Client (версия 11.0 для MSSQL 2012/2014). Без этого драйвера служба 1С не сможет подключиться к СУБД.

Настройка регламентного обслуживания MS SQL Express

Поскольку служба SQL Server Agent в бесплатной редакции недоступна, настроим регулярное обслуживание через Планировщик заданий Windows (Task Scheduler) и утилиту командной строки sqlcmd. Регулярное обновление статистик и реиндексация критически важны для правильного построения планов запросов оптимизатором SQL.

Создадим T-SQL скрипт обслуживания (например, maintenance.sql) со следующим содержимым:


USE [RetailBase];
GO
-- Обновление статистик для всех таблиц базы данных
EXEC sp_updatestats;
GO
-- Перестроение и дефрагментация индексов
EXEC sp_MSforeachtable 'ALTER INDEX ALL ON ? REBUILD WITH (FILLFACTOR = 80)';
GO

Запуск этого скрипта по расписанию в ночное время настраивается через вызов командной строки в планировщике Windows:

sqlcmd -S localhost\SQLEXPRESS -E -i "C:\Scripts\maintenance.sql"

Оптимизация архитектуры обменов РИБ

Разберем комплекс организационных и системных мер, позволяющих полностью устранить задержки в РМК:

  1. Выделение локальных узлов РИБ под кассы (РИБ по рабочим местам): Наиболее надежная практика в конфигурации «1С:Розница» — развертывание автономных файловых баз непосредственно на рабочих местах кассиров. Касса работает автономно, моментально оформляет продажи, а обмен чеками с центральной базой происходит в фоновом режиме. В такой схеме зависания центральной базы вообще не влияют на пробитие чеков.
  2. Корректировка расписания регламентных заданий: Обмен каждые 15 минут по всем узлам создает постоянную пиковую нагрузку. Рекомендуется разнести расписания обменов для разных магазинов по времени, чтобы они не стартовали одновременно. Для оперативного обновления цен товаровед может запускать ручной обмен перед открытием смены.
  3. Контроль таблиц регистрации изменений: Проверим состояние планов обмена. Если один из узлов РИБ долго не выходит на связь, таблицы регистрации изменений накапливают тысячи записей. Это многократно увеличивает объем формируемого XML-сообщения и затягивает транзакцию загрузки данных, вызывая блокировки. Необходимо регулярно контролировать состояние очереди сообщений обмена.
← На главную