Как стать автором
Обновить
251.15
Postgres Professional
Разработчик СУБД Postgres Pro

Оптимальная настройка Postgres Pro в один клик с pgpro_tune

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров1.7K

Специалисты, работающие с PostgreSQL, знают, что стандартные настройки «из коробки» выбраны из расчёта, чтобы постгрес запустился на любой кофеварке, то есть аскетично-минималистичны.

Ручная настройка начинается с погружения в документацию, анализа десятков параметров — от shared_buffers и work_mem до effective_cache_size и wal_buffers, — тестов и подбора значений методом проб и ошибок. Это не только отнимает много времени, но и требует глубоких знаний специфики СУБД и понимания текущих задач и нагрузок. А допущенная при настройке ошибка рискует дорого обойтись: вместо роста производительности и стабильности базы данных можно получить их спад и даже простой системы.

Особенно критична становится эта проблема при нехватке времени или необходимости быстро масштабироваться. Ручная настройка может превратиться в серьёзное узкое место при развитии инфраструктуры и запуске новых сервисов.

Мы реализовали возможность автоматически получить конфигурацию Postgres Pro, учитывающую особенности оборудования и избегая при этом длительных погружений в документацию и многочасовых экспериментов. Знакомьтесь — «автотюнер» pgpro_tune, который будет доступен в майских релизах Postgres Pro.

Как работает «автотюнер»

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

pgpro_tune работает по следующему алгоритму:

  1. Сбор информации о системе. pgpro_tune анализирует конфигурацию сервера, определяя ключевые аппаратные характеристики, такие как количество ядер CPU (получаемое из ОС как NCPU) и объем оперативной памяти (MEMMB в MiB).

  2. Вызов экспертной логики. Собранная информация (NCPU, MEMMB) передается набору специализированных shell-скриптов. Эти скрипты содержат экспертные знания и логику настройки, разработанные нашими инженерами, исходя из знаний и практики. Используя как данные о системе, так и эвристики, скрипты вычисляют рекомендуемые значения для целого ряда важных параметров PostgreSQL. В их число входят:

    • параметры управления памятью: shared_buffers, effective_cache_size, maintenance_work_mem, work_mem, temp_buffers;

    • настройки автовакуума: autovacuum_max_workers, autovacuum_work_mem, vacuum_cost_limit;

    • управление подключениями: max_connections;

    • сбор статистики: pg_stat_statements.max.

  3. Формирование итоговой конфигурации. Shell-скрипты генерируют выходной набор переменных, представляющих собой рекомендуемые значения для начальной конфигурации PostgreSQL.

  4. Применение настроек. Утилита pgpro_tune преобразует выходные переменные скрипта в строки конфигурации и дописывает их в виде отдельного блока в конец файла postgresql.conf. Важно помнить, что PostgreSQL при чтении конфигурации использует последнее встреченное значение для каждого параметра. Сгенерированный блок настроек обязательно сопровождается комментариями, включающими дату и время автонастройки, указание на использование pgpro_tune и параметры запуска. Благодаря этому администратор базы данных может легко найти автоматически сгенерированные настройки и при необходимости внести изменения вручную или добавить собственные переопределяющие параметры далее в файле.

В логике расчета параметров учтен многолетний опыт поддержки, эксплуатации Postgres Pro и глубокое понимание внутреннего устройства СУБД, особенно в части оптимального использования ресурсов на разном оборудовании. 

Гибкость настройки

Основная цель pgpro_tune — предоставить универсально-оптимальные стартовые значения, от которых можно отталкиваться при дальнейшей настройке. Для разных сценариев использования СУБД предусмотрена концепция пресетов в виде shell-скриптов.

Уже доступен базовый пресет. Он предназначен для общего улучшения производительности «из коробки» для различных редакций Postgres Pro (Standard, Enterprise), учитывая параметры оборудования. Он учитывает особенности эффективной работы СУБД на предоставляемом оборудовании и оптимального использования ресурсов.

В будущих выпусках мы планируем добавить специализированные пресеты:

  • для прикладного ПО от 1С. Логика для 1С будет основана на многолетнем опыте и методиках, разработанных совместно с экспертами в этой области (например, с использованием подходов Антона Дорошкевича), и будет нацелена на максимальную производительность в типичных для 1С сценариях использования.

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

Поскольку пресеты реализованы в виде shell-скриптов, опытные администраторы могут создавать собственные пресеты, адаптированные под уникальные нагрузки или нестандартное оборудование. Для этого не требуется верификация со стороны Postgres Professional. Достаточно, чтобы скрипт выводил данные в формате pgpro_tune.

Полный контроль над процессом

Несмотря на автоматизацию, pgpro_tune предоставляет администраторам баз данных контроль над процессом:

  • Выбор пресета. DBA сможет выбирать подходящий пресет исходя из поставленной задачи.

  • Параметры командной строки. Можно передавать параметры непосредственно в pgpro_tune для уточнения логики. Например, базовый пресет может содержать опциональную логику для 1С, которая активируется специальным флагом при запуске, вместо использования отдельного файла пресета. Это позволяет сделать базовые скрипты более гибкими.

  • Автоматический запуск при инициализации. pgpro_tune автоматически запускается при инициализации нового кластера баз данных (как через pg-setup initdb, так и через прямой вызов initdb). Это гарантирует, что каждый новый кластер сразу получает универсально-оптимальную базовую конфигурацию, адаптированную под оборудование, без необходимости явного указания флагов типа --tune, как это было ранее.

  • Многократный запуск. Утилиту можно запустить не только при инициализации кластера (через pg-setup или initdb), но и в любое другое время вручную. Это полезно, например, после изменения конфигурации сервера (добавления ОЗУ, ядер ЦПУ) или характера нагрузки, например, базу начали использовать для 1С.

  • Применение изменений. Сгенерированные настройки применяются стандартными средствами PostgreSQL: через перезагрузку конфигурации (SELECT pg_reload_conf();) или полный перезапуск сервера, в зависимости от изменяемых параметров.

Profit

pgpro_tune предлагает решение распространенной проблемы начальной оптимизации конфигурации Postgres Pro. Основная выгода заключается в автоматизации сбора данных о системе и применении проверенных эвристик для расчета ключевых параметров, таких как shared_buffers или work_mem, основанных на реальном опыте инженеров. Вместо того чтобы тратить время на ручной подбор или рисковать с неоптимальными дефолтными значениями (например, shared_buffers=128MB), вы получаете инструмент, который оптимально настроит работу базы данных.

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

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

Теги:
Хабы:
+14
Комментарии1

Публикации

Информация

Сайт
www.postgrespro.ru
Дата регистрации
Дата основания
Численность
201–500 человек
Местоположение
Россия
Представитель
Иван Панченко