@LEELEE
dev note
@LEELEE
  • 분류 전체보기 (29)
    • Project (10)
    • Study (19)
      • Java (9)
      • Spring (3)
      • Test (2)
      • DB (2)
      • Infra (1)
      • ETC (2)
      • CS (0)
    • 노트 (0)

인기 글

최근 글

태그

  • Leetcode
  • test
  • oracle
  • PS
  • 객체지향
  • DB
  • transaction
  • 이펙티브자바
  • Java
  • was
  • Redis
  • HTTP
  • 배포자동화
  • springboot
  • AWS
  • 예외처리
  • junit
  • Spring
  • PostgreSQL
  • Til
전체 방문자
오늘
어제
hELLO · Designed By 정상우.
@LEELEE

dev note

Study/DB

PostgreSQL 쿼리 무한 로딩 idle in transaction 해결

2022. 5. 19. 17:01

한줄 요약: pid 조회하고 select pg_cancel_backend(pid);로 세션 취소

 

 

 

DROP INDEX 인덱스명; 을 실행했더니 무한 로딩이 걸린다.

 

Oracle에서 update문을 실행하다가 고생한 경험을 떠올렸다.

네트워크 연결이 불안정한 작업 환경에서 운영 DB에 커밋을 하다가 무한 대기가 걸려서 아주 많이 당황했었고

lock이 원인이란 걸 파악한 뒤 DBA에게 session kill을 요청하여 해결했었다.

 

그러니 우선 현재 실행 중인 프로세스의 lock 정보를 보여주는 pg_locks view를 조회해보자.

 

 

Lock 정보 조회

select *
from pg_locks l, pg_stat_all_tables t
where l.relation = t.relid
order by relation ASC;

조회해보니 뭔가 나오긴 하지만 쿼리에 대한 정보가 필요하다.

실행 중인 쿼리 정보를 보여주는 pg_stat_activity view를 확인해보자.

 

 

실행 중인 쿼리 조회

Lock 상태인 쿼리 조회

select *
from pg_stat_activity
where datname = 'DB명'
and  wait_event_type = 'Lock'
order by query_start desc;

 

결과값이 없다. Lock이 아닌가?

 

전체 쿼리 조회

select *
from pg_stat_activity
where datname = 'DB명'
order by query_start desc;

 

조회해보니 state가 idle in transaction인 쿼리가 눈에 띈다.

 

idle in transaction은 트랜잭션을 시작한 뒤 작업을 실행하지 않고 대기 중인 상태이다.

대기 시간이 길어질 경우 자원이 낭비되므로 종료가 필요하다.

조회한 pid를 가지고 해당 프로세스를 취소/종료해주자.

 

 

프로세스 취소/종료

select pg_cancel_backend(pid);

 

위 쿼리로 세션이 취소되지 않을 경우 상위 프로세스까지 종료해주는 아래 쿼리를 실행하면 된다.

 

select pg_terminate_backend(pid)
from pg_stat_activity
where state = 'idle in transaction'
and current_timestamp - query_start > '2 min';  // 시간 조건 조절

 

idle in transaction 자동 종료 설정

9.6 버전 이상에서 일정 시간이 지나면 자동으로 종료를 해주는 idle_in_transaction_session_timeout 설정이 가능하다.

 

 

 

저작자표시 (새창열림)

'Study > DB' 카테고리의 다른 글

DB 계층 구조 설계 - 클로저 테이블 패턴  (0) 2022.06.17
    'Study/DB' 카테고리의 다른 글
    • DB 계층 구조 설계 - 클로저 테이블 패턴
    @LEELEE
    @LEELEE

    티스토리툴바