RDBMSアーキテクチャの備忘録
現在、モデリング、 DBテーブル設計、DBチューニングに関する技術を一気に勉強している。WEBアプリのアーキテクチャを勉強して、フロントサイド(HTML,CSS,Javascript)、サーバーサイド(Java)の実装はできるようになったけど、DBまわりの知識が非常に乏しい(SQLでCRUD使えて、環境構築できるぐらい)ので、勉強している。
上記の記事では学んだデータモデリングの基礎をアウトプットけど、今回はDBチューニングに関する基礎を学んだので、それをアウトプット。今、利用している書籍は下記です。今の自分の知識量ではついていくのに少々厳しいところがあるけど、非常に詳しく解説しているので、おすすめ。
RDBMSアーキテクチャ
DBMS(Data Base Management System)はその名を通り、DBを管理するシステム。SOLがDBMSに渡り、解釈され、DBにアクセスされる。この解釈されの部分の仕組みを知らないと、DBチューニングできない。
クエリ評価エンジン
データベースにアクセスする手続きを決めるモジュール。ユーザから送信されたSQLを受けとる。クエリ評価エンジンはさらに5つのモジュールに分類できる。
1.パーサ
受け取ったSQLを分解し、SQLの構文に間違いがないかチェックする。
2.オプティマイザ
選択可能な実行計画を、データの分散や偏りの度合いなどの情報を考慮し作成する。そして作成された実行計画のコストを評価して、最も低コストな実行計画に絞り込む。うまくオプティマイザが動かない場合、カタログマネージャーに記録されている統計情報が古いままの場合があるので、更新処理を行う。
3.カタログマネージャー
オプティマイザが選択可能な実行計画を作るときに必要な情報を保持していて、それを必要な時に提供する。
4.プラン評価
オプティマイザが作成した実行計画から最適なものを選択し、手続き型のコードに変換する。
※実際に利用される計画実行はコマンドで確認できるので確認しながら行うことが多い。
バッファマネージャ
パフォーマンス向上のためにメモリに格納する情報を管理する。DBMSが情報を保持するために使うメモリには大きく2つある。ユーザが用途に応じて容量を変更することも可能。通常は性能試験の段階で各容量を検討する。
データキャッシュ
ディスクにあるデータの一部。運悪く、メモリの中に取り出したい情報がなかった場合、パフォーマンスが低下する。
ログバッファ
DBMSは更新SQL文を受け取っても即座にストレージ上のデータを変更せず、一度ログバッファ上に変更情報を溜めて、更新はあとでまとめて行う。また、ログファイルは同期処理でコミット時に行われるが、ストレージへの更新処理は後にして、処理能力と堅牢性のどちらも担保する。
※ワーキングメモリ
ハッシュ、ソートなどの特定の処理に利用されるメモリ。データ領域が不足すると、ストレージ上で処理を行うので非常に処理が遅くなる。(スワップ)
ディスク容量マネージャ
ストレージのどこにどのようなデータを保存するかを管理し、それに対して読み出し/書き込みを行う。
トランザクションマネージャとロックマネージャ
トランザクション同士をうまく整合性を保ちながら実行し、必要であればロックをかける。
リカバリマネージャ
定期的にバックアップを取る