Как перевести базу 1С:Розница с файлового режима на PostgreSQL и какие особенности настройки учесть?

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

Перевод рабочей информационной базы 1С с файлового режима на клиент-серверный — естественный этап развития любой учетной системы при росте объема данных и числа активных пользователей. В типовых конфигурациях, таких как 1С:Розница, накопление чеков ККМ и записей регистров движения товаров приводит к деградации производительности и приближению к технологическим пределам файловой СУБД. Разберем детально, подходит ли бесплатная СУБД PostgreSQL для таких задач, как работают блокировки и какие параметры необходимо настроить для стабильной работы.

Ограничения файлового режима базы данных 1С

Проанализируем причины, по которым оставаться на файловой базе при размере свыше 10 ГБ становится рискованно:

  1. Лимит размера внутренних таблиц: В стандартном формате файла 1Cv8.1CD действует технологическое ограничение в 4 ГБ. Данный лимит рассчитывается отдельно для трех составляющих каждого объекта: тела таблицы (основные данные), индексного файла и блока хранения двоичных данных и длинных строк (BLOB). Если таблица регистра сведений или накопления превышает 4 ГБ по данным или индексам, база аварийно прекращает работу.
  2. Блокировки на уровне файлов: В файловом режиме при записи данных блокируются таблицы целиком. При одновременной работе 10 и более пользователей это приводит к постоянным ожиданиям на блокировках и ошибкам тайм-аута.
  3. Надежность при сетевых сбоях: Работа с файловой базой через сетевой общий ресурс (SMB/сетевую шару) крайне уязвима. Любой кратковременный обрыв связи у одного из клиентов во время транзакции может привести к повреждению внутренней структуры файла базы.

Мифы и реальность о блокировках в 1С на PostgreSQL

Существует заблуждение, будто PostgreSQL в связке с 1С блокирует таблицы целиком. Выясним, как это устроено на самом деле:

Все современные конфигурации 1С (включая 1С:Розница 2.2 / 2.3) работают исключительно в режиме управляемых блокировок (свойство конфигурации РежимУправляемыхБлокировокДанных установлено в значение Управляемый). В этом режиме блокировками транзакций управляет непосредственно кластер серверов 1С:Предприятие. Блокируются только конкретные диапазоны записей и строк регистров по ключевым полям (например, по номенклатуре или складу), а не таблицы базы данных целиком. Таким образом, проведение чеков и документов не вызывает тотальных блокировок при грамотно спроектированных движениях.

Обязательные требования к дистрибутиву PostgreSQL для 1С

Для корректной работы платформы 1С нельзя использовать стандартную сборку PostgreSQL с официального сайта СУБД. Рассмотрим ключевые нюансы развертывания:

  1. Специализированная сборка: Платформа 1С требует наличия специфических патчей (поддержка правильных сортировок, регистронезависимости, расширенных возможностей работы с временными таблицами). Необходимо использовать дистрибутивы PostgreSQL, подготовленные фирмой «1С» или отечественными разработчиками СУБД (Postgres Pro).
  2. Операционная система: PostgreSQL исторически оптимизирован под архитектуру процессов Linux (механизм fork). На серверах под управлением Linux СУБД демонстрирует максимальное быстродействие и стабильность. На ОС Windows PostgreSQL функционирует через слой эмуляции, что создает повышенную нагрузку на оперативную память и дисковую подсистему.
  3. Корректная локаль: При инициализации кластера баз данных (initdb) критически важно задавать кодировку UTF-8 и локаль ru_RU.UTF-8 (или C в зависимости от рекомендаций сборки), иначе сортировка строковых данных в запросах 1С будет работать некорректно.

Ключевые параметры конфигурации postgresql.conf для 1С

В отличие от MS SQL Server, который эффективно оптимизирует ресурсы «из коробки», PostgreSQL требует обязательной первоначальной настройки конфигурационного файла postgresql.conf. Разберем основные параметры:

  1. Подключение модулей оптимизатора: Платформа 1С генерирует большое количество запросов с временными таблицами. Для их адекватной оценки планировщиком обязательно активируем расширения:
    
    shared_preload_libraries = 'online_analyze, plantuner'
    plantuner.fix_empty_table = on
    online_analyze.enable = on
    online_analyze.verbose = off
    online_analyze.table_type = 'temporary'
    
  2. Распределение оперативной памяти:
    • shared_buffers — выделяем примерно 25–30% от всей физической памяти сервера под буферный кэш СУБД.
    • effective_cache_size — задаем значение на уровне 50–75% от объема RAM, подсказывая планировщику объем доступного дискового кэша ОС.
    • work_mem — устанавливаем значение в диапазоне от 32MB до 128MB. Не следует чрезмерно завышать этот параметр, так как память выделяется на каждую операцию сортировки внутри каждого сеанса.
    • maintenance_work_mem — задаем значение от 512MB до 1GB для ускорения создания индексов и операций очистки.
  3. Настройка автоочистки (autovacuum): Механизм MVCC в PostgreSQL создает новые версии строк при изменениях. Чтобы таблицы регистрации РИБ и регистры итогов не разрастались (bloat), делаем автоочистку более агрессивной:
    
    autovacuum = on
    autovacuum_max_workers = 4
    autovacuum_vacuum_scale_factor = 0.05
    autovacuum_analyze_scale_factor = 0.02
    autovacuum_cost_limit = 1000
    
  4. Увеличение пула блокировок: Чтобы исключить ошибки переполнения памяти блокировок при объемных проводках документов, увеличиваем параметр max_locks_per_transaction со стандартных 64 до 256 или 512.

Как корректно перенести базу через выгрузку (.dt)

При загрузке объемных информационных баз из файла .dt в PostgreSQL администраторы часто сталкиваются с ошибками нехватки памяти или сбоями транзакций. Разберем по шагам алгоритм ускорения и стабилизации первичного импорта:

  1. Временно отключаем строгую синхронизацию с диском в postgresql.conf на время загрузки файла:
    
    fsync = off
    synchronous_commit = off
    checkpoint_timeout = 30min
    max_wal_size = 16GB
    
  2. Перезапускаем службу PostgreSQL и выполняем загрузку информационной базы через конфигуратор 1С:Предприятие (пункт меню Администрирование → Загрузить информационную базу...).
  3. После успешного завершения импорта обязательно возвращаем параметры fsync = on и synchronous_commit = on и перезапускаем службу СУБД, чтобы гарантировать сохранность данных от сбоев питания.

Подготовка данных перед миграцией

Перед переносом базы 1С:Розница рекомендуется выполнить сервисную оптимизацию прямо в файловой базе:

  1. Выполнить штатную архивацию чеков ККМ в закрытых кассовых сменах. При архивации детальные строки чеков сжимаются в сводный документ ОтчетОРозничныхПродажах, а сами отработанные чеки удаляются. Это позволяет сократить размер базы на 30–60%.
  2. Выполнить процедуру Тестирование и исправление с реиндексацией и сжатием таблиц через конфигуратор 1С.

Внедрение связки «1С:Предприятие + PostgreSQL» при правильной сборке дистрибутива и базовом тюнинге параметров обеспечивает стабильную работу базы данных объемом 12 ГБ на 10–20 активных пользователей без необходимости покупки дорогостоящих коммерческих СУБД.

← На главную