Утилита Pangolin Tuner. Тюнинг параметров
Разработана утилита Pangolin Tuner (pangolin-tuner), которая предоставляет гибкое и эффективное управление конфигурацией СУБД, оптимизируя ее производительность путем тонкой настройки параметров (список конфигурируемых параметров подробнее смотрите в подразделе «Формулы расчета параметров»).
Pangolin Tuner — это инструмент для работы с конфигурацией Postgres-like СУБД, предназначенный для оптимизации производительности баз данных в различных сценариях использования. Инструмент автоматически определяет оптимальные настройки в зависимости от профиля рабочей нагрузки / профиля использования. Это позволяет значительно сократить время настройки и минимизировать риски, связанные с неправильной конфигурацией.
Утилита поставляется в виде отдельного rpm/deb-пакета pangolin-tuner-{version_component}-{OS}.x86_64.rpm в основной части дистрибутива продукта СУБД Pangolin. При установке будет создан рабочий каталог /opt/pangolin-tuner.
Утилита не требует наличия установленной СУБД на целевом сервере и поддерживает опциональные параметры для расчета, что делает ее универсальным инструментом для различных сценариев установки Postgres-like СУБД.
Схема процесса работы утилиты:

Установка
Ручная установка
Для установки компонента ручным способом обратитесь к одноименному подразделу в разделе «Ручная пошаговая установка».
Автоматизированная установка
При запуске автоматизированной установки утилита Pangolin Tuner будет установлена и запущена автоматически с выбранным профилем.
Настройка
В разделе описываются основные функции и возможности инструмента.
Утилита использует набор предопределенных формул для вычисления оптимальных значений параметров конфигурации СУБД. Эти формулы учитывают:
- выбранный профиль (OLAP, OLTP, 1C);
- характеристики локального стенда (CPU, MEM и дисковое пространство);
- опциональные параметры (
dtype,cpu,mem,platform,dbmsver).
Минимальные значения для расчета параметров конфигурации:
CPU = 4
MEM = 8GB
Профили использования
Pangolin Tuner поддерживает три готовых профиля рабочей нагрузки, каждый из которых адаптирован под конкретные потребности:
- OLAP: Оптимизация для аналитических запросов, характеризующихся обработкой больших объемов данных и сложными вычислениями. Настройки ориентированы на оптимизацию агрегации данных, параллельности выполнения задач и эффективного использования ресурсов памяти.
- OLTP: Оптимизация для транзакционных операций, где приоритетом является высокая скорость обработки, низкая задержка и целостность данных. Настройки направлены на минимизацию блокировок, оптимизацию ввода/вывода и эффективное использование ресурсов процессора.
- 1C: Специфическая конфигурация для интеграции с системой 1C:Предприятие. Настройки учитывают особенности взаимодействия с платформой 1C, оптимизируя производительность для типичных сценариев использования. Содержит рекомендации по параметрам с фиксированными значениями.
Опциональные параметры утилиты
Утилита предоставляет гибкие настройки для оптимизации выполнения задач в различных сценариях. Эти настройки позволяют пользователям адаптировать утилиту под конкретные требования, такие как тип дискового пространства, использование процессорных ресурсов, объем оперативной памяти и версия СУБД.
В случае, если утилита развернута не на том стенде, где будет эксплуатироваться СУБД — расчет будет производится на основе значений переданных параметров.
Параметр | Описание | Значение |
|---|---|---|
| Тип дискового пространства | Варианты значений: |
| Количество процессорных ядер или процессоров | Варианты значений: |
| Объем оперативной памяти (RAM) | Варианты значений: |
| Платформа | Варианты значений: |
| Версия СУБД | Значение в формате семантического версионирования |
Формулы расчета параметров
В таблицах описываются формулы, по которым утилита Pangolin Tuner формирует значение параметров конфигурации.
Параметры памяти
Параметр | Описание | Формула расчета |
|---|---|---|
| Определяет количество памяти, выделенной для кеширования данных | Все профили: <br />
: (25% от RAM)<br />
RAM > 32\text{GB} : (40% от RAM)<br />
В случае, если итоговое значение превышает 50 Гбайт, автоматически устанавливается значение |
| Определяет количество памяти, выделенной для сортировки и хеширования | OLTP: |
| Определяет количество памяти, выделенной для операций обслуживания базы данных, таких как | Все профили: <br />
: |
| Определяет предполагаемый размер кеша операционной системы | Все профили: |
| Определяет количество памяти, выделенной для временных таблиц и временных файлов | OLTP:<br />
: |
| Определяет стоимость случайного чтения страницы с диска | OLTP: |
| Определяет стоимость последовательного чтения страницы с диска | Все профили: |
| Определяет стоимость обработки одной строки данных | Все профили: |
| Определяет максимальное количество таблиц в запросе, при котором планировщик будет пытаться объединить их в один подзапрос | OLTP: |
| Определяет максимальное количество таблиц в запросе, при котором планировщик будет пытаться объединить их в один подзапрос | OLTP: |
| Управляет включением или отключением генетического оптимизатора запросов | Все профили: |
| Определяет порог сложности запроса, при превышении которого генетический оптимизатор будет использоваться | Все профили: |
| Определяет минимальную продолжительность выполнения запроса, при которой он будет записан в журнал, в миллисекундах | OLTP: |
Параметры производительности
Параметр | Описание | Формула расчета |
|---|---|---|
| Определяет максимальное количество подготовленных транзакций | OLTP: |
| Определяет максимальное количество фоновых процессов | Все профили:<br />
: |
| Определяет количество одновременных операций ввода-вывода | Все профили:<br />- для машин с SSD: |
| Определяет максимальное количество параллельных рабочих процессов | OLTP: <br /> 1С: <br /> OLAP: |
| Определяет максимальное количество параллельных рабочих процессов для операции | OLTP: |
| Определяет максимальное количество открытых файлов для одного процесса | OLTP: |
| Определяет максимальное количество блокировок, которые могут быть удержаны одной транзакцией | OLTP: |
Параметры журнала транзакций (WAL)
Параметр | Описание | Формула расчета (все профили) |
|---|---|---|
| Определяет количество памяти, выделенной для буферов журнала транзакций | : |
| Определяет целевую продолжительность контрольной точки |
|
| Определяет максимальное время между контрольными точками, в секундах |
|
Параметры реликации
Параметр | Описание | Формула расчета |
|---|---|---|
| Определяет максимальный размер WAL файлов | Все профили: |
| Определяет минимальный размер WAL файлов | Все профили:<br />
: |
| Определяет сжатие WAL с использованием указанного метода сжатия | OLTP:<br />
\text{CPU} > 8 : |
| Определяет, как PostgreSQL будет обращаться к ядру, чтобы принудительно сохранить WAL на диск | Все профили: |
Параметры автоочистки
Параметр | Описание | Формула расчета |
|---|---|---|
| Определяет, включена ли автоочистка | Все профили: |
| Определяет максимальное количество рабочих процессов автоочистки | Все профили:<br /> <br /> \text{CPU} > 32 : 7 + \frac{\text{CPU}}{16} |
| Определяет задержку между операциями автоочистки, в миллисекундах | Все профили: |
| Определяет минимальную продолжительность выполнения автоочистки, при которой она будет записана в журнал, в секундах | Все профили: |
| Определяет время ожидания между запусками автоочистки, в секундах | Все профили: |
| Определяет долю таблицы, которая должна быть изменена, прежде чем автоочистка будет запущена | Все профили: |
| Определяет долю таблицы, которая должна быть изменена, прежде чем автоочистка будет запущена для анализа | Все профили: |
| Управляет задержкой между запусками фонового процесса, который записывает измененные страницы из кеша в табличные пространства, в миллисекундах | Все профили: |
| Определяет максимальное количество страниц, которые фоновый процесс может записать за один цикл | Все профили: |
| Определяет множитель, который используется для определения количества страниц, которые фоновый процесс должен записать за один цикл | Все профили: |
| Включает или отключает использование планов выполнения запросов (outlines) для оптимизации запросов | Все профили: |
| Включает или отключает мониторинг даты изменения объектов базы данных | Все профили: |
| Включает или отключает сбор статистики по времени ввода-вывода | Все профили: |
Прочие параметры (профиль 1С)
| Параметр | Описание | Значение (только для профиля 1С) |
|---|---|---|
optimize_for_1C | Включение поддержки 1С на развернутом экземпляре Pangolin | on |
escape_string_warning | Включает или отключает предупреждения о неправильных escape-последовательностях | off |
standard_conforming_strings | Включает или отключает соответствие строк стандарту SQL | off |
row_security | Определяет, включена ли функция Row-Level Security для текущей сессии | off |
plantuner.fix_empty_table | Включает или отключает исправление пустых таблиц | on |
commit_delay | Определяет задержку перед фиксацией транзакции, в микросекундах | 1000 |
enable_bitmapscan | Включает или отключает использование битовых сканирований | on |
enable_hashagg | Включает или отключает использование хеш-агрегаций | on |
enable_hashjoin | Включает или отключает использование хеш-объединений | on |
enable_indexscan | Включает или отключает использование индексных сканирований | on |
enable_indexonlyscan | Включает или отключает использование индексных сканирований только по индексу | on |
enable_material | Включает или отключает использование материализации | on |
enable_nestloop | Включает или отключает использование вложенных циклов | on |
enable_seqscan | Включает или отключает использование последовательных сканирований | on |
enable_sort | Включает или отключает использование сортировок | on |
enable_tidscan | Включает или отключает использование сканирования по TID | on |
enable_mergejoin | Включает или отключает использование объединений слиянием | on |
lc_messages | Настройка нужной локали для объектов БД | ru_RU.UTF-8 |
lc_monetary | Настройка нужной локали для объектов БД | ru_RU.UTF-8 |
lc_numeric | Настройка нужной локали для объектов БД | ru_RU.UTF-8 |
lc_time | Настройка нужной локали для объектов БД | ru_RU.UTF-8 |
enable_temp_memory_catalog | Включение in-memory каталога для временных объектов | on |
show_temp_catalog_entries | Параметр определяет, показывать или нет информацию о временных объектах во всех системных представлениях типа pg_class, а также psql метакомандах типа \dt. Имеет смысл только при enable_temp_memory_catalog = on. | on |
log2_temp_objects_hash_partitions | Количество секций в общей внутренней структуре памяти для учета используемых временными объектами OID. Имеет смысл только при enable_temp_memory_catalog = on | 7 |
deferred_temp_table_placement | Включение режима отложенной записи для временных объектов | on |
check_temp_relfile_on_create | Перенос проверки при создании временной таблицы на то, что файл с таким именем уже существует, до того момента, когда временная таблица будет реально писаться на СХД; параметр работает только при deferred_temp_table_placement = on | off |
enable_outer_join_limit_pushdown | Оптимизация для популярного в 1C шаблона запросов select ... from t1 left outer join t2 on ... where ... order by t1.f1, t1.f2 ... limit X | on |
Иные параметры
| Параметр | Описание | Значение (все профили) |
|---|---|---|
autovacuum_work_mem | Определяет количество памяти, которое автоочистка может использовать для сортировки таблиц и индексов | -1 |
debug_pretty_print | Включает или отключает форматирование отладочной информации для улучшения читаемости | on |
hot_standby_feedback | Включает или отключает обратную связь от резервного сервера для улучшения производительности | on |
log_connections | Включает или отключает логирование успешных подключений к серверу | on |
log_disconnections | Включает или отключает логирование отключений от сервера | on |
log_lock_waits | Включает или отключает логирование длительных ожиданий блокировок | on |
log_replication_commands | Включает или отключает логирование команд репликации | on |
log_rotation_size | Определяет максимальный размер файла журнала, после которого происходит ротация | 100MB |
log_temp_files | Включает или отключает логирование создания временных файлов (значение задается в килобайтах, -1 — отключить, 0 — логировать все) | 262144 (256 MB) |
log_truncate_on_rotation | Включает или отключает усечение старых файлов журнала при ротации | on |
logging_collector | Включает или отключает сбор журналов в отдельные файлы | on |
cron.max_running_jobs | Определяет максимальное количество одновременно выполняемых задач cron | 3 |
track_activities | Включает или отключает сбор статистики о выполнении функций | on |
track_functions | Включает или отключает сбор статистики о выполнении функций | none |
wal_keep_size | Определяет минимальное количество WAL, которое должно быть сохранено для репликации | 8GB |
wal_log_hints | Включает или отключает логирование подсказок WAL | on |
wal_receiver_status_interval | Определяет интервал времени для обновления статуса приемника WAL, в секундах | 1s |
logical_decoding_work_mem | Определяет количество памяти, используемой для логической декодировки | 64MB |
pgaudit.log | Включает или отключает логирование аудита | none |
performance_insights.enable | Включает или отключает сбор данных для анализа производительности | off |
pg_stat_statements.track | Определяет, какие операторы должны быть отслежены модулем pg_stat_statements | all |
pg_stat_statements.max | Определяет максимальное количество операторов, которые могут быть сохранены модулем pg_stat_statements | 5000 |
pg_hint_plan.parse_messages | Включает или отключает разбор сообщений подсказок плана | warning |
pg_hint_plan.message_level | Определяет уровень сообщений для подсказок плана | log |
masking_mode | Определяет режим маскирования данных | disabled |
relnuffs_enable | Включает или отключает сбор статистики о блоках отношений | off |
enable_monitor_object_modification_date | Включает или отключает мониторинг даты изменения объектов | off |
log2_num_lock_partitions | Определяет число частей, на которые будет поделена общая таблица блокировок, и количество легких блокировок в транше LWLock:LockManager (2^log2_num_lock_partitions) | 7 |
log2_fastpath_num_groups | Определяет размер внутренней структуры fast-path (2^log2_fastpath_num_groups) | -1 |
enable_wal_locking_reduction | Оптимизация в WAL подсистеме; при большом потоке WAL позволяет улучшить производительность на 20+% | on |
Управление
Интерфейс утилиты
Входные параметры:
Pangolin Tuner принимает следующие аргументы командной строки:
--configили-c: путь до конфигурационного файла (обязательный аргумент);--output-fileили-r: путь до файла для фиксации вывода работы утилиты;--diffили-d: формат вывода рекомендаций в виде diff;--profileили-p: профиль для формирования списка параметров (по умолчаниюoltp);--optionили-o: опциональные параметры (возможные параметры:dtype,cpu,mem,platform,dbmsver);--helpили-h: вывод справки и завершение работы;--versionили-v: вывод текущей версии утилиты и завершение работы;--logили-l: уровень логирования (по умолчаниюinfo).
Вывод команды pangolin-tuner --help
pangolin-tuner --help
usage: pangolin-tuner -c CONFIG [-h] [-r OUTPUT_FILE] [-d DIFF] [-p {oltp,1c,olap}] [-o OPTION] [-v] [-l {info,debug}]
pangolin-tuner -c file tune configuration for profile by default
or: pangolin-tuner -c file -p oltp tune configuration for custom profile
or: pangolin-tuner -c file -l debug tune configuration for profile by default with custom log level
or: pangolin-tuner -c file -r /path/to/file.conf tune configuration for profile by default with custom path output file
or: pangolin-tuner -c file -o cpu=10 tune configuration for profile by default with custom options
Pangolin Tuner is a Pangolin DBMS configuration tool designed to optimize database performance in various usage scenarios.
options:
-h, --help show this help message and exit
-c CONFIG, --config CONFIG
path to the current configuration file
-r OUTPUT_FILE, --output-file OUTPUT_FILE
path to result configuration file
-d, --diff format result configuration file
-p {oltp,1c,olap}, --profile {oltp,1c,olap}
profile for parameter tuning
-o OPTION, --option OPTION
optional parameters
-v, --version show version and exit
-l {info,debug}, --log {info,debug}
logging level
Выходные параметры:
По умолчанию утилита генерирует результат в формате Key-Value в консоль, содержащий рассчитанные оптимальные значения параметров. При использовании аргументов --diff/ --output-file вывод будет сгенерирован в формате diff, либо записан в файл соответственно.
Поддерживаемые форматы исходного файла: yaml/conf. При повторной генерации Pangolin Tuner будет перезаписывать файл, если такой уже существует. Содержимое файла будет включать в себя не только рекомендованные параметры, но и основной состав параметров из исходного конфиграционного файла. Параметры из include-файлов не учитываются в расчете.
Необходимо отдельно учитывать особенности настройки параметров на стендах с включенной защитой конфигурации.
Пример вывода работы утилиты Pangolin Tuner + лог-сообщение
pangolin_tuner % pangolin-tuner --config /tmp/postgres.conf
archive_command = /opt/pangolin-backup-tools/bin/pg_probackup archive-push -B /pgarclogs/06 --instance clustername --wal-file-path=%p --wal-file-name=%f --compress --overwrite -j 4 --batch-size=100
archive_mode = False
archive_timeout = 180
auth_activity_period = 60
authentication_max_workers = 16
authentication_port = 5544
authentication_proxy = 1
autounite = True
autounite_max_children_count = 0
autounite_naptime = 60
autounite_parent_children_size_ratio = 0
autounite_pause_period =
autovacuum_work_mem = 165MB
checkpoint_completion_target = 0.9
checkpoint_timeout = 1800
client_min_messages = notice
cluster_name = clustername
cron.database_name = postgres
cron.max_running_jobs = 3
datestyle = iso, mdy
debug_pretty_print = False
default_statistics_target = 100
default_text_search_config = pg_catalog.english
disk_check_tablespaces_count = 128
disk_check_timeout = 5
disk_operation_timeout = 3
disk_retry_count = 3
effective_cache_size = 12GB
effective_io_concurrency = 10
enable_filesystem_checker = False
enable_monitor_object_modification_date = False
enabled_extra_auth_methods = cert
enabled_sec_admin_extra_auth_methods = cert,md5
force_failover_timeout = 160
fsync = True
full_page_writes = True
grace_authid_enable = False
grace_authid_period = 0
grace_authid_skip_error = False
hot_standby = on
hot_standby_feedback = True
installer.cluster_type = cluster-patroni-etcd-pgbouncer
installer.inner_role_model = True
is_tde_on = False
lc_messages = en_US.utf8
lc_monetary = en_US.utf8
lc_numeric = en_US.utf8
lc_time = en_US.utf8
listen_addresses = 0.0.0.0
log_checkpoints = True
log_connections = True
log_destination = stderr
log_directory = /pgerrorlogs/06
log_disconnections = True
log_file_mode = 420
log_filename = postgresql-%Y-%m-%d_%H%M%S.log
log_line_prefix = %t [%p]: [%l-1] app=%a,user=%u,db=%d,client=%h,type=%b
log_lock_waits = True
log_min_duration_statement = 3000
log_min_error_statement = WARNING
log_replication_commands = True
log_rotation_age = 1440
log_rotation_size = 100MB
log_statement = none
log_temp_files = 0
log_timezone = Europe/Moscow
log_truncate_on_rotation = True
logging_collector = True
logical_decoding_work_mem = 64MB
maintenance_work_mem = 1GB
max_connections = 110
max_locks_per_transaction = 64
max_parallel_workers = 6
max_parallel_workers_per_gather = 2
max_prepared_transactions = 0
max_replication_slots = 10
max_standby_archive_delay = 30s
max_standby_streaming_delay = 30s
max_wal_senders = 10
max_wal_size = 12GB
max_worker_processes = 12
min_wal_size = 3.0GB
monitoring_ldap_servers = ^<server_name>$
object_modification_date_keep_interval = 1 week
password_encryption = scram-sha-256
password_policy.allow_hashed_password = False
password_policy.alpha_numeric = 3
password_policy.check_syntax = True
password_policy.deduplicate_ssl_no_ssl_fail_auth_attepmts = True
password_policy.deny_default = False
password_policy.expire_warning = 7 days
password_policy.failure_count_interval = 0
password_policy.grace_login_limit = 0
password_policy.grace_login_time_limit = 3 days
password_policy.illegal_values = True
password_policy.in_history = 4
password_policy.lockout = True
password_policy.lockout_duration = 24 hours
password_policy.max_age = 0
password_policy.max_failure = 6
password_policy.max_inactivity = 0
password_policy.max_rpt_chars = 0
password_policy.min_age = 0
password_policy.min_alpha_chars = 0
password_policy.min_length = 16
password_policy.min_lowercase = 0
password_policy.min_special_chars = 1
password_policy.min_uppercase = 1
password_policy.password_strength_estimator_score = 3
password_policy.reuse_time = 365 days
password_policy.track_login = False
password_policy.transport_password_life_time = 0
password_policy.transport_password_mark_automatic = False
password_policy.use_password_strength_estimator = True
performance_insights.enable = False
performance_insights.masking = true
performance_insights.num_samples_in_files = 17280
performance_insights.num_samples_in_ram = 12
performance_insights.sampling_enable = true
performance_insights.sampling_period = 5s
pg_hint_plan.debug_print = False
pg_hint_plan.message_level = debug
pg_hint_plan.parse_messages = warning
pg_outline.enable = False
pg_plugins_path = /opt/pangolin-dbms-server/lib
pg_profile.max_sample_age = 7
pg_profile.topn = 20
pg_profile.track_sample_timings = False
pg_stat_kcache.linux_hz = -1
pg_stat_statements.max = 5000
pg_stat_statements.track = top
pgaudit.log = ddl, role, connection, misc_set, protection
port = 5433
psql.save_history = False
psql_encrypt_password = True
random_page_cost = 1.1
relnblocks_enable = False
relnblocks_hash_init_db = 20
relnblocks_hash_init_size = 1024
relnblocks_hash_max_db = 1024
relnblocks_hash_max_size = 1000000
rotate_password.num_rounds = 20
search_path = ext
serverssl.pkcs12_config_path = /pg_ssl/intermediate/server.p12.cfg
session_tracing_default_level = 0
session_tracing_default_path = /pgdata/08/data/tracing/
session_tracing_enable = True
session_tracing_file_limit = -1
session_tracing_roles =
shared_buffers = 4GB
shared_preload_libraries = auto_explain,pg_cron,pg_stat_statements,pg_stat_kcache,pg_hint_plan,pg_outline
ssl = True
ssl_crl_dir = /pg_ssl/crl
ssl_crl_file = /pg_ssl/crl/intermediate.crl
ssl_min_protocol_version = TLSv1.2
superuser_reserved_connections = 10
synchronous_commit = True
synchronous_standby_names = "<server_name>"
syslog_facility = LOCAL3
syslog_ident = postgres
syslog_sequence_numbers = True
syslog_split_messages = False
timezone = Europe/Moscow
track_activities = True
track_commit_timestamp = False
track_counts = True
track_functions = none
track_io_timing = False
unix_socket_directories = /var/run/postgresql/
wal_buffers = 64MB
wal_keep_size = 8GB
wal_level = replica
wal_log_hints = True
wal_receiver_status_interval = 1s
wal_sync_method = fsync
work_mem = 16MB
hba_file = /pgdata/08/data/pg_hba.conf
ident_file = /pgdata/08/data/pg_ident.conf
recovery_target =
recovery_target_lsn =
recovery_target_name =
recovery_target_time =
recovery_target_timeline = latest
recovery_target_xid =
temp_buffers = 8MB
seq_page_cost = 1.0
cpu_tuple_cost = 0.01
from_collapse_limit = 8
join_collapse_limit = 8
geqo = True
geqo_threshold = 12
max_files_per_process = 1000
wal_compression = lz4
autovacuum = True
autovacuum_max_workers = 4
autovacuum_vacuum_cost_delay = 20
log_autovacuum_min_duration = 10s
autovacuum_naptime = 20s
autovacuum_vacuum_scale_factor = 0.2
autovacuum_analyze_scale_factor = 0.1
bgwriter_delay = 20ms
bgwriter_lru_maxpages = 400
bgwriter_lru_multiplier = 4.0
2025-01-19 19:01:03,198 - INFO - Tuning process successfully finished
Пример логов работы утилиты Pangolin Tuner с аргументом --output-file
pangolin_tuner % pangolin-tuner --config /tmp/postgres.conf --output-file /tmp/postgres.conf.tuner-oltp
2025-01-19 19:03:08,373 - INFO - Configuration was tuned: {path}/postgresql.conf.tuner-oltp
2025-01-19 19:03:08,373 - INFO - Tuning process successfully finished
Пример вывода работы утилиты Pangolin Tuner с аргументом --diff + лог-сообщение
pangolin_tuner % pangolin-tuner --config /tmp/postgres.yml --diff
---
+++
@@ -69,10 +69,20 @@
archive_timeout: '180'
authentication_port: '5544'
authentication_proxy: '1'
+ autovacuum: 'True'
+ autovacuum_analyze_scale_factor: '0.1'
+ autovacuum_max_workers: '4.5'
+ autovacuum_naptime: 20s
+ autovacuum_vacuum_cost_delay: '20'
+ autovacuum_vacuum_scale_factor: '0.2'
autovacuum_work_mem: 165MB
+ bgwriter_delay: 20ms
+ bgwriter_lru_maxpages: '400'
+ bgwriter_lru_multiplier: '4.0'
checkpoint_completion_target: '0.9'
checkpoint_timeout: '1800'
client_min_messages: notice
+ cpu_tuple_cost: '0.01'
cron.database_name: postgres
cron.max_running_jobs: '3'
datestyle: iso, mdy
@@ -83,15 +93,18 @@
disk_check_timeout: '5'
disk_operation_timeout: '3'
disk_retry_count: '3'
- effective_cache_size: 3976MB
- effective_io_concurrency: '300'
+ effective_cache_size: '12'
+ effective_io_concurrency: ''
enable_filesystem_checker: 'False'
- enable_monitor_object_modification_date: 'True'
+ enable_monitor_object_modification_date: 'False'
enabled_extra_auth_methods: cert
enabled_sec_admin_extra_auth_methods: cert,md5
force_failover_timeout: '160'
+ from_collapse_limit: '8'
fsync: 'True'
full_page_writes: 'True'
+ geqo: 'True'
+ geqo_threshold: '12'
grace_authid_enable: 'False'
grace_authid_period: '0'
grace_authid_skip_error: 'False'
@@ -100,11 +113,13 @@
installer.cluster_type: cluster-patroni-etcd-pgbouncer
installer.inner_role_model: 'True'
is_tde_on: 'False'
+ join_collapse_limit: '8'
lc_messages: en_US.utf8
lc_monetary: en_US.utf8
lc_numeric: en_US.utf8
lc_time: en_US.utf8
listen_addresses: 0.0.0.0
+ log_autovacuum_min_duration: 10s
log_checkpoints: 'True'
log_connections: 'True'
log_destination: stderr
@@ -114,7 +129,7 @@
log_filename: postgresql-%Y-%m-%d_%H%M%S.log
log_line_prefix: '%t [%p]: [%l-1] app=%a,user=%u,db=%d,client=%h,type=%b '
log_lock_waits: 'True'
- log_min_duration_statement: '5000'
+ log_min_duration_statement: '3000'
log_min_error_statement: WARNING
log_replication_commands: 'True'
log_rotation_age: '1440'
@@ -124,17 +139,21 @@
log_timezone: Europe/Moscow
log_truncate_on_rotation: 'True'
logging_collector: 'True'
- maintenance_work_mem: 256MB
- max_parallel_workers: '32'
+ maintenance_work_mem: 1GB
+ max_files_per_process: '1000'
+ max_locks_per_transaction: '64'
+ max_parallel_workers: '6'
max_parallel_workers_per_gather: '2'
+ max_prepared_transactions: '0'
max_standby_archive_delay: 30s
max_standby_streaming_delay: 30s
- max_wal_size: 4GB
- min_wal_size: 2GB
+ max_wal_size: '12'
+ max_worker_processes: '12'
+ min_wal_size: '3.0'
monitoring_ldap_servers: ^<server_name>$
object_modification_date_keep_interval: 1 week
password_encryption: scram-sha-256
password_policy.allow_hashed_password: 'False'
password_policy.alpha_numeric: '3'
password_policy.check_syntax: 'True'
@@ -164,7 +183,7 @@
password_policy.transport_password_life_time: '0'
password_policy.transport_password_mark_automatic: 'False'
password_policy.use_password_strength_estimator: 'True'
performance_insights.masking: 'True'
performance_insights.num_samples_in_files: '17280'
performance_insights.num_samples_in_ram: '12'
@@ -183,10 +202,12 @@
pg_stat_statements.track: top
pgaudit.log: ddl, role, connection, misc_set, protection
port: '5433'
- proverca: 'False'
+ proverca: on
+ proverca1: on
+ proverca2: on
psql.save_history: 'False'
psql_encrypt_password: 'True'
- random_page_cost: '2.0'
+ random_page_cost: '1.1'
relnblocks_enable: 'False'
relnblocks_hash_init_db: '20'
relnblocks_hash_init_size: '1024'
@@ -194,6 +215,7 @@
relnblocks_hash_max_size: '1000000'
rotate_password.num_rounds: '20'
search_path: ext
+ seq_page_cost: '1.0'
serverssl.pkcs12_config_path: /pg_ssl/intermediate/server.p12.cfg
shared_buffers: 4GB
shared_preload_libraries: auto_explain,pg_stat_statements,pg_stat_kcache,pg_cron,pg_hint_plan,pg_outline,pg_pathman
@@ -206,17 +228,18 @@
syslog_ident: postgres
syslog_sequence_numbers: 'True'
syslog_split_messages: 'False'
- temp_buffers: 256
+ temp_buffers: '8'
timezone: Europe/Moscow
track_activities: 'True'
track_counts: 'True'
track_functions: none
- track_io_timing: 'True'
+ track_io_timing: 'False'
unix_socket_directories: /var/run/postgresql/
- wal_buffers: 16MB
+ wal_buffers: 64GB
+ wal_compression: lz4
wal_receiver_status_interval: 1s
wal_sync_method: fsync
- work_mem: 17MB
+ work_mem: 16MB
pg_hba:
- hostssl all postgres 127.0.0.1/32 cert
- host all profile_tuz 127.0.0.1/32 scram-sha-256
2024-12-11 13:50:25,491 - INFO - Tuning process successfully finished
Логирование
Логирование работы утилиты ведется только в режиме Runtime с выводом в консоль.
Перечень сообщений лога
Варианты сообщений, которые может вернуть утилита с описанием:
MSG = {
# main
1: 'Pangolin Tuner version: {}',
2: 'Current config file: {}',
3: 'Profile: {}',
4: 'Tuning process was started',
5: 'Tuning process successfully finished',
6: 'Configuration was tuned: {}',
7: 'Not tuned',
8: 'Operation was cancelled by user',
9: 'Tuning process finished with error: {}',
# base
10: 'File {} does not exist',
11: 'Incorrect file format: {}. Acceptable: .conf, .yml, .yaml',
12: 'Reading configuration: {}',
13: 'Error reading configuration {}: {}',
14: 'Building diff report for configurations: {}',
15: 'Got error while building diff report: {}',
16: 'Tuning configuration: {}',
17: 'Got error while tuning configuration: {}',
18: 'Writing configuration: {}',
19: 'Got error while writing configuration: {}',
# tuner
20: '--- CPU Info --- {}',
21: '--- Memory Info --- {}',
22: 'Profile {} is not recognized',
23: 'Invalid option format: {}. Expected format: key=value',
24: 'CPU value is unacceptable as DBMS Pangolin will not be able to work correctly with the suggested setting. The default value was used by tuning process: {}',
25: 'MEM value is unacceptable as DBMS Pangolin will not be able to work correctly with the suggested setting. The default value was used by tuning process: {}',
26: 'Providing recommendations for DBMS {} version: {}',
27: 'Error printing configuration contents',
28: 'The tool processes only the limited list of parameters. The parameters out of the list are not considered for optimizing. The detailed list can be found in the documentation of Pangolin product',
29: 'Invalid platform value: {}. Expected one of \'pangolin\', \'postgresql\'.',
30: 'Unsupported DBMS version: {}',
}
Утилита поддерживает следующие уровни логирования:
INFO(по умолчанию) - вывод базовых информационных сообщений о статусе работы утилиты.DEBUG- вывод расширенных информационных сообщений о действиях работы утилиты.ERROR- сообщения об ошибках, препятствующих корректной работе утилиты (например, отсутствие конфигурационного файла).
Уровень логирования можно настроить с помощью аргумента --log/-l. Пример команды:
pangolin-tuner --config /pgdata/data/data/postgresql.conf --log DEBUG
Формат вывода лога: <дата и время> - <уровень логирования> - <текст сообщения>.
Пример логов о работе Pangolin Tuner с различными уровнями логирования:
2024-12-11 13:59:14,330 - INFO - Configuration was tuned: /tmp/postgres.yml.tune-oltp
2024-12-11 13:59:14,330 - INFO - Tuning process successfully finished
---
2024-12-11 14:14:55,523 - DEBUG - Pangolin Tuner version: 1.0.0
2024-12-11 14:14:55,523 - DEBUG - Current config file: /tmp/postgres.yml
2024-12-11 14:14:55,523 - DEBUG - Profile: oltp
2024-12-11 14:14:55,523 - DEBUG - Providing recommendations for DBMS Pangolin version: 6.1.1
2024-12-11 14:14:55,523 - DEBUG - Tuning process was started
2024-12-11 14:14:55,523 - DEBUG - Reading configuration: /tmp/postgres.yml
---
2024-12-11 14:14:22,665 - ERROR - File /tmp/postgres_test.yml does not exist
---
2024-12-24 09:45:40,213 - WARNING - CPU value is unacceptable as DBMS Pangolin will not be able to work correctly with the suggested setting. The default value was used by tuning process: 4
Требования к запуску утилиты
Для успешного запуска утилиты необходимы:
-
Локальный доступ к конфигурационному файлу и права на его чтение.
Настройку можно проводить не на сервере СУБД, а на рабочей станции пользователя, с последующим копированием на сервер;
-
Наличие прав у пользователя на запуск утилиты.
Ограничения
Обратите внимание на данные ограничения:
- Рекомендации, полученные с помощью утилиты Pangolin Tuner, не следует рассматривать как окончательный вариант конфигурации.
- Утилита обрабатывает только тот конфигурационный файл, который был передан ей на вход.
- Утилита не отвечает за применение созданного файла конфигурации, перечитывания или перезапуск служб.
- Кастомизация параметров, таких как
shared_preload_libraries,search_path,ssl, включение/отключение расширений и другие подобные настройки, утилитой не выполняется. Однако она может предоставить рекомендации по их настройке в закомментированном виде. - Запуск утилиты Pangolin Tuner в Docker должен выполняться с опциональными параметрами, определяющими количество CPU и памяти, для корректного расчета значений. Это связано с особенностью вычисления значений утилитой этих характеристик. Формируемое значение соответствует общей памяти сервера и CPU, на котором развернут контейнер, а не значениям конкретного контейнера.
Сценарии использования
Использование функциональности утилиты доступно несколькими способами:
- без использования скриптов автоматизации;
- с использованием скриптов автоматизации.
Без использования скриптов автоматизации
-
Установите rpm/deb-пакет
pangolin-tuner:- SberLinux, РЕД ОС, CentOS
- Astra Linux
- Альт СП
dnf install -y <distributive>/utilities/pangolin-tuner-{version_component}-{OS}.x86_64.rpmПример:
dnf install -y distributive/utilities/pangolin-tuner-{version_component}-sberlinux{version_OS}.x86_64.rpmapt-get install -y <distributive>/utilities/pangolin-tuner_{version_component}_amd64.debapt install -y <distributive>/utilities/pangolin-tuner-{version_component}-altlinux{version_OS}.x86_64.rpm -
Запустите утилиту с необходимыми настройками:
- На стенде, где будет эксплуатироваться СУБД
- На стенде, где не будет эксплуатироваться СУБД
Сконфигурируйте файл под нужный профиль:
-
Для конфигурации standalone:
/opt/pangolin-tuner/bin/pangolin-tuner --config /pgdata/data/data/postgresql.conf --profile <профиль> --output-file /pgdata/data/data/postgresql.conf.oltp -
Для кластерной конфигурации:
/opt/pangolin-tuner/bin/pangolin-tuner --config /etc/pangolin-manager/postgres.yml --profile <профиль> --output-file /etc/pangolin-manager/postgres.yml.oltp
-
Для конфигурации standalone:
/opt/pangolin-tuner/bin/pangolin-tuner --config /pgdata/data/data/postgresql.conf --profile <профиль> --output-file /pgdata/data/data/postgresql.conf.oltp -o cpu=<количество cpu со стенда с БД> -o mem=<количество mem со стенда с БД> -o platform=<платформа> -o dbmsver=<версия СУБД> -
Для кластерной конфигурации:
/opt/pangolin-tuner/bin/pangolin-tuner --config /etc/pangolin-manager/postgres.yml --profile <профиль> --output-file /etc/pangolin-manager/postgres.yml.oltp -o cpu=<количество cpu со стенда с БД> -o mem=<количество mem со стенда с БД> -o platform=<платформа> -o dbmsver=<версия СУБД>
Внимание!Предварительно необходимо выяснить количество CPU и MEM на стенде, где будет эксплуатироваться БД.
-
Сохраните копию старого конфигурационного файла:
sudo su - postgres-
Для конфигурации standalone:
cp /pgdata/data/data/postgresql.conf /pgdata/data/data/postgresql.conf.backup -
Для кластерной конфигурации:
cp /etc/pangolin-manager/postgres.yml /etc/pangolin-manager/postgres.yml.backup
-
-
Примените новый конфигурационный файл:
sudo su - postgres-
Для конфигурации standalone:
mv /pgdata/data/data/postgresql.conf.oltp /pgdata/data/data/postgresql.conf -
Для кластерной конфигурации:
mv /etc/pangolin-manager/postgres.yml.oltp /etc/pangolin-manager/postgres.yml
-
-
Произведите перезапуск актуальной службы:
sudo su - postgres-
Для конфигурации standalone:
/opt/pangolin-dbms-server/bin/pg_ctl reload
/opt/pangolin-dbms-server/bin/pg_ctl restart -
Для кластерной конфигурации:
/opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml reload clustername
/opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml restart clustername
-