4

Настройки производительности CPU в Linux

Серия СУБД PostgreSQL

Эффективность параметров настройки CPU для PostgreSQL сильно зависит от типа нагрузки: OLTP требует минимальной задержки и эффективной обработки множества коротких операций, а OLAP — максимальной пропускной способности для сложных вычислений.

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

⚙️ Параметры управления частотой и состоянием CPU

  • Управляющий драйвер (governor)
    Для OLTP:
    performance. Фиксация на максимальной частоте снижает задержку каждой транзакции.
    Для OLAP: performance или schedutil. Стабильно высокая частота или интеллектуальное управление от планировщика ядра ускоряют обработку объемных данных.

  • Состояния простоя (C-states)
    Для OLTP:
    Ограничение глубоких состояний (например, processor.max_cstate=1). Снижает латентность при частых переходах от простоя к активности, что критично для отклика транзакций.
    Для OLAP: Менее критично. Можно разрешить более глубокие состояния для энергосбережения, так как запросы длительные и массовые.

🔄 Параметры параллельной обработки и планирования

  • Планировщик задач ядра Linux
    Для OLTP:
    Отключение sched_autogroup_enabled. Предотвращает несправедливое распределение CPU между фоновыми процессами СУБД (например, autovacuum) и обработкой запросов.
    Общая рекомендация: Настройка sched_min_granularity_ns. Увеличение значения может снизить накладные расходы на переключение контекста при высокой конкуренции за CPU.

  • Параметры параллелизма PostgreSQL
    Для OLAP:
    Крайне важны. Увеличение max_parallel_workers_per_gather, max_worker_processes. Позволяют одним аналитическим запросом задействовать несколько ядер, значительно ускоряя выполнение.
    Для OLTP: Обычно не требуют изменений. Короткие транзакции редко используют параллельное выполнение.

🧩 Параметры изоляции и привязки ресурсов

  • Изоляция CPU (cgroups, systemd, isolcpus)
    Для смешанных нагрузок (OLTP+OLAP):
    Выделение отдельных ядер для фоновых процессов PostgreSQL (autovacuum, WAL writer) или для выполнения аналитических запросов. Это предотвращает их вмешательство в обработку критичных транзакций.
    Для чистого OLTP/OLAP: Менее актуально, но может использоваться для тонкой настройки под конкретную задачу.

  • Управление прерываниями (irqbalance, smp_affinity)
    Для обеих нагрузок:
    Привязка сетевых прерываний и прерываний дисковой подсистемы к выделенным ядрам. Освобождает основные ядра для обработки запросов, улучшая предсказуемость производительности.

  • Политики NUMA (numactl, numa_balancing)
    Для больших серверов:
    Отключение numa_balancing и ручная привязка экземпляра PostgreSQL к одному узлу NUMA. Уменьшает задержки при доступе к памяти, что важно для интенсивных нагрузок.

💡 Критически важные смежные настройки PostgreSQL

Производительность CPU тесно связана с корректной настройкой памяти и ввода-вывода в PostgreSQL.

  • Память: shared_buffers (25-40% RAM) и work_mem. Недостаток work_mem приводит к записи временных данных на медленный диск, что создает очередь процессов в состоянии D (b), висящую на iowait, и имитирует проблему с CPU.

  • Ввод-вывод: random_page_cost (понизить для SSD), effective_io_concurrency. Правильные настройки заставляют планировщик чаще выбирать индексные сканы, снижая нагрузку на CPU.

🛠️ Практические шаги для настройки

  1. Определите профиль нагрузки с помощью мониторинга (например, pg_stat_statements).

  2. Начните с настройки PostgreSQL, особенно параметров памяти и autovacuum.

  3. Задайте CPU governor в performance — это безопасно и почти всегда дает положительный эффект.

  4. Для OLAP-нагрузки активируйте и настройте параллельные запросы в PostgreSQL.

  5. Если проблема сохраняется, используйте мониторинг (top, perf, vmstat) для выявления узких мест: высокой очереди (runqueue), iowait или переключений контекста. Только затем тонко настраивайте параметры ядра (C-states, планировщик).

  6. Протестируйте каждое изменение на нерабочем стенде. Используйте нагрузочное тестирование, например, pgbench.

В целом, для OLTP ключевыми являются стабильно высокая частота CPU и минимизация латентности (governor, C-states). Для OLAP — максимальная пропускная способность параллельных вычислений (параметры параллелизма Postgres). Настройка параметров ОС (планировщик, изоляция) становится критичной на высоконагруженных системах или при смешанной нагрузке.

Postgres DBA

208 постов27 подписчиков

Правила сообщества

Пока действуют стандартные правила Пикабу.

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества