Помните, как в Корпорации Монстров страшилы добывали энергию из криков детей? Они готовились, чтобы быть пострашнее и собирать побольше энергии: репетировали жуткие звуки, подбирали реквизит, узнавали страхи ребёнка. В общем, настраивали параметры запугивания :) В мире баз данных у параметров конфигурации аналогичная роль: чем точнее настройка, тем выше производительность системы. Однако не все параметры везде работают с одинаковым эффектом (как не все монстры одинаково страшны для всех детей): какой-нибудь параметр идеален для одного профиля нагрузки, но не даёт того же результата для другого.

Администраторы БД часто ломают голову, как подобрать оптимальные настройки под задачи СУБД. И чтобы помочь им разобраться, мы обратились к опыту Майка Вазовски — тренера легендарного монстра Салли. Вдохновились секретами его тренировок и разработали утилиту Pangolin Tuner — аналог Вазовски для настройки параметров конфигурации. 

Я Кристина Демидович, DevOps-инженер в СберТехе, занимаюсь автоматизацией в команде СУБД Pangolin — это целевая СУБД в Сбере и не только. В этой статье покажу на примерах, как всё работает.

Профили и их страхи

Немного про наши условия. Каждый тип нагрузки можно рассматривать как отдельный сценарий, где параметры конфигурации нужно адаптировать для достижения наилучших результатов. Вот основные сценарии Pangolin Tuner.

OLTP. Здесь «монстры» должны быть отзывчивыми и расторопными, чтобы обрабатывать множество транзакций в реальном времени.

Пример запуска:

pangolin-tuner -c postgresql.conf

Кстати, это минимальная строка запуска для генерации настроек. Профиль используется в утилите по умолчанию.

OLAP. В этом сценарии нужны выносливые и сообразительные «монстры», готовые к обработке больших объёмов данных и сложным аналитическим запросам.

Пример запуска:

pangolin-tuner -c postgresql.conf -p olap

1C. Здесь наши «монстры» должны быть настроены для работы со специфическими требованиями платформы 1C, чтобы повысить производительность при работе с бизнес-приложениями.

Пример запуска:

pangolin-tuner -c postgresql.conf -p 1c

Утилита ожидает на входе конфигурационный файл, на основе которого формируется новый. Это обусловлено тем, что она не включает полный набор всех возможных параметров — такой подход лишил бы её гибкости. Ведь не все параметры влияют на производительность, и не все они универсально настраиваются для различных стендов. Есть параметры, принимающие значения в зависимости от особенностей конкретного стенда: shared_preload_libraries, search_path, pgport, max_connections и многие другие. Наша цель — получить на выходе готовый конфигурационный файл, который можно сразу применить на стенде.

Так как же Pangolin Tuner превращает теорию в практику?

Инструмент по пуганию в деталях

Всё довольно просто! Начнём с изучения справки.

Пример запуска:

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

Pangolin Tuner анализирует данные CPU и RAM (в ГБ) со стенда, на котором он запущен. Если же утилита запускается не там, где установлена СУБД Pangolin, то можно указать дополнительные параметры, определяющие количество CPU и RAM на целевом стенде. У параметров, заданных через опцию -o, приоритет перед автоматически определёнными значениями. Помимо этого, утилита позволяет адаптировать результат под конкретную конфигурацию системы. Например, можно указать тип дискового пространства (dtype) или версию СУБД (dbmsver).

Пример запуска:

pangolin-tuner -c postgresql.conf -o cpu=12 -o mem=18 -o dtype=ssd -o dbmsver=6.5.0

Затем Pangolin Tuner использует специальные формулы для расчёта оптимальных значений параметров на основе профиля нагрузки. Результат можно сохранить в файл или вывести в консоль по умолчанию.

Пример запуска:

pangolin-tuner -c postgresql.conf -r postgresql_tuner.conf

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

pangolin-tuner -c postgresql.conf -d

Теперь узнаем, как формируются команды монстров для каждого профиля нагрузки.

На каждого монстра своя формула

Разберу ключевые настройки, которые затрагивает Pangolin Tuner. Каждая из них важна для оптимизации производительности базы данных, особенно в контексте выбранного профиля нагрузки.

