PostgreSQL의 "idle in transaction" 상태는 트랜잭션이 시작되었지만(BEGIN, START TRANSACTION 또는 자동으로 시작되는 암시적 트랜잭션을 사용하여) 현재 실행 중인 명령이 없고 트랜잭션이 시작된 상황을 나타냅니다. 아직 커밋되거나 롤백되지 않았습니다. 세션은 본질적으로 유휴 상태로 열려 있는 트랜잭션 내에서 추가 명령을 기다리고 있습니다.
유휴 세션 확인
SELECT
pid,
usename,
application_name,
client_addr,
state,
backend_xid,
backend_xmin,
state_change,
query
FROM
pg_stat_activity
WHERE
state = 'idle in transaction';
방안
1) 특정 기간이 지나면 유휴 트랜잭션을 자동으로 종료하도록 시간 초과를 구성할 수 있다. 이는 postgresql.conf의 idle_in_transaction_session_timeout 설정을 사용하여 수행됨.
postgresql.conf 수정
idle_in_transaction_session_timeout = '5min'
SELECT pg_reload_conf();
2) 유휴 트랜잭션을 수동으로 종료
문제가 있는 유휴 트랜잭션을 발견한 경우 pg_terminate_backend 함수를 사용하여 수동으로 종료할 수 있음.
SELECT pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE state = 'idle in transaction'
AND pid <> pg_backend_pid();
'DBA > Postgresql' 카테고리의 다른 글
| FILLFACTOR (0) | 2024.09.03 |
|---|---|
| pg_hint_plan (0) | 2024.09.03 |
| 테이블 정의서 추출 (0) | 2024.08.07 |
| orafce 설치 및 적용 (0) | 2024.07.29 |
| DB간 테이블 복제(실시간) (0) | 2024.07.26 |