Оптимальная конфигурация сервера для PostgreSQL: диски, процессор, память

Введение в архитектуру PostgreSQL

PostgreSQL — это мощная объектно-реляционная система управления базами данных (ORDBMS) с открытым исходным кодом. В основе ее работы лежит взаимодействие процессов операционной системы и общей памяти. Архитектура построена на принципе клиент-сервер. При этом серверная часть управляет файлами базы данных, принимает подключения и выполняет операции от имени клиентов.
Понимание внутреннего устройства необходимо администраторам для точной настройки оборудования. База данных использует модель MVCC (Multi-Version Concurrency Control). Этот механизм позволяет читающим транзакциям не блокировать пишущие и наоборот. Каждая транзакция видит снимок данных (snapshot) на момент своего начала.

Ключевые компоненты производительности

Железо (hardware) играет решающую роль в скорости обработки данных. Чтобы понять, что нужно для postgresql, следует рассмотреть три главных ресурса: дисковую подсистему, процессор и оперативную память.

Быстрые диски — основа отзывчивости

Дисковая подсистема — самое узкое место в производительности баз данных. PostgreSQL активно использует диск для чтения таблиц, которые вытиснились из кеша, записи журналов транзакций (WAL), и временных файлов при сортировке.
Выбор типа накопителя критичен:
  1. NVMe SSD. Обеспечивают максимальную скорость произвольного чтения и записи. Рекомендуются для высоконагруженных систем (OLTP).
  2. SATA SSD. Компромисс между ценой и производительностью.
  3. HDD. Подходят только для архивных данных или резервных копий. Не рекомендуются для активной БД
Важен параметр IOPS (количество операций ввода-вывода в секунду). Низкий IOPS приводит к очередям на диске и "подвисанию" запросов. Иногда администраторам приходится перенести postgresql на другой диск, более быстрый, чтобы устранить эти задержки.

Процессор — обработка запросов

Мощность CPU напрямую влияет на скорость выполнения сложных вычислений и агрегаций. В контексте postgresql cpu выполняет парсинг SQL-запросов, планирование и непосредственную выборку данных.
При выборе процессора учитывают два фактора:
  • Тактовая частота. Важна для сложных одиночных запросов, аналитики и тяжелых вычислений.
  • Количество ядер. Критично для систем с большим количеством одновременных подключений. Каждое соединение порождает отдельный процесс (backend process).
  • Наличие кеша L3. Наличие кэша L3 повышает производительность процессора при работе с большим набором данных. Также это полезно для параллельных запросов PostgreSQL. (Что такое кэш L3? Процессоры имеют по крайней мере два кэша: L1 — кэш первого уровня, и L2 — кэш второго уровня. L1 считается самым маленьким и быстрым кэшем; L2 медленнее, но больше по размеру. В современных процессоров L1 и L2 присутствуют на самих ядрах, причём каждое ядро получает собственный кэш. L3 работает медленнее, чем L1 и L2, но является общим для всех доступных ядер) 
Оптимальная стратегия — баланс между частотой и многопоточностью, исходя из профиля нагрузки (OLTP или OLAP).

Оперативная память — кэширование данных

Оперативная память (RAM) используется для кэширования таблиц и индексов. Чем больше данных находится в памяти, тем меньше обращений к медленному диску.
PostgreSQL использует два типа кэша:
  1. Shared Buffers. Собственный буфер базы данных.
  2. OS Page Cache. Кэш операционной системы.
Нехватка памяти приводит к активному свопингу (swap) или сбросу временных файлов на диск, что резко снижает производительность.

Управление памятью

Настройка памяти осуществляется через параметры:
  • shared_buffers: объем памяти под кэш страниц данных (обычно 25-40% от всей RAM).
  • work_mem: лимит памяти для сортировки и хэш-таблиц на один запрос.
  • maintenance_work_mem: память для служебных операций (VACUUM, создание индексов).
Значения по умолчанию часто занижены и требуют корректировки под конкретное железо.

Swap и выделенная память для кеша

Толку от выделенной памяти не будет если она будет периодически вытесняться ОС линукс в swap если эти блоки попадут в своп , то эффект кеширования уйдет, данные все также будут читаться с диска  (Linux ничего не знает о том что там горячие данные и должны читаться с кеша, а не диска)
  • Выставляем приоритет для swap (vm.swappable=1, в 0 ставить нельзя совсем swap выключать нельзя, иначе может прийти OOM killer и убить весь инстанс PG )
  • Настраиваем huge pages для использования PostgreSQL – они не будут вытесняться в swap.

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