shared_buffers — этот параметр задаёт объём оперативной памяти для кеширования данных. Чем больше памяти доступно, тем эффективнее система кеширует данные, и тем больше сокращается время доступа к диску. Рекомендации зависят от объёма доступной оперативной памяти для всех профилей:

  • RAM <= 32GB: 25% RAM

  • RAM > 32GB: 40% RAM

У этого параметра есть рекомендованный предел в 50 ГБ.

work_mem — определяет объём памяти, доступный для каждой отдельной операции сортировки или хеширования. Значение зависит от характера рабочей нагрузки:

  • OLTP: 16MB 

  • 1C: 256MB

  • OLAP: минимум из двух величин — 512 MB или (RAM − shared_buffers) / 10 / 5

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

maintenance_work_mem — задаёт объём памяти для операций технического обслуживания, таких как VACUUM. Оптимизация этого параметра помогает поддерживать базу данных в хорошем состоянии и избежать избыточной фрагментации данных. Для всех профилей:

  • RAM <= 8GB: 512MB

  • 8GB < RAM <=  32GB: 1GB

  • 32GB < RAM <=  64GB: 2GB

  • 64GB < RAM: 4GB

effective_cache_sizeпозволяет оценить общий размер кеша операционной системы, что помогает СУБД Pangolin эффективно управлять памятью. Правильная настройка effective_cache_size улучшает производительность за счёт уменьшения количества обращений к медленному дисковому хранилищу. Для всех профилей:

  • RAM - 2GB — shared_buffers

temp_buffers — этот параметр контролирует объём памяти, выделяемый для временных таблиц и временных файлов. Значения зависят от типа нагрузки и объёма доступной оперативной памяти. Для всех профилей:

  • OLTP:

    • RAM <= 32GB: 8MB

    • RAM > 32GB: 16MB

  • 1С:

    • RAM <= 32GB: 128MB

    • 32GB < RAM <= 128GB:  256МБ

    • RAM > 128GB: 512МБ

  • OLAP:

    • RAM < 256GB:  32MB

    • RAM >= 256GB: 64MB

random_page_cost — определяет относительную стоимость произвольного чтения страницы с диска. Его значение варьируется в зависимости от типа рабочей нагрузки:

  • OLTP: 1.1

  • 1С: 1.1

  • OLAP: 2.0

Правильное значение random_page_cost позволяет оптимизировать выполнение запросов, учитывая различия в скорости чтения страниц с дисков различного типа (SSD vs HDD).

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

  • OLTP: 8

  • 1С: 11

  • OLAP: 8

log_min_duration_statement задаёт минимальное время выполнения запроса, необходимое для его записи в журнал: 

  • OLTP: 3000

  • 1С: 3000

  • OLAP: 60000

Регулируя этот параметр, можно контролировать уровень детализации логирования, что полезно для анализа производительности и поиска узких мест.

wal_buffers определяет объём памяти, выделяемый для буферов WAL:

  • RAM <= 8GB: 16MB

  • 8GB < RAM: 64MB

Правильно подобранное значение wal_buffers улучшает производительность операций записи, обеспечивая оптимальное использование ресурсов памяти.

effective_io_concurrency — задаёт максимальное количество одновременно выполняемых операций ввода-вывода. Для всех профилей:

  • для машин с SSD: 200

  • для машин с HDD: 10

max_worker_processesопределяет максимальное количество фоновых процессов, которые могут выполняться параллельно. Для всех профилей:

  • CPU <= 12: 12

  • CPU > 12: CPU

max_parallel_workers — контролирует максимальное количество параллельных рабочих процессов, задействованных в выполнении запросов:

  • OLTP: max_worker_processes / 2

  • 1C: max_worker_processes / 2

  • OLAP: max_worker_processes * 4 / 5

Параллельная обработка запросов может существенно ускорить выполнение сложных аналитических задач, особенно в OLAP-сценариях.

max_parallel_workers_per_gather — указывает максимальное количество параллельных рабочих процессов для операции GATHER:

  • OLTP: 2

  • 1С: 4

  • OLAP: 4 + max_parallel_workers / 8

