Відповіді:
Ви можете зіставити певний ідентифікатор додаткового вмісту Postgres з ідентифікатором системного процесу за допомогою pg_stat_activity
системної таблиці.
SELECT pid, datname, usename, query FROM pg_stat_activity;
може стати гарною відправною точкою.
Коли ви дізнаєтеся, які запити запущені, ви можете дослідити далі ( EXPLAIN
/ EXPLAIN ANALYZE
; перевірити блокування тощо).
WHERE
пункту, але якщо у вас немає величезної кількості PID-файлів, це так само простий пошук через повний вихід. Посібник Postgres містить додаткову інформацію про те, що можна отриматиpg_stat_activity
, а також інші таблиці збирачів статистики (що може допомогти вам, якщо ваша проблема не є запитом користувача).
У мене виникло те саме питання. Postgresql налаштовується на AWS RDS, і він мав 100% використання процесора навіть після збільшення екземпляра. Я налагодив метод, показаний тут, і один із методів працював на мене.
Я перевірив, чи працює запит найдовше, і дізнався, що певні запити застрягли та працюють із понад 3-4 годин. Щоб перевірити, скільки часу працює запит, запустіть таку команду:
SELECT max(now() - xact_start) FROM pg_stat_activity
WHERE state IN ('idle in transaction', 'active');
Якщо це більше години, то це питання. Вбийте тривале з'єднання і обмежте максимальний вік з'єднання з боку програми.
Якщо це справді поштовий майстер, який використовує весь цей процесор, то у вас, ймовірно, є проблеми із суперечкою блокування, ймовірно, через дуже високу max_connections
. Якщо це так, розгляньте можливість опускання max_connections
та використання підключення.
Інакше: Деталі, будь ласка. Повний вихід top -b -n 1
для початку.
postgress
, щоpostgres
ви це просто скопіювали вручну.