最近めっきりブログを更新しなくなってしまっていたので、アウトプットのリハビリがてら勉強している本の簡単なまとめを書いて行こうと思います。
主な用語
- クエリ評価エンジン
- ユーザから受け取ったSQLの解釈を行い、どのような手順で記憶装置のデータにアクセスしに行くかを決定する(実行計画)
- バッファマネージャ
- バッファ(メモリ)領域の使い方を管理する。ディスク容量マネージャと連携して動く
- ディスク容量マネージャ
- どこにどのようなデータを保存するか管理し、それに対する読み出し・書き込みを制御する
- トランザクションマネージャ・ロックマネージャ
- リカバリマネージャ
大まかな処理の流れとして
- DB使用者が実行したSQL文がDBMSに届き、様々な処理がされてから記憶装置に蓄えられたデータにアクセスされる
3種類のメモリ
DBMSがデータ保持に使うメモリには大きく分けて2種類ある
データキャッシュ
- ディスクにあるデータの一部をキャッシュするメモリ領域。(アプリケーションエンジニアが通常イメージする所のキャッシュ)
- データ読み取り処理の実行に関係する
ログバッファ
- データ更新処理(INSERT, DELETE, UPDATE, MERGE)の実行に関係する
- DBMSは更新SQL文をユーザから受け取った時、即座にストレージ上のデータを更新している訳ではなく、一度ログバッファに更新情報を溜めて、ディスクへの更新はあとでまとめて行なっている。
- 更新処理はCOMMITのタイミングで同期処理となる(つまり、更新処理はSQL文の実行タイミングとストレージへの更新タイミングにズレがある非同期処理ということ)
ワーキングメモリ
- ソートやハッシュなど特定の処理に利用される作業用のメモリ領域
クエリ評価エンジンの構成
実行計画を決定するクエリ評価エンジンは複数のモジュールから構成されている
- パーサ
- オプティマイザ
- パースされたクエリを受け取り、最適なデータアクセスの方法が、インデックスの有無やデータの分散などの様々な観点から計算され決定される(実行計画の決定)
- カタログマネージャ
- オプティマイザが実行計画を立てる際に重要な情報を提供する
- カタログとはDBMSの内部情報を集めたテーブル群のことで、テーブルやインデックスの統計情報が格納されている(カタログの情報は単に「統計情報」と呼ぶ)
- プラン評価
- オプティマイザがSQL文から複数の実行計画を立てたあと、それを受け取って最適な実行計画を選択する
- 実行計画はまだDBMSが実行できるコードになっておらず、あくまで人間向けの「計画書」。パフォーマンスの悪いSQL文については、実行計画を読んで補正案を考えたりSQLにHINT句を埋め込んでオプティマイザを強制的に変更することもある
- 1つに実行計画に絞り込まれたあと、DBMSは実行計画を手続き型のコードに変換してデータアクセスを行う