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
반응형
복사했습니다!