PostgreSQL 18, 데이터 없이 운영 쿼리 계획 시뮬레이션 지원
- •PostgreSQL 18, 로컬 환경에서 운영 쿼리 계획을 복제할 수 있는 통계 정보 추출 기능 도입
- •수백 기가바이트 규모 데이터베이스의 고정밀 통계 덤프를 1MB 미만의 크기로 생성 가능
- •SQLite 제작자, 쓰기 가능한 통계 테이블을 통해 수동으로 쿼리 계획을 제어하는 기존 기능 언급
운영 환경의 데이터베이스 성능 문제를 로컬 개발 환경에서 동일하게 재현하는 작업은 엔지니어들에게 늘 까다로운 과제였다. 특히 데이터베이스 엔진이 명령을 실행하는 가장 효율적인 방법을 결정하는 쿼리 플래너는 개발 환경에서 다르게 작동하는 경우가 많다. 이는 개발 환경에 실제 운영 데이터의 방대한 규모와 분포 특성이 반영되지 않았기 때문에 발생하는 문제다.
PostgreSQL 18은 pg_restore_relation_stats() 및 pg_restore_attribute_stats() 함수를 도입하여 이러한 한계를 극복했다. 개발자는 이 기능을 활용해 민감하거나 용량이 큰 운영 데이터를 직접 이전하지 않고도 값의 빈도나 열 너비와 같은 내부 통계 정보만 가져올 수 있다. 통계 정보를 시뮬레이션함으로써 로컬 데이터베이스는 마치 운영 규모의 데이터를 처리하는 것처럼 인식하게 되며, 결과적으로 실제 운영 환경과 일치하는 쿼리 계획을 생성한다.
이러한 접근 방식의 효율성은 매우 놀라운 수준이다. 기술 전문가 라딤 마렉(Radim Marek)은 수백 기가바이트에 달하는 데이터베이스의 통계 정보가 1MB 이하의 텍스트 파일에 모두 담길 수 있다고 설명했다. 덕분에 전체 데이터베이스를 복제할 때 따르는 보안 위험이나 저장 공간의 부담 없이도 느린 쿼리를 신속하게 디버깅할 수 있게 되었다.
한편, SQLite의 제작자인 D. 리처드 히프(D. Richard Hipp)는 SQLite가 이미 쓰기 가능한 sqlite_stat 테이블을 통해 이러한 기능을 오랫동안 지원해 왔음을 강조했다. 개발자는 특정 통계치를 직접 주입하여 쿼리 플래너의 결정을 강제하거나 테스트할 수 있으며, 이는 수동 계획 제어를 위한 기법으로 잘 알려져 있다. 이처럼 주요 관계형 데이터베이스 시스템들은 점차 메타데이터 중심의 성능 튜닝 방식을 강화하는 추세다.