Администрирование · 12 мин
Как настроить PostgreSQL для 1С: практическое руководство
Как настроить PostgreSQL для работы с 1С: установка сборки 1C, параметры postgresql.conf, настройка памяти, autovacuum, типичные ошибки и проверка результата.
PostgreSQL — самая распространённая СУБД для клиент-серверных установок 1С:Предприятия на Linux и недорогая альтернатива MS SQL Server на Windows. Однако PostgreSQL «из коробки» настроен крайне консервативно: стандартные параметры рассчитаны на слабый сервер и объёмы данных в несколько мегабайт. Если развернуть базу 1С на таких настройках, пользователи столкнутся с медленными проведениями документов, долгими отчётами и блокировками.
Правильная настройка PostgreSQL для 1С сводится к трём вещам: использованию специальной сборки СУБД, корректировке ключевых параметров конфигурации под объём оперативной памяти сервера и регулярному обслуживанию базы. Ниже разобран каждый шаг с конкретными командами, критериями выбора значений и способами проверить результат.
Материал ориентирован на администраторов, которые разворачивают связку «сервер 1С + PostgreSQL» на Linux (Debian/Ubuntu-подобные дистрибутивы), но большинство рекомендаций применимо и к Windows-установкам.
Какую сборку PostgreSQL выбрать для 1С
Платформа 1С:Предприятие работает не с любой версией PostgreSQL, а только со сборками, в которые внесены патчи совместимости (например, обработка типа mchar и особенности работы с регистрами символов). Официально поддерживаются сборки от 1С (публикуются на портале releases.1c.ru) и Postgres Pro Standard/Certified. Ванильный PostgreSQL из стандартного репозитория дистрибутива с 1С работать не будет — база просто не создастся или будет падать с ошибками.
Перед установкой проверьте матрицу совместимости: конкретная версия платформы 1С поддерживает определённые версии PostgreSQL. Например, для свежих версий платформы 8.3 обычно актуальны PostgreSQL 12–16 в сборке 1С. Устанавливать самую новую мажорную версию СУБД, которую платформа ещё не поддерживает, — частая причина проблем.
Сравнение вариантов СУБД для 1С
Бесплатно, официально поддерживается. Ограничение: патчи выходят с задержкой, меньше инструментов мониторинга.
Платно, дополнительные оптимизации и расширения, техподдержка. Подходит для крупных баз и высоких нагрузок.
Привычен Windows-администраторам, в ряде конфигураций показывает стабильную производительность. Требует лицензий на СУБД.
Установка и первичная подготовка сервера
Установка на Debian-подобных системах выполняется из пакетов, скачанных с портала 1С. После установки пакетов СУБД инициализируйте кластер с правильной локалью — это критично для 1С. Локаль должна быть ru_RU.UTF-8, иначе сортировка строк в базе будет отличаться от ожидаемой и возможны проблемы с поиском и индексами.
sudo locale-gen ru_RU.UTF-8
sudo -u postgres /usr/lib/postgresql/15/bin/initdb -D /var/lib/postgresql/15/main --locale=ru_RU.UTF-8 --encoding=UTF8
sudo systemctl enable postgresql
sudo systemctl start postgresqlЗадайте пароль суперпользователя postgres и при необходимости создайте отдельного пользователя для сервера 1С. Размещайте каталог данных PostgreSQL на быстром дисковом массиве (SSD/NVMe), а журнал предзаписи (WAL) при высокой нагрузке имеет смысл вынести на отдельный физический диск — это снижает конкуренцию за дисковые операции.
Ключевые параметры postgresql.conf для 1С
Файл postgresql.conf обычно находится в каталоге данных кластера или в /etc/postgresql/<версия>/main/. После правки большинства параметров требуется перезапуск службы (systemctl restart postgresql), часть параметров применяется перечитыванием конфигурации (systemctl reload).
Базовый ориентир для сервера, выделенного только под СУБД:
- shared_buffers — 25–30% от объёма RAM. На сервере с 32 ГБ разумно начать с 8 ГБ. Слишком большое значение для PostgreSQL не даёт выигрыша, так как СУБД дополнительно использует кэш ОС.
- effective_cache_size — 50–75% от RAM. Это подсказка планировщику, сколько памяти доступно под кэш (сама память не выделяется).
- work_mem — память на одну операцию сортировки/хэширования. Начните с 32–64 МБ; учитывайте, что одно соединение может использовать несколько таких буферов.
- maintenance_work_mem — 512 МБ – 2 ГБ для ускорения VACUUM, CREATE INDEX, REINDEX.
- max_connections — не завышайте: 100–200 достаточно для большинства внедрений, так как сервер 1С мультиплексирует соединения через рабочие процессы.
- wal_buffers — 16–64 МБ; checkpoint_timeout — увеличьте до 10–15 минут, чтобы снизить частоту контрольных точек.
- random_page_cost — для SSD установите 1.1 вместо стандартных 4, это меняет выбор планов запросов в пользу индексных сканирований.
# пример для сервера с 32 ГБ RAM
shared_buffers = 8GB
effective_cache_size = 20GB
work_mem = 64MB
maintenance_work_mem = 1GB
max_connections = 150
wal_buffers = 32MB
checkpoint_timeout = 15min
random_page_cost = 1.1
effective_io_concurrency = 200Дополнительно в сборках 1С рекомендуется проверить параметры, влияющие на эстимацию планировщика: default_statistics_target можно увеличить до 100–200, а join_collapse_limit и from_collapse_limit оставить по умолчанию, если запросы 1С не показывают аномалий планирования.
Настройка autovacuum и обслуживание базы
PostgreSQL использует механизм MVCC: обновлённые и удалённые строки остаются в таблицах как «мёртвые» версии, пока их не уберёт процесс vacuum. Базы 1С интенсивно обновляют таблицы регистров, поэтому без агрессивного autovacuum таблицы раздуваются, а запросы деградируют.
Стандартные настройки autovacuum слишком мягкие для 1С. Рекомендуется увеличить число фоновых процессов и снизить пороги срабатывания:
autovacuum = on
autovacuum_max_workers = 4
autovacuum_naptime = 30s
autovacuum_vacuum_scale_factor = 0.05
autovacuum_analyze_scale_factor = 0.02
autovacuum_vacuum_cost_limit = 1000Для самых больших и активно меняющихся таблиц (регистры накопления, сведений) имеет смысл задать индивидуальные параметры хранения через ALTER TABLE ... SET (autovacuum_vacuum_scale_factor = ...). Дополнительно раз в неделю или месяц, вне рабочего времени, полезно выполнять полный VACUUM ANALYZE базы и периодически REINDEX индексов сильно фрагментированных таблиц.
Сетевой доступ и интеграция с сервером 1С
Если сервер 1С и PostgreSQL на разных машинах, откройте сетевой доступ: в postgresql.conf установите listen_addresses = '*' (или конкретный адрес интерфейса), а в pg_hba.conf добавьте строку для подсети сервера приложений с методом аутентификации scram-sha-256 или md5. Не используйте trust в рабочей сети.
# pg_hba.conf — разрешить подключение с сервера 1С
host all all 192.168.1.10/32 scram-sha-256Создание информационной базы выполняется из консоли кластера 1С или конфигуратора: укажите адрес сервера СУБД, имя базы, пользователя и пароль. Убедитесь, что у пользователя СУБД достаточно прав — платформа сама создаст таблицы и схему. После создания базы загрузите данные из .dt или начните работу и проверьте скорость типовых операций.
- 1Установите сборку PostgreSQL от 1С, совместимую с вашей версией платформы
- 2Инициализируйте кластер с локалью ru_RU.UTF-8
- 3Настройте postgresql.conf под объём RAM сервера
- 4Настройте pg_hba.conf и сетевой доступ для сервера 1С
- 5Создайте базу через консоль кластера 1С и загрузите данные
- 6Включите агрессивный autovacuum и настройте регламентное обслуживание
- 7Проверьте производительность типовых операций и настройте мониторинг
Как проверить, что настройка сработала
Признак удачной настройки — не красивые цифры в конфиге, а поведение системы под нагрузкой. Проверьте несколько контрольных точек.
Как проверить результат
Время проведения типового документа стабильно и сопоставимо с эталоном
Время растёт по мере работы или сильно скачет
n_dead_tup мала относительно n_live_tup, last_autovacuum свежая
Мёртвых строк накапливаются много, autovacuum давно не отрабатывал
Доля чтений из памяти выше 95–99%
Много чтений с диска — shared_buffers мал или данных слишком много
Долгих ожиданий блокировок в часы пик нет
Сеансы висят в состоянии Lock, растёт очередь ожиданий
Для диагностики медленных запросов включите логирование: log_min_duration_statement = 1000 запишет в журнал все запросы длиннее секунды. По этим записям можно найти проблемные операции и разобрать их планы через EXPLAIN ANALYZE. Технологический журнал сервера 1С с событиями DBPOSTGRS дополнит картину со стороны платформы.
Полезно зафиксировать «эталон» до и после настройки: замерьте время проведения пачки документов, построения типового отчёта и закрытия месяца. Без таких замеров оценить эффект от изменений объективно невозможно.
Типичные ошибки и ограничения
Отдельно стоит сказать об ограничениях: самостоятельная настройка оправдана для баз малых и средних размеров с типовой нагрузкой. Если база занимает сотни гигабайт, работают сотни одновременных пользователей или есть нестандартные доработки, тюнинга postgresql.conf недостаточно — потребуется анализ планов запросов, возможна оптимизация кода конфигурации и привлечение специалиста по производительности 1С.
Как выбрать действие
Что важно запомнить
Используйте только сборку PostgreSQL от 1С или Postgres Pro, инициализируйте кластер с локалью ru_RU.UTF-8, настройте shared_buffers, work_mem, effective_cache_size и агрессивный autovacuum под объём RAM и характер нагрузки. Перед любыми изменениями делайте резервную копию, а эффект оценивайте замерами времени типовых операций и статистикой pg_stat.
Частые вопросы
Подойдёт ли PostgreSQL из стандартного репозитория Ubuntu для 1С?
Нет. Платформе 1С требуется сборка с патчами совместимости — от 1С или Postgres Pro. На ванильной версии создание базы завершится ошибкой или будут сбои в работе со строковыми типами.
Сколько оперативной памяти нужно серверу PostgreSQL для 1С?
Универсальной цифры нет: ориентируйтесь на размер активной части базы. Практический минимум для небольшой базы — 8–16 ГБ, для средних внедрений — 32–64 ГБ. Главный критерий — высокий процент попаданий в кэш (blks_hit) в pg_stat_database.
Нужно ли перезапускать PostgreSQL после изменения postgresql.conf?
Зависит от параметра. Изменение shared_buffers, max_connections и ряда других требует полного перезапуска службы. Часть параметров (например, work_mem, log_min_duration_statement) применяется через reload. Узнать категорию параметра можно в представлении pg_settings (столбец context).
Как понять, что базе не хватает autovacuum?
Запросите pg_stat_user_tables: если n_dead_tup составляет значительную долю от n_live_tup, а last_autovacuum старый или пустой — autovacuum не справляется. Увеличьте число workers, снизьте scale_factor и naptime.
Можно ли размещать сервер 1С и PostgreSQL на одной машине?
Можно для небольших внедрений, но тогда делите память между ними: учитывайте, что рабочие процессы сервера 1С тоже потребляют RAM, и уменьшайте shared_buffers соответственно. При росте нагрузки СУБД лучше вынести на отдельный сервер.
Что делать, если после настройки база стала работать медленнее?
Откатите последние изменения на прежние значения (поэтому конфиг стоит версионировать или комментировать), перезапустите службу и сравните замеры. Чаще всего деградацию вызывают завышенные work_mem и shared_buffers, из-за которых система уходит в своп.