pgpro_tune

pgpro_tune — утилита командной строки для автоматической настройки

Синтаксис

pgpro_tune [параметр...] [ -D | --pgdata ]каталогимя_пресета

Описание

pgpro_tune — это утилита командной строки для автоматической настройки. Оптимальные значения различных параметров конфигурации Postgres Pro зависят от оборудования. Утилита pgpro_tune собирает информацию о системе и преобразует её в набор параметров, записываемых в файл конфигурации.

Использование

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

  • --no-tune: отключает утилиту.

  • --tune: передаёт утилите дополнительные параметры.

Утилиту можно также запустить вручную в любое время после инициализации кластера, выполнив следующую команду:

pgpro_tune -P имя_пресета

Это полезно после обновления оборудования, например добавления оперативной памяти или ядер процессора, или изменения характера нагрузки на СУБД. После ручного запуска утилиты примените обновлённые параметры конфигурации. В зависимости от того, какие параметры были изменены, вызовите функцию pg_reload_conf или перезапустите сервер.

По умолчанию pgpro_tune применяет пресет default.tune первым. Дополнительные пресеты можно задать с помощью параметра -P или --preset или указав имя пресета в качестве последнего аргумента командной строки. Можно использовать несколько пресетов одновременно. Они применяются последовательно в порядке, указанном в параметре -P или --preset. Пресет default.tune всегда применяется первым, кроме случаев, когда установлен параметр --no-default. Если один и тот же пресет указан несколько раз, он применяется повторно. Параметры конфигурации из пресетов изменяются инкрементально. В целях прозрачности промежуточные изменения записываются в файл конфигурации postgresql.conf.

Пресеты, не применяемые по умолчанию, имеют приоритет, так как они применяются после default.tune, и из значений, записанных в postgresql.conf, действуют только последние.

В данный момент доступны следующие пресеты по умолчанию:

  • default.tune: Основной на данный момент пресет, который обеспечивает различные конфигурации в зависимости от редакции и версии сервера.

  • regress.tune: Этот пресет применяется для отладки. Он отменяет изменения, произведённые конфигурационными параметрами пресета default.tune. Таким образом обеспечивается успешное выполнение регрессионных тестов, результаты которых могут различаться из-за аппаратно-зависимых настроек.

  • 1c.tune: Этот пресет содержит параметры, специфичные для , некоторые из которых требуют установки plantuner. Подробную информацию о настройках Postgres Pro для решений можно найти в Приложении K.

  • extensions.tune: Этот пресет содержит дополнительные параметры для расширений. Эти параметры требуют установки других модулей (таких как pgpro_stats).

Дополнительные параметры можно указать с помощью -O или --options для любого пресета, но для пресета по умолчанию следует использовать --default-options.

Дополнительные переменные окружения для пресета можно установить в параметре --set. Эти значения будут одинаковыми как для пресета по умолчанию, так и для всех пользовательских.

По умолчанию пресеты размещаются в каталоге share, но можно указать их расположение вручную в параметре --preset-dir.

По умолчанию pgpro_tune работает с файлом конфигурации postgresql.conf, расположенным в каталоге данных. Каталог данных можно указать с помощью -D или --pgdata, либо задать с помощью переменной окружения PGDATA. При запуске pgpro_tune в initdb утилита будет использовать каталог данных initdb.

Файл конфигурации также можно указать с помощью --config-file.

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

Параметры

--config-file=имя_файла

Указывает имя основного файла конфигурации.

-D каталог_данных
--pgdata=каталог_данных

Указывает каталог, где будет храниться кластер баз данных.

--default-options=параметры

Задаёт параметры для стандартного пресета.

--no-default

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

-O параметры-пресета
--options=параметры-пресета

Указывает параметры, которые необходимо передать непосредственно пресету, заданному ранее в параметре -P, или пресету, указанному в качестве последнего параметра командной строки, если -P не использовался.

-P имя
--preset=имя

Указывает имя пресета. Если указано несколько имён, пресеты выполняются по очереди с учётом вывода предыдущего пресета.

Примечание

Имя пресета может быть указано либо в этом параметре, либо в качестве последнего параметра. Использование обоих вариантов одновременно приведёт к ошибке.

--preset-dir=имя

Указывает каталог, содержащий пресеты. По умолчанию пресеты находятся в каталоге share.

--set имя=значение

Устанавливает переменную окружения для пресетов.

--show

Показывает все доступные пресеты из каталога, указанного в параметре --preset-dir, если он задан, или из каталога по умолчанию в противном случае.

-V
--version

Вывести версию pgpro_tune и завершиться.

-?
--help

Показать справку по аргументам командной строки pgpro_tune и завершиться.

Переменные окружения

