Amazon Relational Database Service(Amazon RDS) for PostgreSQL DB 인스턴스 또는 Amazon Aurora PostgreSQL 호환 버전 DB 인스턴스에서 활발하게 실행 중인 쿼리를 보려고 합니다.
해결 방법
실행 중인 쿼리 확인
Amazon RDS for PostgreSQL 또는 Aurora PostgreSQL 호환의 DB 인스턴스에서 실행 중인 모든 프로세스를 보려면 사용자 계정에 rds_superuser 역할이 있어야 합니다. 그렇지 않으면 pg_stat_activity는 자체 프로세스에 대해 실행 중인 쿼리를 표시합니다. 자세한 내용은 통계 수집기에 대한 PostgreSQL 설명서를 참조하십시오.
1. Amazon RDS for PostgreSQL 또는 Aurora PostgreSQL을 실행하는 DB 인스턴스에 연결합니다.
2. 다음 명령을 실행합니다.
SELECT * FROM pg_stat_activity ORDER BY pid;
이 명령을 수정하여 실행 중인 쿼리 목록을 볼 수도 있습니다. 쿼리는 연결이 수립된 시점을 기준으로 정렬됩니다.
SELECT * FROM pg_stat_activity ORDER BY backend_start;
xact_start 열 값이 null이면 해당 세션에서 열린 트랜잭션이 없는 것입니다.
SELECT * FROM pg_stat_activity ORDER BY xact_start;
또는 마지막 쿼리가 시작된 시점을 기준으로 실행 중인 쿼리의 동일한 목록을 확인합니다.
SELECT * FROM pg_stat_activity ORDER BY query_start;
대기 이벤트가 있는 경우 해당 이벤트의 집계 보기를 확인하려면 다음 명령을 실행합니다.
select state, wait_event, wait_event_type, count(*) from pg_stat_activity group by 1,2,3 order by wait_event;
리소스 사용 진단
pg_stat_activity 및 향상된 모니터링을 사용하여 많은 양의 시스템 리소스를 사용하는 쿼리 또는 프로세스를 식별할 수 있습니다. 향상된 모니터링을 활성화한 후 문제를 진단하는 데 필요한 정보를 볼 수 있는 수준으로 세분화를 설정합니다. 그런 다음, pg_stat_activity를 검토하여 데이터베이스의 현재 활동을 확인합니다. 이때 향상된 모니터링 지표를 검토할 수도 있습니다.
1. OS 프로세스 목록 지표를 보고 리소스를 사용하는 쿼리를 식별합니다. 다음 예제에서 프로세스는 RDS DB 인스턴스에서 CPU 시간의 약 95%를 사용합니다. 프로세스의 프로세스 ID(pid)는 14431입니다. 프로세스에서 SELECT 문을 실행 중입니다. MEM%를 확인하여 시스템 메모리 사용량을 확인할 수도 있습니다.
| | | | | |
|---|
| NAME | VIRT | RES | CPU% | MEM% | VMLIMIT |
| postgres: master postgres 27.0.3.145(52003) SELECT [14431] | 457.66MB | 27.7MB | 95.15 | 2.78 | 무제한 |
2. PostgreSQL 또는 Aurora PostgreSQL을 실행 중인 DB 인스턴스에 연결합니다.
3. 다음 명령을 실행하여 세션의 현재 활동을 식별합니다.
SELECT * FROM pg_stat_activity WHERE pid = PID;
참고: PID를 1번 단계에서 식별한 pid로 바꿉니다.
4. 명령 결과를 확인합니다.
datid | 14008
datname | postgres
pid | 14431
usesysid | 16394
usename | master
application_name | psql
client_addr | 27.0.3.145
client_hostname |
client_port | 52003
backend_start | 2020-03-11 23:08:55.786031+00
xact_start | 2020-03-11 23:12:16.960942+00
query_start | 2020-03-11 23:12:16.960942+00
state_change | 2020-03-11 23:12:16.960945+00
wait_event_type |
wait_event |
state | active
backend_xid |
backend_xmin | 812
query | SELECT COUNT(*) FROM columns c1, columns c2, columns c3, columns c4, columns c5;
backend_type | client backend
쿼리를 실행 중인 프로세스를 중지하려면 다른 세션에서 다음 쿼리를 호출합니다. PID를 3번 단계에서 식별한 프로세스의 pid로 바꿉니다.
SELECT pg_terminate_backend(PID);
중요: 트랜잭션을 종료하기 전에 각 트랜잭션이 데이터베이스 및 애플리케이션 상태에 미치는 잠재적 영향을 평가합니다.
관련 정보
Amazon RDS 또는 Aurora PostgreSQL의 높은 CPU 사용률 문제를 해결하려면 어떻게 해야 합니까?
PostgreSQL의 역할 및 권한 이해
역할 만들기
psql(PostgreSQL 웹 사이트 참조)
pg_stat_activity(PostgreSQL 웹 사이트 참조)