У меня есть сервер Nginx + Postgres с 8 ядрами процессора. Заметил, что под нагрузкой CPU загружается только до ~ 60%.
Я посмотрел на top
и вот скриншот:
Оказывается, на самом деле только 5 процессов выполняются параллельно. Что могло вызвать такое ограничение?
Я посмотрел конфигурацию postgres. Я не заметил, что какие-либо настройки ограничивают его, настройки на самом деле не ограничивали, например:
max_connections = 100
Затем я проверил конфигурацию Nginx. Эти настройки кажутся важными (но в данном случае они не ограничиваются):
worker_processes auto;
worker_connections 768;
В настройках php я посмотрел на этот параметр, и он кажется подозрительным:
pm.max_children
pm
установлен на ] динамический
. Может ли это быть ограничивающим фактором (я не могу вслепую тестировать различные изменения настроек и перезапускать этот сервер для экспериментов)? Если так, как мне выбрать значение? Установите его равным числу ядер или, может быть, больше?
NGINX не ломает тут голову, управляя тем, что выглядит как 5 соединений с PHP-FPM. PHP-FPM динамически подстраивает рабочих для каждого соединения. Здесь все выглядит хорошо.
PostgreSQL использует 99% процессора и 1% памяти. Скорее всего, есть более быстрый способ выполнять запросы, если вы дадите ему больше ресурсов.
Если Ваша рабочая нагрузка включает UPDATE
и DELETE
, Вы (или
автоматический вакуумный демон) должен быть VACUUM
в вашей базе данных для того, чтобы
убрать мертвые кортежи.
Если вы можете позволить себе некоторое время простоя и у вас есть свободное место на диске, я бы
рекомендуем VACUUM FULL ANALYZE
прежде чем инвестировать слишком много времени.
Если вы находитесь на версии PostgreSQL до 9.0, вам может понадобиться REINDEX
после VACUUM
.
Так как вы унаследовали эту систему, полезно посмотреть типы выполняемых запросов и то, что съедает весь процессор. pgbadger нормализует и группирует ваши запросы. Возможно, вы сможете настроить несколько запросов или индексов.
Существует много различных типов индексов, которые вы, возможно, не видели раньше. Вы можете делать частичные индексы, индексы по выражениям, BRIN, GIN и т.д. Героку имеет краткое описание эффективного использования индексов.
Вы также определенно хотите убедиться, что у вас нет проблем с блокировкой .
Рассмотрите возможность просмотра архивов списка рассылки или отправки в этот список. Также есть отличное сообщество на IRC.