pgpro_tune устанавливает следующие переменные окружения перед запуском пресетов.

  • EDITION — редакция Postgres Pro.

  • ENABLE_CRASH_INFO — если установлена, Postgres Pro был собран с параметром --enable-crash-info.

  • ENABLE_NLS — если установлена, Postgres Pro был собран с параметром --enable-nls.

  • ENABLE_PGPRO_TUNE — если установлена, Postgres Pro был собран с параметром --enable-pgpro-tune.

  • MEMMB — размер оперативной памяти в мегабайтах. Эта переменная окружения может быть не задана, если размер оперативной памяти невозможно достоверно определить.

  • MVER — основная версия Postgres Pro.

  • NCPU — количество процессоров. Эта переменная окружения может быть не задана, если количество процессоров невозможно достоверно определить.

  • USE_BONJOUR — если установлена, Postgres Pro был собран с параметром --with-bonjour.

  • USE_BSD_AUTH — если установлена, Postgres Pro был собран с параметром --with-bsd-auth.

  • USE_ICU — если установлена, Postgres Pro был собран с параметром --with-icu.

  • USE_LDAP — если установлена, Postgres Pro был собран с параметром --with-ldap.

  • USE_LIBUNWIND — если установлена, Postgres Pro был собран с параметром --with-libunwind.

  • USE_LIBXML — если установлена, Postgres Pro был собран с параметром --with-libxml.

  • USE_LIBXSLT — если установлена, Postgres Pro был собран с параметром --with-libxslt.

  • USE_LLVM — если установлена, Postgres Pro был собран с параметром --with-llvm.

  • USE_LZ4 — если установлена, Postgres Pro был собран с параметром --with-lz4.

  • USE_OPENSSL — если установлена, Postgres Pro был собран с параметром --with-openssl.

  • USE_PAM — если установлена, Postgres Pro был собран с параметром --with-pam.

  • USE_SYSTEMD — если установлена, Postgres Pro был собран с параметром --with-systemd.

  • USE_ZSTD — если установлена, Postgres Pro был собран с параметром --with-zstd.

Создание пресетов

Пресет — это исполняемый файл, обычно скрипт оболочки, который преобразует информацию, передаваемую через переменные окружения, в набор параметров конфигурации.

Ожидаемый вывод пресета — набор специально отформатированных строк. Первый непробельный символ — индикатор интерпретации содержимого строки для pgpro_tune. Индикатор должен быть одним из следующих символов:

  • # для комментирования, остальная часть выходной строки будет записана в файл конфигурации после «#».

  • = для замены, остальная часть выходной строки должна содержать пару параметров NAME и VALUE (приемлемы оба варианта: NAME=VALUE и NAME VALUE). Строка NAME = VALUE будет записана в файл конфигурации. Текст после VALUE будет добавлен как комментарий.

  • =+ или += для добавления, остальная часть выходной строки должна содержать пару параметров NAME и VALUE. VALUE будет добавлен к предыдущему действующему значению параметра NAME сзади (=+) или спереди (+=). Если действующего значения нет, ADD работает как замена. Текст после VALUE будет добавлен как комментарий.

  • -= для отмены, остальная часть выходной строки должна содержать пару параметров NAME и VALUE. Если параметр NAME имеет действующее значение, содержащее VALUE, оно будет удалено, а остальная часть действующего значения останется прежней. Текст после VALUE будет добавлен в качестве комментария. Если действующего значения нет, ничего не меняется.

Пример пресета

Предположим, есть следующий файл конфигурации с именем test.conf:

work_mem = 4MB # Default value
shared_preload_libraries = 'plantuner'
search_path = '"$user",wrong_schema,public'

И следующий пресет с именем test.tune:

echo "# Adding new configuration parameters."
#Replace configuration parameter value by a new one
echo "work_mem = 8MB"
#Append to the start of existing value
echo "shared_preload_libraries += pg_stat_statements"
#Append to the end of existing value
echo "shared_preload_libraries =+ pg_prewarm"
#Withdraw from existing value
echo "search_path -= 'wrong_schema'"

Чтобы использовать этот пресет, выполните следующую команду:

pgpro_tune --config-file=/path/to/test.conf -P/path/to/test.tune --no-default

Эта команда приведёт к следующим изменениям файла конфигурации:

#------------------------------------------------------------------------------
# The following settings were added by pgpro_tune.
# pgpro_tune was run with the following options:
# --config-file=/path/to/test/conf -P/path/to/test/tune --no-default
# The following presets were used:
#	"/path/to/test/tune"
# At DD.MM.YYYY HH:MM:SS
#------------------------------------------------------------------------------
# Adding new configuration parameters.
work_mem = 8MB
shared_preload_libraries = 'pg_stat_statements, plantuner'
shared_preload_libraries = 'pg_stat_statements, plantuner, pg_prewarm'
search_path = '"$user", public'
#------------------------------------------------------------------------------
# End of settings added by pgpro_tune at DD.MM.YYYY HH:MM:SS
#------------------------------------------------------------------------------