성능 테스트 중인데 pg_stat_statements 로 테스트 구문의 shared_blks_read 를 확인하니 0 으로 나와서 문의 드립니다.
total_time 이나 calls 는 부하테스트 프로그램에서 쏘는 만큼 제대로 보이는것 같은데 calls 나 time 이 올라가도 hared_blks_read 나 local_blks_read 값은
변하지 않고 계속 0으로 보여서 문의 드립니다.
shared_blks_read 값은 데이터 페이지를 shared buffer로 옮기는 작업입니다.
데이터베이스 서버를 재실행하면 공유 버퍼가 초기화 될 것이고,
그 뒤 첫 쿼리를 하면 이 값이 바뀌겠죠.
그 외 공유 버퍼에 다른 데이터 페이지들이 가득한데, 어떤 쿼리가 새로운 데이터 페이지를 공유 버퍼로 옮겨야할 상황이 발생하면 숫자가 올라가겠죠.
그럼 쿼리를 수행하면서 해당 쿼리로 인해 읽은 블록 수를 확인할 수 있는 방법은 없을까요?
pg_stat_statements 확장 모듈을 사용하는 경우는 다음과 같고요.
select 쿼리라면, 단순하게, shared_blks_read + shared_blks_hits 로 생각하면 됩니다.
물론 sort 같은게 있는데, 이게 임시 파일을 사용한다면, temp_ 관련 값들도 봐야할 것 같고요.
자료 조작 쿼리들이라면, shared_blks_written도 봐야하고, 그렇습니다.
단 이 값들은 누적치입니다. 그래서, calls 로 나눠야 그 쿼리 한번에 사용한 사용량이 나옵니다.
----
이것 말고 전통적인 방식은
explain (analyze, buffers) 쿼리;
형태로 오라클 용어로 쿼리 trace 를 할 수 있습니다. 일반적으로 튜닝 작업 때는 이걸 씁니다.
물론 그 모양을 오라클처럼 기대하시면 안되고요.
json 형태로도 출력이 가능하니까, 그 출력을 postgresql explain viewer 같은 무료 웹서비스를 통해서 좀더 편하게 볼 수 있는 방법도 있고요.
답변 감사합니다