답변:
pg_stat_activity시스템 테이블을 사용하여 특정 Postgres 백엔드 ID를 시스템 프로세스 ID와 일치시킬 수 있습니다 .
SELECT pid, datname, usename, query FROM pg_stat_activity;좋은 출발점이 될 수 있습니다.
어떤 쿼리가 실행 중인지 알고 나면 추가로 조사 할 수 있습니다 ( EXPLAIN/ EXPLAIN ANALYZE; 잠금 확인 등).
WHERE절로 분리 할 수 있지만 PID가 많지 않으면 다음과 같습니다. 전체 출력을 쉽게 검색 할 수 있습니다. Postgres 매뉴얼에는에서 얻을 수있는 내용pg_stat_activity 과 기타 통계 수집기 테이블 (문제 가 사용자 쿼리 가 아닌 경우 도움이 될 수 있음) 에 대한 추가 세부 정보 가 있습니다 .
나는 같은 문제를 겪고 있었다. postgresql은 AWS RDS에서 설정되었으며 인스턴스를 늘린 후에도 CPU 사용률이 100 %였습니다. 나는 여기에 표시된 방법으로 디버깅했고 그 방법 중 하나가 나를 위해 일했다.
쿼리 실행 시간을 가장 오래 확인한 결과 3-4 시간이 지나서 특정 쿼리가 중단되어 실행되고 있음을 알게되었습니다. 쿼리 실행 시간을 확인하려면 다음 명령을 실행하십시오.
SELECT max(now() - xact_start) FROM pg_stat_activity
WHERE state IN ('idle in transaction', 'active');
이 시간이 1 시간 이상이면 이것이 문제입니다. 오래 실행되는 연결을 끊고 응용 프로그램 측에서 연결의 최대 수명을 제한하십시오.
postgressIS를postgres하고 그냥 손으로 복사했습니다.