오래간 만에 글을 남깁니다.
PostgreSQL 디스크 I/O 성능에 대한 튜닝을 위해서 보는 로그 가운데 하나가 checkpoint 작업에 대한 로그입니다.
이 로그는 기본설정으로는 보이지 않습니다.
checkpoint 로그를 보려면,
- postgresql.conf 파일에서 log_checkpoints 항목을 찾아서 그 값을 on으로 바꾼다.
- pg_ctl reload 명령으로 환경설정을 다시 로드한다.
- 로그 파일을 지켜본다.
로그 파일에는 checkpoint 작업을 시작한다는 로그와, 끝났다는 로그가 쌓입니다.
1. checkpoint starting: time
- 여기서 time 이라는 단어는 checkpoint 작업이 어떤 작업 때문에 실행되는가에 대한 것을 설명합니다.
- time: checkpoint_timeout 설정값에서 지정한 checkpoint 강제 실행 임계시간을 초과해서 실행되는 경우
- xlog: checkpoint_segments 설정값에서 지정한 트랜잭션 로그 쪼가리 파일을 모두 다 사용해서 이 쪼가리 파일을 재활용하기 위해서 실행되는 경우
- immediate force wait: pg_start_backup() 함수에서 강제로 체크포인트 작업을 진행하라고 지정해서 실행되는 경우
- force wait: pg_start_backup() 함수에서 강제로 체크포인트 작업을 진행하라고 지정 안하고 실행되는 경우
- shutdown immediate: 서버 중지 명령에 의해서 체크포인트 작업을 진행하는 경우
2. checkpoint complete: wrote 3397 buffers (55.3%); 0 transaction log file(s) added, 0 removed, 0 recycled; write=268.190 s, sync=0.019 s, total=269.369 s; sync files=7, longest=0.016 s, average=0.002 s
- shared_buffers 에 있는 데이터 블록 가운데 총 3397개의 블럭을 디스크로 기록했으며 그게 전체 공유 버퍼 가운데, 55.3% 차지했고,
- 0 개의 트랜잭션 로그 쪼가리 파일이 추가 되었으며, - 이번 체크포인트 작업으로 트랜잭션 재활용을 위한 트랜잭션 로그 쪼가리 파일을 새로 추가한 것은 없으며,
- 트랜잭션 로그 쪼가리 파일을 지운 것도 없으며,
- 재활용을 위해서, 오래된 이름의 쪼가리 파일을 사용할 쪼가리 파일로 이름을 바꾸지도 않았으며,
- 이 블록을 디스크게 기록하는 작업에서 총 268.190초 걸렸으며,
- OS file sync 작업에 0.019초 걸려고,
- 전체 269.369초 걸려고,
- 이 작업에 사용된 파일은 총 7개 였고,
- sync 작업에 제일 오래 걸린 파일은 0.016초 걸려고,
- 평균 0.002초 걸렸다.
이렇게 수집된 자료를 보면, 이놈이 OS의 I/O 자원을 얼마나 쓰는지를 확인할 수 있습니다.
윗 작업을 예로 들면, 3397 * 8KB(블록 크기) = 약 27MB 메모리에 있는 정보를 268초 동안 디스크에 기록했으니, 계산하면 약 100KB/sec 디스크 쓰기 작업을 한 샘입니다.
해당 OS의 최대 디스크 쓰기 속도를 감안하면, 이 체크포인트 작업의 디스크 쓰기 부하를 감안할 수 있습니다.
그럼 이 디스크 쓰기 부하를 줄이는 방법
.....
다음에.
|