데이터 엔지니어링/Database
Postgresql Idle in transaction
남제이입니다!
2024. 3. 14. 18:10
728x90
반응형
다음 명령어를 통해 postgresql 의 활성화되어있는 프로스를 확인해보면 Idle in transaction 상태가 보인다.
select * from pg_stat_activity;
찾아보니 이런 경우는 postgresql 에 transaction 이 잡혀있지만 아무런 동작도 하지 않으면 idle in transaction 상태가 된다고 한다.
이런 경우가 많이 발생하게 되면 connection 은 잡고있지만 아무것도 하지 않게 되어 리소스가 낭비된다.
이러한 문제를 해결하는 방법 중 하나는 다음과 같이 수동으로 해당 프로세스의 connection 을 terminate 해주어야 한다.
terminate 를 할 때에는 process id 인 pid 를 가져와 terminate 를 실행하면 된다.
select pg_terminate_backend(pid);
또한 idle_in_transaction_session_timeout 을 통해서 일정 시간이 지나면 자동으로 terminate 하도록 설정할 수 있다.
idle_in_transaction_session_timeout 이 어떻게 설정되어있는지 확인하려면 다음 명령어를 통해 확인할 수 있다.
show idle_in_transaction_session_timeout;
명령어를 통해 확인해보면 내가 사용중인 Postgresql 은 1d 로 하루가 지나면 session 이 끊어지도록 되어있다.
idle_in_transaction_session_timeout
-------------------------------------
1d
idle_in_transaction_session_timeout 값의 수정은 다음과 같이 진행할 수 있다.
alter system set idle_in_transaction_session_timeout='1min';
만약 값을 0 으로 설정한다면 사용하지 않는다는 것을 의미한다.
728x90
반응형