본문 바로가기

PostgreSQL

(PostgreSQL)PostgreSQL의 Idle In Transaction Connection PostgreSQL의 Idle in Transaction 상태란? PostgreSQL에 붙는 Connection은 열려있지만, 아무런 쿼리를 보내지 않는 상태를 의미한다. 세션에 idle in Transaction이 많은 경우 시스템 리소스를 많이 쓰게 된다. 그리고 pgpool, pgbouncer 같은 connection pooler가 transaction pooling mode로 실행되는 경우, 이 설정을 사용하는 의미가 없어질 수도 있다.커넥션 풀링에는 3가지 종류가 있는데, session pooling / transaction pooling / statement pooling이 있다. 여기서 transaction pooling은 클라이언트가 커넥션을 맺자마자 커넥션을 할당해주는게 아니라, tran..
(Django) DB Connection을 관리하는 방법 Connection 재사용 ( Persistent connections ) Django는 데이터베이스에 쿼리를 처음 날리기 전에 Connection을 맺는다. 그리고 커넥션을 계속 열어뒀다가, 다음 요청이오면 이걸 재사용한다. Request가 날라올 때마다 Connetion을 새로 맺는건 부담이 큰 작업이다. 그래서 Django에는 CONN_MAX_AGE라는 설정값이 있다. 여기에 설정된 기간만큼 Connection을 닫지않고, 보존하겠다는 개념이다. 따로 설정해주지 않으면 0으로 설정된다. 즉, Connection을 매번 만들고, 닫겠단 이야기다. 그리고 만약 Connection의 사용기간에 제한을 두고 싶지 않으면, None을 설정해주면 된다. ( Persistent Connections ) Conn..
(PostgreSQL) OOM Killer PostgreSQL 서버에 Out Of Memory가 발생하는 경우, PostgreSQL 자체를 재부팅해야지만 복구할 수 있다. 메모리가 부족해지고, Swap 영역이 증가하게 되면 Linux Kernel의 OOM Killer가 프로세스를 죽이게 된다. 그러면서 부족해진 메모리를 늘리고, Swap 영역을 줄인다. 이러면, 서버에 접속할 수 없는 수준으로 서버가 고장나는 일은 막을 수 있다. 그러나 OOM Killer가 Session을 죽이면서, DB Connection이 제 멋대로 끊길거다. PostgreSQL: SSL SYSCALL error: EOF detected 그러면 PostgreSQL에서 이런 에러가 내뱉어지면서, PostgreSQL을 사용하는 앱에서는 에러가 마구 날거다. 이 경우, Postg..
(PostgreSQL) work_mem 메모리 설정 postgresql의 work_mem이란? 이 값은 정렬 / 해시 / 조인 등의 동작에 사용될 수 있는 메모리 사용량을 의미한다. 이 메모리는 임시 디스크에 데이터를 쓰기 전에 사용된다. 기본값은 4MB으로 설정된다. 그런데 어떤 아티클에서는 일반적으로 64MB 정도가 적합한 수치라고 한다. 만약 PostgreSQL이 temporary file을 사용하고 있다면, work_mem을 늘리면 좋다. work_mem은 한 쿼리에서 사용되는 메모리 양을 의미하는게 아니다. 정렬 / 해시 / 조인 작업이 한 쿼리에서 동시에 일어날 수 있기 때문에, 각각의 동작에서 사용할 수 있는 메모리 수치를 의미한다. 만약 10GB짜리 데이터베이스를 쓴다고 가정해보자. 기본적으로 10MB씩 사용하는 커넥션이 100개가 있다고 ..