PostgreSQL: 실행중인 쿼리 확인 및 실행 취소 방법


PostgreSQL에서 "pg_stat_activity" 통계 정보를 이용한 현재 실행 중인 쿼리를 조회하고 실행 취소하는 방법을 소개합니다.
버전에 따라 차이가 있을 수 있으며 9.4버전을 기준으로 작성했습니다.

실행중인 쿼리 확인하기

SELECT * FROM pg_stat_activity ORDER BY query_start ASC;

실행중인 쿼리 취소하기

실행 결과는 성공, 실패를 true, false로 반환합니다.
pid 정보는 위 쿼리에서 확인된 pg_stat_activity.pid 값을 입력합니다.(버전에 따라 pg_stat_activity.procpid 일수도 있습니다.)
SELECT pg_cancel_backend(pid int);

매개 변수 설정

postgresql.conf 파일에 설정된 정보를 확인해주세요.
track_activity_query_size = 1024
track_activities = on
매개 변수설명
track_activity_query_size기본 값은 "1024"이고 "pg_stat_activity.query" 컬럼의 길이를 바이트 단위로 기록합니다. 적용할려면 서버를 재 시작해야합니다.
track_activities기본 값은 "on"이고 정보 수집 활성화 여부입니다. "off"이면 쿼리문 확인이 되지 않습니다.

pg_stat_activity 정보

PostgreSQL 9.4 기준 정보입니다.
유형설명
datidoid데이터베이스 OID
datnamename데이터베이스 이름
pidinteger프로세스 ID
usesysidoid사용자 고유번호
usenamename사용자 이름
application_nametext응용프로그램 이름
client_addrinet접속한 IP
client_hostnametext접속한 호스트 이름 / "log_hostname" 매개 변수가 "on"일때만 표시 됨
client_portinteger접속한 TCP 포트 / Unix 소캣은 "-1"
backend_starttimestamp with time zone서버에 접속한 시간
xact_starttimestamp with time zone현재 트랜잭션이 시작된 시간 / 특랜잭션이 없으면 "NULL"
query_starttimestamp with time zone쿼리문이 시작된 시간
state_changetimestamp with time zone"state"의 마지막 수정 시간
waitingboolean대기중인 경우 "true"
statetext
  • active : 쿼리 실행 중
  • idle : 새로운 명령을 기다리는 중
  • idle in transaction : 트랜잭션은 있지만 현재 실행중인 쿼리 없음
  • idle in transaction (aborted) : idle in transaction 비슷하지만 트랜잭션에 오류가 있음
  • fastpath function call : 함수 실행 중
  • disabled : track_activities 무효
querytext"state" 값이 "active"일때만 현재 실행 중인 쿼리이고 그 외에는 마지막에 실행된 쿼리

함께보기