postgres 및 postmaster 서비스에서 높은 CPU 사용량 문제를 해결 하시겠습니까?


26

SIEM 소프트웨어를 실행하는 오픈 소스 (RHEL 6.2) 기반 시스템을 사용하고 있습니다. 나는 실행하면 top명령을, 나는 볼 postgrespostmaster96 %의 CPU 사용률에 모두. 이러한 서비스가 쌓이는 원인을 정확히 지적하거나 확인할 수있는 방법이 있습니까?


2
"RHCE 6.2"? "RHEL 6.2"를 의미합니까? 나는 가정 postgressIS를 postgres하고 그냥 손으로 복사했습니다.
Craig Ringer

답변:


28

pg_stat_activity시스템 테이블을 사용하여 특정 Postgres 백엔드 ID를 시스템 프로세스 ID와 일치시킬 수 있습니다 .

SELECT pid, datname, usename, query FROM pg_stat_activity;좋은 출발점이 될 수 있습니다.
어떤 쿼리가 실행 중인지 알고 나면 추가로 조사 할 수 있습니다 ( EXPLAIN/ EXPLAIN ANALYZE; 잠금 확인 등).


이것은 정확한 쿼리입니까, 나는 sec 사람이 siem, select 문에서 일하는 것처럼 db에 익숙하지 않습니다 .top 명령에서 pid를 공급해야합니까?
asadz 2016 년

1
@asadz 아니오, 잘 렸습니다 (지금 수정되었습니다)-특정 PID가 있고 실행중인 것을보고 싶다면 WHERE절로 분리 할 수 있지만 PID가 많지 않으면 다음과 같습니다. 전체 출력을 쉽게 검색 할 수 있습니다. Postgres 매뉴얼에는에서 얻을 수있는 내용pg_stat_activity 과 기타 통계 수집기 테이블 (문제 사용자 쿼리 가 아닌 경우 도움이 될 수 있음) 에 대한 추가 세부 정보 가 있습니다 .
voretaq7 2016 년

이 쿼리를 실행할 때 의심해야 할 PID가 없습니다.
Fendi Tri Cahyono

단서에 감사드립니다. 최근에 비슷한 문제가 발생하여 SELECT * FROM pg_stat_activity를
야오

14

나는 같은 문제를 겪고 있었다. postgresql은 AWS RDS에서 설정되었으며 인스턴스를 늘린 후에도 CPU 사용률이 100 %였습니다. 나는 여기에 표시된 방법으로 디버깅했고 그 방법 중 하나가 나를 위해 일했다.

쿼리 실행 시간을 가장 오래 확인한 결과 3-4 시간이 지나서 특정 쿼리가 중단되어 실행되고 있음을 알게되었습니다. 쿼리 실행 시간을 확인하려면 다음 명령을 실행하십시오.

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

이 시간이 1 시간 이상이면 이것이 문제입니다. 오래 실행되는 연결을 끊고 응용 프로그램 측에서 연결의 최대 수명을 제한하십시오.


7

이것이 실제로 모든 CPU를 사용하는 포스트 마스터 인 경우 아마도 매우 높은로 인해 경쟁 경합 문제가있을 수 max_connections있습니다. max_connections이 경우 연결 풀러를 낮추고 사용하는 것이 좋습니다.

그렇지 않은 경우 : 자세한 내용을 확인하십시오. top -b -n 1시작 의 전체 출력 .


이것은 말이된다; 분석가는 시엠을 사용하여 많은 양의 데이터를주고받습니다. 잠금 상태를 확인할 수있는 방법이 있습니까? 또는 그에 기인 한 조건; ?
asadz
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.