본문으로 건너뛰기
random_page_cost

random_page_cost

버전기본값context타입
144userstring
154userstring
164userstring
174userstring
184userstring
194userstring

비순차적으로 읽는 디스크 page 하나의 비용을 planner가 어떻게 추정할지 정한다. 기본값은 4.0이다. 특정 tablespace에 속한 테이블·인덱스에 대해서는 ALTER TABLESPACE로 같은 이름의 옵션을 설정해 따로 덮어쓸 수 있다.

이 값을 seq_page_cost보다 상대적으로 낮추면 planner가 index scan을 선호하고, 높이면 index scan을 상대적으로 비싸게 보아 sequential scan 쪽으로 기운다. 실제로 durable storage에 대한 random access는 sequential access의 4배보다 훨씬 비싸지만, 인덱스 읽기 같은 random access 대부분이 캐시에 적중한다고 가정하기 때문에 기본값으로 4.0을 쓴다. network-attached storage의 지연 시간이 random access의 상대적 부담을 줄여 준다는 점도 이 가정에 반영되어 있다.

캐시 적중이 기본 가정보다 드물고 네트워크 지연이 작다면 random_page_cost를 높여 실제 random read 비용에 가깝게 맞출 수 있다. 자기 디스크처럼 sequential 대비 random read 비용이 높은 storage도 더 큰 값으로 모델링하는 편이 맞다. 반대로 데이터베이스가 서버 메모리보다 작아 거의 캐시에 들어가거나 네트워크 지연이 큰 경우에는 값을 낮추는 것이 적절하다.

운영 노트: SSD나 NVMe 기반 storage에서는 random access 비용이 자기 디스크 시절보다 훨씬 낮으므로, random_page_cost를 1.1~2.0 정도로 낮춰 planner가 index scan을 더 적극적으로 고르게 하는 튜닝이 흔하다. 다만 seq_page_cost보다 낮게 잡는 것은 물리적으로 의미가 없으니 피한다.

출처: PostgreSQL 18 문서