postgresql의 work_mem이란?
이 값은 정렬 / 해시 / 조인 등의 동작에 사용될 수 있는 메모리 사용량을 의미한다.
이 메모리는 임시 디스크에 데이터를 쓰기 전에 사용된다.
기본값은 4MB으로 설정된다. 그런데 어떤 아티클에서는 일반적으로 64MB 정도가 적합한 수치라고 한다.
만약 PostgreSQL이 temporary file을 사용하고 있다면, work_mem을 늘리면 좋다.
work_mem은 한 쿼리에서 사용되는 메모리 양을 의미하는게 아니다.
정렬 / 해시 / 조인 작업이 한 쿼리에서 동시에 일어날 수 있기 때문에, 각각의 동작에서 사용할 수 있는 메모리 수치를 의미한다.
만약 10GB짜리 데이터베이스를 쓴다고 가정해보자.
기본적으로 10MB씩 사용하는 커넥션이 100개가 있다고 생각했을 때, 메모리 사용량은 100 * 10MB (1GB)다.
그러면 9GB가 남아보인다고, 90MB으로 work_mem을 설정하면 안된다.
work_mem을 너무 크게 잡아도 문제가 된다.
만약 Postgres Log에 Out Of Memory가 나면, OOM Killer가 메모리를 만들어주려고 여기저기 프로세스를 죽이고 다닌다.
그래서 out of memory 에러를 발견하면 서버의 RAM을 높이던가, work_mem 사이즈를 줄여야한다.
참고
Configuring memory for Postgres
DatabaseError: SSL SYSCALL error: EOF detected (Intermitten
'소프트웨어-이야기 > 데이터 저장소 + 시각화 ' 카테고리의 다른 글
(PostgreSQL)PostgreSQL의 Idle In Transaction Connection (0) | 2018.08.04 |
---|---|
(PostgreSQL) OOM Killer (0) | 2018.08.03 |
(데이터 시각화)Redash란? (0) | 2018.06.23 |
[Redis]Redis에서 LRU Cache를 사용하는 방법 (0) | 2018.02.03 |
[Redis]라이브 환경에서 설정 변경하기 (0) | 2018.01.27 |