안녕하세요~작은나무입니다.
DBMS중에 PostgreSQL에서 현재 실행중인 쿼리 확인 및 종료하는 방법에 대해 알아보겠습니다.
실행중인 쿼리 확인
pg_stat_activity 통계 정보를 이용하여 현재 실행중인 쿼리를 조회할 수 있습니다.
SELECT * FROM pg_stat_activity ORDER BY query_start;
SELECT * FROM pg_stat_activity WHERE datname = 'databasename'
실행중인 쿼리 취소
실행 결과는 true, false로 반환합니다.
pid정보는 위의 쿼리에서 확인된 pg_stat_activity.pid값을 입력(버전에 따라 pg_stat_activity.procpid일 경우도 있습니다.)
SELECT pg_cancel_backend(pid int);
1분이상 실행중인 쿼리 확인
위의 실행중인 쿼리를 응용하면 아래와 같은 정보도 확인 할 수 있습니다.
SELECT current_timestamp - query_start AS runtime, datname, usename, query FROM pg_stat_activity WHERE state = 'active' AND current_timestamp - query_start > '1 min' ORDER BY 1 DESC;
pg_stat_activity정보
PostgreSQL 9.4 기준 정보입니다.
열 |
유형 |
설명 |
datid |
oid |
데이터베이스 OID |
datname |
name |
데이터베이스 이름 |
pid |
integer |
프로세스 ID |
usesysid |
oid |
사용자 고유번호 |
usename |
name |
사용자 이름 |
application_name |
text |
응용프로그램 이름 |
client_addr |
inet |
접속 IP |
client_hostname |
text |
접속한 호스트 이름 |
client_port |
integer |
접속한 TCP 포트 |
backend_start |
timestamp with time zone |
서버 접속 시간 |
xact_start |
timestamp with time zone |
트랜잭션이 시작된 시간 |
query_start |
timestamp with time zone |
쿼리 시작 시간 |
state_change |
timestamp with time zone |
state의 마지막 수정 시간 |
wating |
boolean |
대기중인 경우 true |
state |
text |
하단 참조 |
query |
text |
state값이 active일때만 현재 실행중인 쿼리 이 외에는 마지막 실행된 쿼리 |
state정보는 아래와 같습니다.
active : 쿼리 실행 중
idle : 새로운 명령을 기다리는 중
idle in transaction : 트랜잭션은 있지만 현재 실행중인 쿼리 없음
idle in transaction (aborted) : idle in transaction 비슷하지만 트랜잭션에 오류가 있음
fastpath function call : 함수 실행 중
disabled : track_activities 무효