Есть несколько способов, как не допустить провала в производительности PostgreSQL в виртуальных машинах(Ведь на виртуальных машинах ресурсы используются всеми участниками ) . Первый — закрепить виртуальную машину на которой запущен кластер PostgreSQL, на определённых процессорах и дисках. Это устранит или ограничит узкие места в производительности, которые могут возникнуть из-за других виртуальных машин, работающих на хосте. Второй — предварительно выделить диски перед установкой. Это предотвратит выделение хостом дискового пространства во время операций с базой данных. Если вы не можете этого сделать, измените два параметра в postgresql.conf:
  • Отключите параметр wal_recycle в postgresql.conf. По умолчанию при переработке PostgreSQL переименовывает файлы WAL. Однако в файловых системах с копированием при записи (COW) создание новых файлов WAL быстрее.
  • Отключите параметр wal_init_zero в postgresql.conf. По умолчанию пространство WAL выделяется перед вставкой записей WAL. Это замедляет операции WAL в файловых системах COW. Отключение параметра приведёт к отключению этой функции, что позволит виртуальным машинам работать лучше. Если установлено значение off, при создании файла записывается только последний байт, чтобы он имел ожидаемый размер.

Решения от DBserv для PostgreSQL

Самостоятельная оптимизация базы данных требует глубокой экспертизы. Ошибки в конфигурации могут привести к потере данных или деградации производительности. Команда DBserv предлагает комплексные услуги по сопровождению СУБД.
Мы помогаем бизнесу на всех этапах жизненного цикла базы данных:
  • Профессиональная настройка. Подберем параметры postgresql.conf под ваше оборудование и профиль нагрузки.
  • Оптимизация производительности. Проведем аудит, выявим медленные запросы и узкие места. Если требуется перенос базы на другой диск (например, миграция с HDD на NVMe), наши инженеры выполнят это безопасно.
  • Мониторинг и обслуживание. Настроим системы слежения, организуем резервное копирование и регулярный VACUUM.
  • Консультации по масштабированию. Поможем спроектировать и внедрить отказоустойчивый кластер.
Вы можете использовать опыт наших экспертов для решения задач любой сложности: от установки обновлений до миграции терабайтных баз. Ознакомьтесь с полным списком услуг в меню на сайте.

Когда стоит обратиться к специалистам

Если штатные средства оптимизации исчерпаны, а база продолжает "тормозить", необходим внешний аудит. Экспертное вмешательство требуется при планировании архитектуры High Availability, сложной миграции данных или переходе на новые версии СУБД.

Краткие выводы

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

Подведем итоги: золотые правила настройки

  1. Используйте SSD/NVMe для каталога данных.
  2. Выделяйте достаточно RAM для кэширования.
  3. Закрепите память для PG в памяти и уменьшите вероятность ее paging
  4. Настраивайте параметры памяти индивидуально, не полагаясь на дефолтные значения.
  5. Следите за тем, чтобы в виртуализации не было конкуренции за важные для работы кластера PostgreSQL ресурсы

Частые вопросы по теме

Список источников:

  1. Бурджи Л., Обей Д. PostgreSQL. Основы работы, администрирование и настройка. — СПб.: БХВ-Петербург, 2022.
  2. Момоджян Б. Внутреннее устройство PostgreSQL. — М.: ДМК Пресс, 2020.
  3. Шениг Г.-Ю. PostgreSQL 11. Мастерство разработки. — М.: ДМК Пресс, 2019.
  4. Официальная документация PostgreSQL [Электронный ресурс]. — URL: https://www.postgresql.org/docs/ (дата обращения: 24.05.2024).

Эксперт ДБ-сервис

Нужна поддержка или планируете изменения в инфраструктуре?

Проблемы с производительностью, переход на PostgreSQL, нестабильная БД — у нас есть опыт, чтобы это исправить. Оставьте заявку — обсудим, чем можем помочь именно вам.
Наши топ-3 стратегии надежности
Каждое из наших направлений создано для того, чтобы ваш бизнес развивался без сбоев и непредсказуемых рисков.
  • Глубокий технический анализ производительности, безопасности и архитектуры. Выявляем узкие места, даём чёткие рекомендации и план оптимизации.

    Подробнее
  • Круглосуточный контроль за состоянием вашей базы данных.
    Уведомления в случае отклонений, отчёты и превентивные меры. Обеспечиваем стабильность и безопасность.
    Подробнее
  • Мы поможем вам не просто "перейти" с Oracle или MSSQL, а модернизировать инфраструктуру и выйти на новый уровень надёжности.

    Подробнее
Еще статьи по теме