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」テーブルを通じてこの機能をサポートしてきたことを強調した。特定の統計情報を手動で注入してクエリプランナーの判断をテストする手法は、すでに確立された技術である。こうした一連のアップデートは、主要なリレーショナルデータベースにおいて、メタデータに基づいたパフォーマンス調整が標準化されつつあることを示している。