🔥
データベースのパフォーマンスを決める要因~統計情報~
統計情報とは
統計情報は、テーブルやインデックスなどの「データ」についてのデータ、すなわち「メタデータ」です。DBMSはこのメタデータを頼りにSQLのアクセスパスを決定します。
SQL文発行からテーブルアクセスまでの流れ
SBMSがSQL文を受け取ると、テーブルにアクセスするために次のような流れを取ります。
1. ユーザー→パーサ
2. パーサ→オプティマイザ
3. オプティマイザ→カタログマネージャー
4. カタログマネージャー→オプティマイザ
5. オプティマイザ→テーブル
まず、ユーザーからSQL文がDBMSへ発行されます(1)。
「パーサ」というモジュールの役割は、SQL文が適当な構文であるかどうかをチェックすることです。文法的に間違っているSQL文はエラーとしてユーザーに返されます。
パーサのチェックが済むと、「オプティマイザ」というモジュールへ送られます(2)。オプティマイザはSQLのアクセスパス、つまり実行計画を決める役割を担っています。
実行計画を立てる際に、必要になるのが統計情報です。そこでオプティマイザは、「カタログマネージャー」というモジュールに、統計情報の照会をかけます(3)。
カタログマネージャーから統計情報を受け取り(4)、最短(と思われる)経路を選択肢、SQLを手続き型に変換します。それにしたがって、実データであるテーブルへアクセスを行います(5)。
統計情報の設計指針
一般的にエンジニアがSQLの実行計画立案に直接的に関与することはなく、統計情報を通じた間接的な関わり方になります。
つまり、設計において考慮することは以下の2点です。
- 統計情報収集のタイミング
- 統計情報収集の対象(範囲)
統計情報収集のタイミング
データが大きく更新されたあと、なるべく早く
の一点に尽きます。
レコード数が増減するのはもちろんのこと、データの値の分布や偏りが変わるため、アクセスパスの選定に大きく影響するからです。
統計情報収集の対象(範囲)
大きな更新のあったテーブル(およびインデックス)
が対象です。
Discussion