Как устранить зависания и повысить производительность в файловой базе 1С при работе большого количества пользователей?

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

Рано или поздно любая развивающаяся компания сталкивается с проблемой, когда привычная и простая в обслуживании файловая база «1С:Предприятие» начинает безжалостно зависать. Типичный сценарий: в базе работают 15–20 человек, конфигурация типовая (например, «1С:Управление нашей фирмой» или «1С:Управление торговлей»), но в пиковые моменты пользователи начинают жаловаться, что простые операции — открытие формы, проведение документа или формирование небольшого отчета — занимают минуты. При этом замеры производительности показывают, что простейший запрос на чтение данных может выполняться десятки секунд.

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

Выясняем причину: почему простой запрос на чтение выполняется по 30 секунд?

Для начала разберем природу файловой СУБД «1С:Предприятие 8». Вся база данных физически представляет собой один файл с расширением 1Cv8.1CD. В отличие от полноценных систем управления базами данных (таких как MS SQL Server или PostgreSQL), файловая СУБД 1С имеет крайне упрощенный механизм управления транзакциями и блокировками.

Рассмотрим детально, как происходят процессы чтения и записи в файловом режиме:

  1. Табличные блокировки: Когда пользователь запускает процесс записи (проводит документ, создает элемент справочника, записывает константу), платформа накладывает блокировку на всю таблицу целиком.
  2. Блокировка корневой страницы (Root-области): При добавлении новых страниц данных или изменении структуры индексов блокируется заголовочный сектор всего файла базы данных. Это означает, что на доли секунды блокируется абсолютно вся база данных для любых других транзакций.
  3. Очередь ожидания блокировок: Современные конфигурации на базе Библиотеки стандартных подсистем (БСП) работают очень активно. В фоне постоянно выполняются регламентные задания, регистрируются изменения для планов обмена, пишутся логи (журнал регистрации, история работы, замеры производительности). Если один пользователь проводит тяжелый документ, а фоновое задание в этот момент пишет историю, таблица блокируется. В этот же момент ваш запрос на чтение (например, получение контактной информации при открытии карточки контрагента) пытается обратиться к этой таблице. Платформа ставит ваш запрос в очередь. Время ожидания в очереди накапливается, и в итоге простой запрос, который на пустой базе выполняется за 0.001 секунды, в реальных условиях «висит» 26 секунд, ожидая, пока освободятся ресурсы.

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

Решение 1: Отказ от общего сетевого диска и переход на веб-сервер

Если ваши 16 пользователей работают с файловой базой, которая просто лежит в общей сетевой папке (по протоколу SMB/Samba), это самый неэффективный сценарий из всех возможных. При такой схеме каждый клиентский компьютер берет на себя роль «движка» СУБД, прокачивая через локальную сеть огромные объемы сырых данных из файла базы.

Переход на публикацию базы через веб-сервер (Apache или IIS) позволяет кардинально изменить архитектуру взаимодействия:

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

Решение 2: Тюнинг СУБД — увеличение размера страницы базы данных до 64 Кб

Мало кто знает, что производительность файловой базы можно существенно поднять «малой кровью», изменив внутренний формат хранения данных. По умолчанию новые файловые базы 1С создаются с размером страницы данных, равным 4 Кб. При активной работе большого количества пользователей это приводит к фрагментации файла и снижению скорости дисковых операций ввода-вывода (IOPS).

Мы можем принудительно увеличить размер страницы до 64 Кб с помощью штатной утилиты конвертации:

  1. Полностью завершите работу всех пользователей и остановите веб-сервер.
  2. Сделайте резервную копию файла 1Cv8.1CD. Это критически важно!
  3. Найдите в каталоге установленной платформы (обычно в папке C:\Program Files\1cv8\8.3.XX.XXXX\bin\) утилиту CNVDBFL.EXE.
  4. Запустите утилиту, выберите ваш файл базы данных.
  5. В поле «Размер страницы» выберите значение 64000 (или 64 Кб).
  6. Нажмите кнопку «Выполнить» и дождитесь окончания процесса конвертации.

После увеличения размера страницы до 64 Кб база данных начинает работать ощутимо быстрее на современных твердотельных накопителях (SSD/NVMe), так как размер блока данных 1С синхронизируется с физической архитектурой работы ячеек памяти современных дисков. Кроме того, это увеличивает максимально допустимый размер одной таблицы базы данных с 4 Гб до нескольких десятков гигабайт.

Решение 3: Оптимизация прав доступа и механизмов RLS

Ограничение прав на уровне записей (RLS — Record Level Security) — это мощный инструмент безопасности, но для файловой базы это «приговор» производительности при 16 пользователях.

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


ВЫБРАТЬ
    Ссылка,
    Номер,
    Дата
ИЗ
    Документ.ЗаказПокупателя

Платформа выполняет сложнейшую конструкцию с проверкой прав:


ВЫБРАТЬ
    Ссылка,
    Номер,
    Дата
ИЗ
    Документ.ЗаказПокупателя
ГДЕ
    Ответственный В (ВЫБРАТЬ Пользователь ИЗ РегистрСведений.ГруппыДоступаПользователей ГДЕ ...)

Для файловой базы такие вложенные запросы оборачиваются полным сканированием таблиц (Full Table Scan) вместо поиска по индексам. Если отказаться от RLS невозможно, обязательно проверьте следующие настройки в вашей «1С:УНФ»:

Решение 4: Проверка индексов и оптимизация метаданных

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

Разберем, как проверить индексацию в конфигураторе:

  1. Откройте конфигурацию, найдите нужный справочник или документ.
  2. Перейдите на вкладку «Данные» и откройте свойства проблемного реквизита.
  3. Найдите свойство Индексировать.
  4. Установите значение Индексировать или Индексировать с доп. упорядочиванием.

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

Решение 5: Единственное кардинальное решение — переход на клиент-сервер

Давайте смотреть правде в глаза. Работа 16 активных пользователей в современной конфигурации УНФ на файловой базе — это постоянная жизнь «на пороге катастрофы». Платформа «1С:Предприятие 8» изначально проектировалась с расчетом на то, что для работы более 5–8 пользователей требуется клиент-серверный вариант (SQL).

Рассмотрим, какие преимущества дает переход на клиент-серверную архитектуру:

Для небольших компаний отличным решением по соотношению цена/качество будет связка бесплатной СУБД PostgreSQL (рекомендуется использовать специализированную сборку Postgres Pro для 1С) и серверной лицензии 1С. Для небольших офисов также существует бюджетная «Лицензия на сервер МИНИ» (ограничение до 5 подключений), но в рассматриваемом случае (16 пользователей) потребуется полноценная 64-разрядная лицензия на сервер «1С:Предприятия».

Резюме и план действий

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

  1. Проверьте, как организован доступ. Если это общая сетевая папка, немедленно разверните веб-сервер (Apache или IIS) и переведите пользователей на работу через Тонкий клиент.
  2. Произведите техническое обслуживание файла базы данных: сделайте бэкап и с помощью утилиты CNVDBFL.EXE переведите размер страницы данных на 64 Кб.
  3. Проверьте настройки прав доступа. Если используется RLS, убедитесь, что включен производительный режим, а регламентные задания обновления ключей доступа перенесены на ночное время.
  4. Если вышеописанные полумеры не принесли желаемой стабильности — планируйте бюджет на приобретение лицензии на сервер «1С:Предприятие» и переход на СУБД PostgreSQL. В долгосрочной перспективе это сбережет нервы пользователям и защитит бизнес от рисков потери данных.
← На главную