Усунення несправностей із високим рівнем використання процесора у postgres та postmaster Services?


28

Я використовую машину на основі відкритого коду (RHEL 6.2), на якій працює програмне забезпечення SIEM. Коли я запускаю topкоманду, я бачу postgresі postmasterобидва з використанням 96% процесора. Чи є спосіб встановити чітку точку чи побачити, що спричиняє накопичення цих служб?


2
"RHCE 6.2"? Ви маєте на увазі "RHEL 6.2"? Я припускаю postgress, що postgresви це просто скопіювали вручну.
Крейг Рінгер

Відповіді:


30

Ви можете зіставити певний ідентифікатор додаткового вмісту Postgres з ідентифікатором системного процесу за допомогою pg_stat_activityсистемної таблиці.

SELECT pid, datname, usename, query FROM pg_stat_activity;може стати гарною відправною точкою.
Коли ви дізнаєтеся, які запити запущені, ви можете дослідити далі ( EXPLAIN/ EXPLAIN ANALYZE; перевірити блокування тощо).


це точний запит, я не так добре знайомий з db, як я, сек, хлопець, що працює над siem, ваш вибір заяви, чи потрібно мені годувати його pid від верхньої команди?
asadz

1
@asadz ні, він був усічений (виправлено зараз) - Якщо у вас є конкретні PID-адреси і хочете побачити, що вони працюють, ви можете ізолювати їх за допомогою WHEREпункту, але якщо у вас немає величезної кількості PID-файлів, це так само простий пошук через повний вихід. Посібник Postgres містить додаткову інформацію про те, що можна отриматиpg_stat_activity , а також інші таблиці збирачів статистики (що може допомогти вам, якщо ваша проблема не є запитом користувача).
voretaq7

коли я виконую цей запит, у мене немає підозри, про яку я повинен підозрювати
Fendi Tri Cahyono

Дякую за підказку, нещодавно я зіткнувся з подібною проблемою і з'ясував причину, використовуючи SELECT * FROM pg_stat_activity;
Яо

14

У мене виникло те саме питання. Postgresql налаштовується на AWS RDS, і він мав 100% використання процесора навіть після збільшення екземпляра. Я налагодив метод, показаний тут, і один із методів працював на мене.

Я перевірив, чи працює запит найдовше, і дізнався, що певні запити застрягли та працюють із понад 3-4 годин. Щоб перевірити, скільки часу працює запит, запустіть таку команду:

SELECT max(now() - xact_start) FROM pg_stat_activity
                               WHERE state IN ('idle in transaction', 'active');

Якщо це більше години, то це питання. Вбийте тривале з'єднання і обмежте максимальний вік з'єднання з боку програми.


8

Якщо це справді поштовий майстер, який використовує весь цей процесор, то у вас, ймовірно, є проблеми із суперечкою блокування, ймовірно, через дуже високу max_connections. Якщо це так, розгляньте можливість опускання max_connectionsта використання підключення.

Інакше: Деталі, будь ласка. Повний вихід top -b -n 1для початку.


це має сенс; оскільки аналог використовується аналітиком для запиту багатьох даних вперед і назад; чи є спосіб я перевірити стан блокування; або приписувані йому умови; ?
asadz
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.