В этом документе описывается, как настроить параметры конфигурации сервера Postgres Pro для максимальной производительности и стабильности при работе с решениями 1C.
Для быстрой автоматической настройки 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.
В частности пресет 1c.tune позволяет настроить параметры, специально предназначенные для повышения производительности и эффективности использования ресурсов для нагрузок 1C. Значения этих параметров задаются автоматически и, как правило, не требуют изменений вручную.
Таблица K.1. Параметры, специфичные для 1C и задаваемые пресетом 1c.tune
| Параметр | Значение, задаваемое pgpro_tune | Описание и польза для 1C |
|---|---|---|
| skip_temp_rel_lock | on | Пропускает ненужные блокировки для временных отношений и их индексов. Это полезно, поскольку решения 1C часто создают и используют такие отношения. |
| enable_temp_memory_catalog | on | Включает использование системного каталога в оперативной памяти для временных таблиц, функций, процедур, последовательностей и других временных объектов. Эта функциональность помогает избежать чрезмерных записей в каталог, вызванных этими объектами, и улучшить общую производительность для решений 1C, которые активно используют временные объекты. |
| planner_upper_limit_estimation | on | Включает возможность планировщика запросов завышать оценку ожидаемого количества строк в выражениях, содержащих сравнение с неизвестной константой. Это значительно улучшает планирование для сложных запросов 1C без потери качества планов. |
Для большинства сред значения пресетов обеспечивают оптимальную производительность. Однако в ряде особых случаев их можно скорректировать.
В этом разделе описаны параметры конфигурации, которые или автоматически задаются pgpro_tune, но могут потребовать корректировки вручную, или не задаются утилитой вообще и требуют ручной настройки для оптимальной работы решений 1C.
В таблице ниже перечислены параметры, которые автоматически настраиваются с помощью pgpro_tune. Однако в ряде случаев они могут потребовать изменений вручную.
Таблица K.2. Автоматически задаваемые параметры с рекомендуемым диапазоном значений
| Параметр | Описание | Значение, задаваемое pgpro_tune | Причина для изменения вручную |
|---|---|---|---|
| shared_buffers | Объём памяти, выделяемый базой данных для кеширования данных |
| Для повышения производительности это значение можно увеличить. Не рекомендуется устанавливать значение ниже 25% от доступного объёма оперативной памяти. |
| work_mem | Максимальный объём памяти, который будет использоваться одной операцией запроса перед записью на временные файлы диска |
512MB
| Это значение можно увеличить в зависимости от доступных ресурсов, чтобы в памяти можно было выполнять больше операций с сокращением количества ввода-вывода. Однако слишком большое значение может привести к нехватке памяти. Рекомендуется постепенно увеличивать значение параметра, отслеживая общую нагрузку на память. |
| temp_buffers | Максимальный объём памяти, используемый для временных буферов в рамках каждого сеанса баз данных |
256MB
| Это значение можно изменить, чтобы обеспечить корректную обработку всех временных таблиц. Рекомендуемое значение — 50% от work_mem. Оно также не должно превышать 256MB, поскольку большие значения могут снизить производительность. Точное значение зависит от объёма памяти на сервере и количества одновременных подключений. Чем больше подключений и меньше объём памяти, тем меньше должно быть значение параметра. |
| maintenance_work_mem | Максимальный объём памяти, который будет использоваться одной операцией обслуживания базы данных, например VACUUM или CREATE INDEX |
|
Это значение можно изменить, так как в сеансе базы данных одновременно может выполняться только одна такая операция. Более высокие значения могут улучшать производительность операций очистки и восстановления базы данных из копии. Рекомендуемое максимальное значение — |
| 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. |
temp_tablespaces #Укажите каталог, в котором будут создаваться временные таблицы и индексы временных таблиц, используя параметр конфигурации temp_tablespaces. Обычно решения 1C используют множество временных таблиц. Для увеличения производительности при работе с такими таблицами расположите этот каталог на отдельных быстрых дисках.
Чтобы корректно настроить temp_tablespaces, выполните следующие действия:
Создайте каталог, который будет служить точкой монтирования:
sudo mkdir -p путь_к_каталогу
Остановите сервер Postgres Pro:
systemctl stop имя_сервера
Подключите быстрый диск к созданному каталогу:
sudo mountимя_дискапуть_к_каталогу
Предоставьте пользователю postgres права владельца в каталоге и убедитесь, что только у этого пользователя есть полный доступ:
sudo chown postgres:postgresпуть_к_каталогуsudo chmod 700путь_к_каталогу
Запустите сервер Postgres Pro:
systemctl start имя_сервера
Создайте табличное пространство в подготовленном каталоге:
CREATE TABLESPACEимя_табличного_пространстваLOCATION 'путь_к_каталогу';
Установите параметр temp_tablespaces:
temp_tablespaces = имя_табличного_пространства
Чтобы применить изменения, перезагрузите конфигурацию:
SELECT pg_reload_conf();
Параметры, перечисленные ниже, не задаются pgpro_tune, но они важны для повышения производительности решений 1C. Как правило, для работы достаточно значений, установленных по умолчанию, однако о них не следует забывать и в особых случаях рекомендуется их корректировать.
Таблица K.3. Параметры, настраиваемые вручную
| Параметр | Описание | Рекомендуемое значение | Причина для изменения вручную |
|---|---|---|---|
| fsync | Указывает, пытается ли сервер Postgres Pro добиться, чтобы изменения были записаны на диск физически, выполняя системные вызовы fsync() | on (значение по умолчанию) | Убедитесь, что параметр включён. Хотя отключение этого параметра часто даёт повышение производительности, это может привести к неисправимой порче данных в случае отключения питания или сбоя системы. Если параметр включён, кластер можно будет восстановить до согласованного состояния. |
| geqo | Включает генетический оптимизатор запросов (Genetic Query Optimizer, GEQO), который осуществляет планирование запросов, применяя эвристический поиск | on (значение по умолчанию) | Этот параметр можно отключить, если предпочтительно использование алгоритма исчерпывающего поиска, который даёт более эффективные планы запросов с несколькими соединениями, но при этом увеличивает время планирования. |
| geqo_threshold | Минимальное количество элементов FROM в запросе, для которого будет использоваться генетический оптимизатор запросов (Genetic Query Optimizer, GEQO) | 12 (значение по умолчанию) | Это значение можно изменить, чтобы контролировать использование GEQO. Меньшие значения включают GEQO для меньшего числа соединений, сокращая время планирования и потенциально снижая эффективность планов. Более высокие значения увеличивают время работы GEQO, что позволяет использовать исчерпывающий поиск среди большего числа шаблонов запросов. |
| autovacuum | Контролирует запуск демона автоочистки на сервере | on (значение по умолчанию) | Убедитесь, что этот параметр включён. Отключение параметра приводит к увеличению размера базы данных и значительному ухудшению производительности. |