При активном использовании распределенных информационных баз (РИБ) в конфигурации 1С:Розница многие компании сталкиваются с блокировками в рабочем месте кассира (РМК). В файловом режиме работы блокировка накладывается на уровне целых таблиц базы данных (файла *.1CD). Когда инициируется регламентный обмен РИБ, система блокирует ключевые регистры накопления, сведений и цен, из-за чего кассиры не могут провести чек или подобрать товар. Разберем по шагам, поможет ли переход на бесплатную СУБД MS SQL Server Express, с какими ограничениями придется столкнуться и как правильно организовать архитектуру работы кассовых узлов.
Проанализируем природу возникновения транзакционных конфликтов в файловой базе. При выполнении обмена РИБ фоновые процессы 1С последовательно выполняют чтение, десериализацию и запись пакетов данных. В файловой СУБД любая запись требует эксклюзивной блокировки всей таблицы целиком. Если кассир в этот момент нажимает кнопку пробития чека, транзакция проведения документа ожидает освобождения таблицы и часто завершается ошибкой по таймауту.
При переводе базы на клиент-серверный вариант (MS SQL Server) платформа 1С переходит на использование управляемых блокировок данных. В этом случае блокируются исключительно конкретные строки таблиц, участвующие в проводке или записи пакета обмена, что существенно снижает количество конфликтов между кассирами и процессами синхронизации.
Рассмотрим аппаратные и функциональные лимиты бесплатной редакции MS SQL Server Express (версий 2012, 2014 и выше), которые необходимо учитывать перед развертыванием:
.mdf) составляет 10 ГБ. Файл журнала транзакций (.ldf) этим лимитом не ограничен, однако при модели восстановления Full без регулярной очистки журнала диск может быстро переполниться. Для базы розницы рекомендуется использовать простую модель восстановления (Simple).Выясним важную деталь: сам по себе переход на клиент-серверную СУБД невозможен без лицензии на Сервер 1С:Предприятия. Рассмотрим ключевые системные и лицензионные требования:
ragent, обязательно должен быть установлен компонент SQL Server Native Client (версия 11.0 для MSSQL 2012/2014). Без этого драйвера служба 1С не сможет подключиться к СУБД.Поскольку служба 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"
Разберем комплекс организационных и системных мер, позволяющих полностью устранить задержки в РМК: