구글링해가며 열심히 공부하고 있는데요. 그리 깊은 지식 아니라
정확하게 이해하고 넘어가려니 어려워 글을 남기게 되었습니다.
checkpoint_completion_target 이 정확한게 어떤 용도고 어떻게 사용되는지...
effective_cache_size가 어떤 용도이고 어떻게 사용되는지가 가장 궁금합니다.
완전히 하나하나 알아가야하지만 그중에 이해가 잘 안되는 부분만 여쭙습니다.
답변 부탁드립니다.
checkpoint_completion_target 이 설정값은
checkpoint_timeout (기본값 5분) 가운에 몇 %에서 checkpoint를 마무리지을것인가를 지정합니다.
이값의 기본값인 50은 5분/2 가 되겠지요. 즉 2분 30초 안에 checkpoint를 마무리 지어라고 지정하는 것입니다.
checkpoint 량이 많다면, I/O 분산을 이유로 이 값을 크게 잡기도 하고,
불의의 사고에 의한 데이터 손실이 I/O 분산보다 더 중요하면 아주 짧게 잡기도 합니다.
통상 기본값 그대로 쓰면됩니다.
pg_stat_bgwriter 뷰 정보를 수집해서 checkpoint 량이 어떻게 되는지 살펴봅니다.
----
effective_cache_size 는 OS의 디스크 캐시 가운데, DB의 데이터파일(인덱스 포함)이 어느정도 들어있을까? 라는 추정값입니다. 어디에 쓰이냐면, 쿼리 최적화 작업을 할 때 시퀀스 스캔을 쓸지 말지를 결정하는데 쓰입니다. 즉, 그 값만큼 실 메모리를 쓰는게 아니고, OS 물리적 메모리 가운데, '이정도는 디스크 캐시에 있겠지' 라는 설정값입니다. 이 값이 적으면, 인덱스 파일이 OS 디스크캐시에 별로 없을 것이다고 판단해서 시퀀스 스캔을 선택할 경우가 높아지고, 그 반대면 인덱스 스캔을 할 경우가 높아집니다.
이 값은 통상 OS 물리적 메모리의 50% 정도를 잡습니다. 물론 shared_buffer 값을 크게 잡았거나, 해당 OS에 DB말고 다른 서비스들도 함께 운영되고 있다면, 그것도 함께 고려해서 적정값을 지정하면 될 것 같네요.
답변 감사합니다. 정말 큰 도움이 되었습니다.