K.3. Настройка параметров сервера

K.3.1. Автоматическая настройка при первом запуске
K.3.2. Дополнительные параметры конфигурации

В этом документе описывается, как настроить параметры конфигурации сервера Postgres Pro для максимальной производительности и стабильности при работе с решениями 1C.

K.3.1. Автоматическая настройка при первом запуске

Для быстрой автоматической настройки Postgres Pro используйте pgpro_tune. Эта утилита командной строки автоматически корректирует параметры сервера на основе доступных параметров оборудования.

Использование pgpro_tune включено в initdb по умолчанию. Это означает, что pgpro_tune запускается автоматически при инициализации нового кластера баз данных. При первом запуске утилита выбирает соответствующий пресет:

  • Для редакции Postgres Pro для решений 1C применяется пресет 1c.tune. Он задаёт оптимальные значения параметров конфигурации, специфичных для 1C.

  • Для редакций Postgres Pro Standard и Postgres Pro Enterprise автоматически применяется только пресет default. Он предоставляет базовую конфигурацию, но не включает параметры, специфичные для 1C. Чтобы повысить производительность, рекомендуется указать пресет 1c.tune вручную.

Несмотря на то, что утилита pgpro_tune настроена на автоматический запуск при создании кластера, её также можно запустить вручную в любое время для настройки параметров существующего кластера.

После выполнения команды initdb параметры, изменённые pgpro_tune, записываются в файл postgresql.conf. Они помещаются в отдельный раздел в конце файла и отмечаются комментариями, содержащими имя утилиты, имя пресета и метку времени:

  The following settings were added by pgpro_tune.
  pgpro_tune was run with the following options:
  -P имя_пресета
  At МЕТКА_ВРЕМЕНИ

Если сервер уже запущен, текущие значения параметров можно также найти в представлении pg_settings. Все параметры, заданные pgpro_tune, имеют в столбце source значение configuration file. Например:

SELECT name, setting, short_desc
FROM pg_settings
WHERE source = 'configuration file';

Для большинства параметров конфигурации оптимальное значение задаёт pgpro_tune. В разделе ниже перечислены только те параметры, которые не настраиваются утилитой или для которых есть рекомендуемый диапазон, а не одно фиксированное оптимальное значение.

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

K.3.2. Дополнительные параметры конфигурации

В этом разделе описаны параметры конфигурации, которые или автоматически задаются pgpro_tune, но могут потребовать корректировки вручную, или не задаются утилитой вообще и требуют ручной настройки для оптимальной работы решений 1C.

K.3.2.1. Автоматически задаваемые параметры, которые могут потребовать корректировки вручную

В таблице ниже перечислены параметры, которые автоматически настраиваются с помощью pgpro_tune. Однако в ряде случаев они могут потребовать изменений вручную.

Таблица K.1. Автоматически задаваемые параметры с рекомендуемым диапазоном значений

ПараметрОписаниеЗначение, задаваемое pgpro_tuneПричина для изменения вручную
shared_buffers Объём памяти, выделяемый базой данных для кеширования данных ОЗУ/4 Для повышения производительности это значение можно увеличить. Не рекомендуется устанавливать значение ниже 25% от доступного объёма оперативной памяти.
work_mem Максимальный объём памяти, который будет использоваться одной операцией запроса перед записью на временные файлы диска 512MB Это значение можно увеличить в зависимости от доступных ресурсов, чтобы в памяти можно было выполнять больше операций с сокращением количества ввода-вывода. Однако слишком большое значение может привести к нехватке памяти. Рекомендуется постепенно увеличивать значение параметра, отслеживая общую нагрузку на память.
temp_buffers Максимальный объём памяти, используемый для временных буферов в рамках каждого сеанса баз данных 256MB Это значение можно изменить, чтобы обеспечить корректную обработку всех временных таблиц. Рекомендуемое значение — 50% от work_mem. Оно также не должно превышать 256MB, поскольку большие значения могут снизить производительность. Точное значение зависит от объёма памяти на сервере и количества одновременных подключений. Чем больше подключений и меньше объём памяти, тем меньше должно быть значение параметра.
maintenance_work_mem Максимальный объём памяти, который будет использоваться одной операцией обслуживания базы данных, например VACUUM или CREATE INDEX ОЗУ/16

Это значение можно изменить, так как в сеансе базы данных одновременно может выполняться только одна такая операция. Более высокие значения могут улучшать производительность операций очистки и восстановления базы данных из копии.

Рекомендуемое максимальное значение — 12GB.

