🔥

データベースのパフォーマンスを決める要因~統計情報~

2021/06/20に公開

統計情報とは

統計情報は、テーブルやインデックスなどの「データ」についてのデータ、すなわち「メタデータ」です。DBMSはこのメタデータを頼りにSQLのアクセスパスを決定します。

SQL文発行からテーブルアクセスまでの流れ

SBMSがSQL文を受け取ると、テーブルにアクセスするために次のような流れを取ります。

1. ユーザー→パーサ
2. パーサ→オプティマイザ
3. オプティマイザ→カタログマネージャー
4. カタログマネージャー→オプティマイザ
5. オプティマイザ→テーブル

まず、ユーザーからSQL文がDBMSへ発行されます(1)。

「パーサ」というモジュールの役割は、SQL文が適当な構文であるかどうかをチェックすることです。文法的に間違っているSQL文はエラーとしてユーザーに返されます。

パーサのチェックが済むと、「オプティマイザ」というモジュールへ送られます(2)。オプティマイザはSQLのアクセスパス、つまり実行計画を決める役割を担っています。

実行計画を立てる際に、必要になるのが統計情報です。そこでオプティマイザは、「カタログマネージャー」というモジュールに、統計情報の照会をかけます(3)。

カタログマネージャーから統計情報を受け取り(4)、最短(と思われる)経路を選択肢、SQLを手続き型に変換します。それにしたがって、実データであるテーブルへアクセスを行います(5)。

統計情報の設計指針

一般的にエンジニアがSQLの実行計画立案に直接的に関与することはなく、統計情報を通じた間接的な関わり方になります。

つまり、設計において考慮することは以下の2点です。

  1. 統計情報収集のタイミング
  2. 統計情報収集の対象(範囲)

統計情報収集のタイミング

データが大きく更新されたあと、なるべく早くの一点に尽きます。

レコード数が増減するのはもちろんのこと、データの値の分布や偏りが変わるため、アクセスパスの選定に大きく影響するからです。

統計情報収集の対象(範囲)

大きな更新のあったテーブル(およびインデックス)が対象です。

参考文献

達人に学ぶDB設計徹底指南書

Discussion