PostgreSQL, random_page_cost 설정을 제대로 해야 성능이 오른다!

by DD
3개월 전
조회수 14

PostgreSQL의 random_page_cost 기본값(4.0)이 최신 SSD 환경에서 실제 I/O 비용과 큰 차이를 보임

실험을 통해 random_page_cost가 25~35 사이로 측정됨을 확인, 쿼리 플래닝(Query Planning)에 영향

인덱스 스캔(Index Scan)시퀀셜 스캔(Sequential Scan)의 비용/시간 비교를 통해 적절한 플랜 선택의 중요성 강조

프리페칭(Prefetching)캐싱(Caching)을 고려한 cost 설정의 필요성, 성능 모니터링을 통한 튜닝 권장

random_page_cost의 부정확성

게시물에서는 PostgreSQL의 random_page_cost 기본값(4.0)이 최신 SSD 환경에서 실제 I/O 비용을 제대로 반영하지 못한다고 지적한다. 실험 결과, 로컬 SSD 환경에서는 25~35, 원격 SSD 환경에서는 더 높은 값으로 측정되었다. 이는 쿼리 플래너(Query Planner)가 잘못된 비용 추정(Cost Estimation)을 기반으로 쿼리 실행 계획을 세울 수 있음을 의미한다. 잘못된 비용 추정은 성능 저하로 이어진다.

쿼리 플랜 선택의 중요성

게시물은 인덱스 스캔(Index Scan)시퀀셜 스캔(Sequential Scan)의 비용과 실행 시간을 비교하여, 쿼리 플래너가 적절한 실행 계획을 선택하는 것이 얼마나 중요한지를 보여준다. 특히, selectivity(선택도)가 0.2%에서 2.2% 사이일 때 플래너가 잘못된 계획을 선택하여 쿼리 실행 시간이 최대 10배까지 증가할 수 있음을 강조한다. 쿼리 플랜(Query Plan)은 성능에 직접적인 영향을 미친다.

프리페칭(Prefetching)과 캐싱(Caching)의 영향

게시물은 프리페칭(Prefetching)캐싱(Caching)이 쿼리 성능에 미치는 영향을 분석한다. 프리페칭은 I/O 성능을 향상시키지만, 현재 PostgreSQL의 cost 모델은 이를 제대로 반영하지 못하고 있다. 또한, 캐싱된 데이터의 통계 정보를 정확하게 파악하는 것이 어려워, 플래너가 잘못된 결정을 내릴 수 있다. 캐시 적중률(Cache Hit Ratio)은 성능에 큰 영향을 미친다.

random_page_cost 튜닝의 실제 사례

게시물은 random_page_cost 설정을 튜닝할 때, 성능 모니터링을 통해 실제 효과를 검증해야 한다고 강조한다. 특히, OLTP 시스템과 같이 캐시 적중률이 높은 환경에서는 random_page_cost를 낮추는 것이 성능 향상에 도움이 될 수 있다. 하지만, 튜닝은 데이터셋과 쿼리에 따라 달라지므로, 지속적인 모니터링과 실험을 통해 최적의 값을 찾아야 한다. 성능 모니터링(Performance Monitoring)은 필수적이다.

The real cost of random I/O