문제 상황
postgresql에서 transaction이 잡혀있지만, 아무것도 하지 않으면, 세션의 상태는 idle in transaction이 된다.
그런데 얘가 connection은 쥐고 있지만, 아무것도 안한다면 서버 자원을 잘 활용하지 못하게 된다. ( 참고 - (Django)PostgreSQL의 Idle In Transaction Connection )
그러면 connection이 무한대로 늘어난다거나, connection이 필요한애가 DB를 제대로 활용하지 못하게 될 수 있다.
해결 방법
postgresql에는 Idle in transaction이 일정 기간동안 유지되면 자동으로 이 transaction을 죽여주는 기능이 있다.
idle_in_transaction_session_timeout 옵션을 설정하면 된다.
이 값이 0으로 설정되어있으면, 이 기능을 사용하지 않는다는걸 의미한다.
근본적으로는 오래동안 유지되는 idle in transaction이 발생하지 않도록 하는게 중요하겠지만,
이 옵션을 사용하면 커넥션이 무한정 늘어나는 최악의 상황은 막을 수 있다.
예시
어떤식으로 동작하는지 예제는 아래의 글을 참고하면 된다.
참고 - A look at PostgreSQL 9.6 – Killing idle transactions automatically - Blog dbi services
'소프트웨어-이야기 > 데이터 저장소 + 시각화 ' 카테고리의 다른 글
(PostgreSQL) Default 값이 있는 새로운 필드 추가하기 (0) | 2018.09.01 |
---|---|
NoSQL 도입 시 고려사항 (0) | 2018.08.11 |
(PostgreSQL)PostgreSQL의 Idle In Transaction Connection (0) | 2018.08.04 |
(PostgreSQL) OOM Killer (0) | 2018.08.03 |
(PostgreSQL) work_mem 메모리 설정 (0) | 2018.08.03 |