max_files_per_process Максимальное число файлов, которые могут быть одновременно открыты каждым серверным подпроцессом 10000 Это значение можно увеличить в зависимости от нагрузки. Максимальное допустимое значение зависит от операционной системы. Если сервер достигает указанный предел, он начинает открывать и закрывать файлы, что влияет на производительность. Отслеживать открытые файлы можно с помощью команды lsof.
bgwriter_delay Задержка между раундами активности процесса фоновой записи 20ms Это значение можно изменить вручную в зависимости от нагрузки. Однако учтите, что слишком большое значение параметра увеличивает нагрузку на процесс выполнения контрольных точек и обслуживающие процессы, а слишком маленькое значение приводит к полной загрузке одного из ядер.
bgwriter_lru_multiplier и bgwriter_lru_maxpagesКоличество «грязных» буферов, записанных процессом фоновой записи в каждом раунде активности4.0 и 4000 соответственноЭти значения можно увеличить вручную в зависимости от нагрузки, чтобы процесс фоновой записи сбрасывал «грязные» буферы более активно. Однако слишком высокие значения могут привести к чрезмерным записям на диск.
effective_io_concurrency Количество одновременных операций ввода-вывода на диск, которое каждый отдельный сеанс Postgres Pro пытается выполнять параллельно 500 Это значение можно скорректировать в зависимости от типа диска. Автоматически заданное значение подходит для SSD-дисков с поддержкой NVMe. Для SSD-дисков с поддержкой SATA установите значение 200, для HDD-дисков — 1.
random_page_cost Приблизительная стоимость чтения одной произвольной страницы с диска 1.1 Это значение можно скорректировать в зависимости от типа диска. Автоматически заданное значение подходит для SSD-дисков с поддержкой NVMe. Для SSD-дисков с поддержкой SATA установите значение 1.3, для HDD-дисков — 4.0.
autovacuum_max_workers Максимальное количество одновременно выполняющихся рабочих процессов автоочисткиЯдра ЦП/2 (не менее 4 и не более 100)Это значение можно увеличить, так как большее число запросов на запись, выполняющихся в системе, требует больше процессов автоочистки. При этом значение должно быть в диапазоне от 4 до 100.

K.3.2.2. Настройка temp_tablespaces

Укажите каталог, в котором будут создаваться временные таблицы и индексы временных таблиц, используя параметр конфигурации temp_tablespaces. Обычно решения 1C используют множество временных таблиц. Для увеличения производительности при работе с такими таблицами расположите этот каталог на отдельных быстрых дисках.

Чтобы корректно настроить temp_tablespaces, выполните следующие действия:

  1. Создайте каталог, который будет служить точкой монтирования:

      sudo mkdir -p путь_к_каталогу
      
  2. Остановите сервер Postgres Pro:

      systemctl stop имя_сервера
      
  3. Подключите быстрый диск к созданному каталогу:

      sudo mount имя_диска путь_к_каталогу
      
  4. Предоставьте пользователю postgres права владельца в каталоге и убедитесь, что только у этого пользователя есть полный доступ:

      sudo chown postgres:postgres путь_к_каталогу
      sudo chmod 700 путь_к_каталогу
      
  5. Запустите сервер Postgres Pro:

      systemctl start имя_сервера
      
  6. Создайте табличное пространство в подготовленном каталоге:

      CREATE TABLESPACE имя_табличного_пространства LOCATION 'путь_к_каталогу';
      
  7. Установите параметр temp_tablespaces:

      temp_tablespaces = имя_табличного_пространства
      
  8. Чтобы применить изменения, перезагрузите конфигурацию:

      SELECT pg_reload_conf();
      

K.3.2.3. Другие параметры, настраиваемые вручную

Параметры, перечисленные ниже, не задаются pgpro_tune, но они важны для повышения производительности решений 1C. Как правило, для работы достаточно значений, установленных по умолчанию, однако о них не следует забывать и в особых случаях рекомендуется их корректировать.

Таблица K.2. Параметры, настраиваемые вручную

ПараметрОписаниеРекомендуемое значениеПричина для изменения вручную
fsync Указывает, пытается ли сервер Postgres Pro добиться, чтобы изменения были записаны на диск физически, выполняя системные вызовы fsync()on (значение по умолчанию)Убедитесь, что параметр включён. Хотя отключение этого параметра часто даёт повышение производительности, это может привести к неисправимой порче данных в случае отключения питания или сбоя системы. Если параметр включён, кластер можно будет восстановить до согласованного состояния.
geqo Включает генетический оптимизатор запросов (Genetic Query Optimizer, GEQO), который осуществляет планирование запросов, применяя эвристический поискon (значение по умолчанию)Этот параметр можно отключить, если предпочтительно использование алгоритма исчерпывающего поиска, который даёт более эффективные планы запросов с несколькими соединениями, но при этом увеличивает время планирования.
geqo_threshold Минимальное количество элементов FROM в запросе, для которого будет использоваться генетический оптимизатор запросов (Genetic Query Optimizer, GEQO)12 (значение по умолчанию)Это значение можно изменить, чтобы контролировать использование GEQO. Меньшие значения включают GEQO для меньшего числа соединений, сокращая время планирования и потенциально снижая эффективность планов. Более высокие значения увеличивают время работы GEQO, что позволяет использовать исчерпывающий поиск среди большего числа шаблонов запросов.
autovacuum Контролирует запуск демона автоочистки на сервереon (значение по умолчанию)Убедитесь, что этот параметр включён. Отключение параметра приводит к увеличению размера базы данных и значительному ухудшению производительности.