Эта настройка особенно полезна для OLAP-нагрузки, когда запросы требуют интенсивной параллельной обработки данных.

max_files_per_process — устанавливает максимальное количество открытых файлов для одного процесса:

  • OLTP: 1000

  • 1С: 10000

  • OLAP: 1000

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

  • OLTP: 64

  • 1С: 256

  • OLAP: 64

Дополнительно

Ещё Pangolin Tuner даёт рекомендации по настройке autovacuum и других важных параметров. Например, подсказывает, как управлять планировщиком запросов для 1С, чтобы повысить производительность при работе с бизнес-приложениями.

Монстры в действии

Мы провели серию нагрузочных тестов, чтобы посмотреть, как Pangolin Tuner может сработать на благо производительности БД. Вот результаты.

OLTP (сценарий TPC-C)

Характеристики стенда:

  • CPU: 4 ядра

  • RAM: 64 ГБ

Скорость обработки транзакций (TPS) на стенде с использованием конфигурационного файла, оптимизированного Pangolin Tuner, — 1794. Без применения утилиты — 1355. Значительный прирост производительности. Система, настроенная с помощью Pangolin Tuner, способна обрабатывать больше транзакций, что делает её устойчивее к пиковым нагрузкам и ускоряет обработку запросов.

OLAP (сценарий TPC-H)

Характеристики стенда:

  • CPU: 4 ядра

  • RAM: 64 ГБ

При обработке сложных аналитических запросов (TPS) с использованием конфигурационного файла, настроенного через Pangolin Tuner, скорость выросла до 4,12. Этот же показатель без использования утилиты — 3,07. Система существенно быстрее реагирует на запросы, а значит, у нас улучшается эффективность анализа данных и быстрее формируются результаты.

1C (сценарий APDEX)

Характеристики стенда:

  • CPU: 176 ядер

  • RAM: 2 ТБ

Тестирование в подсистеме «Тест-центр» с использованием трёхчасового сценария нагрузочного тестирования «Документооборот» для 1000 рабочих мест показало значительное улучшение производительности. С использованием конфигурационного файла, обработанного Pangolin Tuner, показатель APDEX достиг отметки 0,916, что подтверждает повышение стабильности и быстродействия системы управления предприятием. Это говорит о снижении задержек, что положительно сказывается на общей эффективности работы системы.

И на этом всё?

Монстры будущего. Дальше... Страшнее!

Самое интересное впереди! Что планируем ещё сделать?

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

  • Улучшить алгоритмы расчёта параметров.

  • Сделать интеграцию с системами мониторинга, чтобы Pangolin Tuner мог учитывать нагрузку системы в расчётах.

  • Создать веб-сайт для расчётов с учётом различных схем развёртывания.

  • Интегрировать ИИ в Pangolin Tuner. Планируем обучить модель ИИ на образцовых конфигурационных файлах с ограниченным набором параметров. В результате ИИ, взаимодействуя с существующей функциональностью, должен предлагать оптимальные настройки, проанализировав данные о производительности, схему развёртывания и профиль нагрузки.

Благодарю за интерес к статье. О том, как мы в СУБД Pangolin развиваем разные инструменты, мы пишем в сообществе команды, там же появляются наши вакансии и другие полезные активности, присоединяйтесь!

Если у вас есть интересные истории или советы по настройке, которыми хочется поделиться, — пишите их в комментариях! Кто знает, вдруг именно ваш кейс войдёт в историю по укрощению монстров баз данных!

Комментарии (3)


  1. Yusmit
    22.07.2025 14:15

    Добрый день. Подскажите пожалуйста - может быть есть в планах внедрить формулы из данной утилиты в бандо инсталлятора Pangolin?


  1. Inskin
    22.07.2025 14:15

    Напомню - в мульте оказалось в итоге, что надо просто поржать, чтобы всё заработало в 10 раз эффективней.


    1. shachneff
      22.07.2025 14:15

      В контексте данной статьи, Ваш комментарий я прочел как "Нужно было просто использовать MS SQL Server"