PostgreSQL에서 'pg_stat_activity' 통계 정보를 이용한 현재 실행 중인 쿼리를 조회하는 방법을 소개합니다.
현재 14.5 버전을 사용하고 있으며 버전에 따라 차이가 있을 수 있습니다.
SELECT * FROM pg_stat_activity ORDER BY query_start ASC ;
SELECT pg_cancel_backend(pid (int)) ;
track_activity_query_size = 1024
track_activities = on
| 매개변수 | 설명 |
|---|---|
| track_activity_query_size | 기본 값은 '1024' 이며 'pg_stat_activity.query' 컬럼의 길이를 바이트 단위로 기록합니다. (서버 재기동 필요) |
| track_activities | 기본 값은 'on'이고 정보 수집 활성화 옵션입니다. 'off'면 쿼리문 확인이 되지 않습니다 |
| 열 | 유형 | 설명 |
|---|---|---|
| datid | oid | 데이터베이스 OID |
| datname | name | 데이터베이스 이름 |
| pid | integer | 프로세스 ID |
| usesysid | oid | 사용자 고유번호 |
| usename | name | 사용자 이름 |
| application_name | text | 응용프로그램 이름 |
| client_addr | inet | 접속한 IP |
| client_hostname | text | 접속한 호스트 이름 / "log_hostname" 매개 변수가 "on"일때만 표시 됨 |
| client_port | integer | 접속한 TCP 포트 / Unix 소캣은 "-1" |
| backend_start | timestamp with time zone | 서버에 접속한 시간 |
| xact_start | timestamp with time zone | 현재 트랜잭션이 시작된 시간 / 특랜잭션이 없으면 "NULL" |
| query_start | timestamp with time zone | 쿼리문이 시작된 시간 |
| state_change | timestamp with time zone | "state"의 마지막 수정 시간 |
| waiting | boolean | 대기중인 경우 "true" |
| state | text |
|
| query | text | "state" 값이 "active"일때만 현재 실행 중인 쿼리이고 그 외에는 마지막에 실행된 쿼리 |
select running_cnt, tot_cnt
from
(
select count(*) as running_cnt
from pg_stat_activity
where state = 'active'
)a,
(
select count(*) as tot_cnt
from pg_stat_activity
) b
;
running_cnt | tot_cnt
-------------+---------
1 | 6
(1 row)
Time: 1.699 ms