У нас работает база данных Postgres размером около 38 ГБ, размещенная в экземпляре EC2 на 68 ГБ. Он гудел вместе с нагрузкой ~ 0,7 (на 8-ядерной машине) и небольшой загрузкой ЦП примерно до 16 часов назад, когда загрузка ЦП увеличилась в течение пары часов и теперь намного выше, чем раньше (около 20 % от общего количества), и соответственно увеличилась средняя нагрузка (теперь от 5 до 8).
Согласно pg_stat_activity, машина видит от 100 до 300 одновременных подключений. Наша самая большая таблица составляет около 9,0 ГБ, включая индексы.
Вот что мы исключили:
Есть идеи, как действовать, или отследить эту проблему?
Включите полное ведение журнала на короткий период (~ 10 минут), если можете. Сохраните журнал и получите pgfouine (http://pgfouine.projects.postgresql.org/) проанализируйте это. Возможно, вы выполняете больше запросов, чем раньше, или выполняете запрос, который не очень эффективен.
Далее, возможно, у вас есть несколько медленных запросов, которые плохо влияют на работу. Посмотрите, какие запросы выполняются прямо сейчас:
SELECT pg_stat_activity.procpid AS pid, pg_stat_activity.usename AS username, pg_stat_activity.waiting, now() - pg_stat_activity.query_start AS age, pg_stat_activity.current_query AS query
FROM pg_stat_activity
WHERE pg_stat_activity.current_query <> '<IDLE>'::text
ORDER BY now() - pg_stat_activity.query_start DESC;
Ищите запросы вверху списка. Один бегает очень давно? Если у вас есть транзакция, которая была открыта более 16 часов, это определенно сильно замедлит работу.