Настройка PostgresSQL для оптимальной работы с 1С.

В сети есть куча рекомендаций по настройке СУБД PostgresSQL для работы с решениями 1С, но какого-то полного общего мануала для 14-ой версии ваш покорный слуга не нашел. Решил написать свой. Ниже описаны изменения файла при которых Postgres довольно бодро работает с базами 1С.

Первые пять пунктов взяты с сайта PostgresPro (ссылка)

1. 1С может создавать большое количество соединений, не все из которых имеют смысл. Поэтому увеличиваем максимально возможное число одновременных подключений к серверу баз данных до 500-1000.

max_connections = 1000

2. Настройки временных таблиц.

Обычно решения 1C используют множество временных таблиц. Такие таблицы в большом количестве используются каждым обслуживающим процессом. Закрывая соединение, Postgres пытается удалить все временные таблицы в одной транзакции, при этом транзакция может запрашивать множество блокировок. Если число блокировок превысит значение max_locks_per_transaction, транзакция прервётся и оставит за собой множество потерянных временных таблиц.

Увеличиваем размер буфера для временных таблиц:

temp_buffers = 32MB

Увеличиваем число допустимых в одной транзакции блокировок таблиц или индексов до 256:

max_locks_per_transaction = 256

3. Включаем экранирование символом обратной косой черты для всех строк и выключить предупреждение об использовании этого символа:

standard_conforming_strings = off

escape_string_warning = off

4. Эффективность оптимизатора запросов Postgres зависит от выделенного ему объёма ОЗУ, поэтому параметр effective_cache_size равным минимум половине объёма ОЗУ, доступного в системе.

effective_cache_size = <Половина ОЗУ>

5. Оптимизируем планирование запросов с помощью расширения plantuner.

Добавляем plantuner в переменную shared_preload_libraries:

shared_preload_libraries = 'plantuner'

Настраиваем оптимизатор Postgres для улучшенного планирования запросов с недавно созданными пустыми таблицами:

plantuner.fix_empty_table = 'on'

6. Отключаем использование планировщиком планов соединений с вложенными циклами. По умолчанию эта опция включена, что приводит к зависаниям динамических списков с большим количеством записей. 

enable_nestloop = off

7. Отключаем полную запись страниц. Тут спорный вопрос: отключение полной записи страниц ускоряет работу, но может привести к повреждению базы данных в случае системного сбоя или отключения питания. На хабре есть перевод подробной статьи по этому вопросу (ссылка).

full_page_writes = off

8. Настраиваем параллельное выполнение запросов. Для оптимальной работы на многоядерных процессорах меняем параметры max_worker_processes и max_parallel_workers на количество логический процессоров (потоков), а параметры max_parallel_workers_per_gather и max_parallel_maintenance_workers на 4 если потоков больше 6.

max_worker_processes = <кол-во потоков CPU>

max_parallel_workers_per_gather = 4

max_parallel_workers = <кол-во потоков CPU>

max_parallel_maintenance_workers = 4

 
1 1 1 1 1 1 1 1 1 1 Рейтинг 0.00 [0 Голоса (ов)]

Добавить комментарий