helloworlds

not a noun, it's a verb

【SQL】DBMS 内部アーキテクチャ

DBについて復習しようと思いました。なので、 「SQL 実践入門 (技術評論社)」という本を参考にメモがてら書きます。

SQL実践入門──高速でわかりやすいクエリの書き方 (WEB+DB PRESS plus)

SQL実践入門──高速でわかりやすいクエリの書き方 (WEB+DB PRESS plus)

今回は1章の内容です。

RDB(Relational Database)製品には、OracleMicrosoft SQL ServerDB2、PostreSQL、MySQLなどが存在する。 MySQLがよく日本では業務をする上で目にしたり、聞いたりするだろう。 内部のアーキテクチャはどれも同じというわけではない。しかし、RDBという枠組みでは基本は一緒、主な概要を抑えておけばよいだろう。

クエリ評価エンジン

ユーザから受け取ったSQLを解釈し、いかなる手順で記憶装置のデータへアクセスするべきか決定する。(実行プラン) この計画に基づいたデータへのアクセス方法がアクセスメソッド。

バッファマネージャ

メモリ領域の使い方を管理する。 ディスク容量マネージャと連携しながら動く。

ディスク容量マネージャ

どこに、どのようなデータを保存するかを管理する。 それに対する、読み込みと書き込みを制御する。

トランザクションマネージャとロックマネージャ

DBMS内部では、トランザクションという単位で個々の処理が管理される。 このトランザクション同士をデータの整合性を保ちながら実行させたり、データにロックをかけて待機させたりという機能です。

リカバリマネージャ

いざという時にデータの復旧(リカバリ)すること。

記憶装置

  • HDD

データを保存するストレージ。 ほとんどの場合は、容量、コスト、パフォーマンスなどという点からHDDあ選択されているでしょう。

  • メモリ

DBMSは常にディスク以外にもデータを持つようにしている。それがメモリです。 記憶コストが高く、1台のハードに搭載できる量は多くはない。 頻繁にアクセスされるデータをうまくメモリ上に保持しておくことができると、 SQL文を実行した際、パフォーマンスの向上が見込める。 パフォーマンス向上とする目的でメモリのことをバッファキャッシュと呼ぶ。

メモリ上の2つのバッファ

  • データキャッシュ

ディスクにあるデータの一部を保持するためのメモリ領域。

  • ログバッファ

更新処理(INSERT,DELETE,UPDATE,MERGE)の実行に関係する。 更新処理は、すぐにストレージ上のデータに変更をかけているわではなく、 更新情報をログバッファに一時溜めている。

トレードオフ

データキャッシュに比べてログバッファの設定値が非常に小さい。 これはDBが基本的に検索をメインとして想定しているからだ。 最近のDBMSは自動でメモリの割当をしているが、よりタスクが大規模化したり、細密化していけば どのような思想に基いてリソース配分が行われているか、行わなければならないのかは知っておく必要がありそうです。

ワーキングメモリ

ソートやハッシュなどの特定処理に利用される作業用の領域。 (ワークバッファやソートバッファなどと呼ばれる)

データへのアクセス方法はどのように決まるのか

さきほども出てきたクエリ評価エンジンでアクセスを決める。 流れとしては以下。(上から下へ)

SQL
|
parser
|
optimizer--> catalog manager
|
plan evaluation
  • パーサー

構文解析。 受け取ったSQLを要素毎に分解しDBMSが処理しやすいように変換する。

  • オプティマイザ パーサーからきたクエリをもとにデータアクセス方法を決定する。 インデックス有無やデータの分散や偏りの度合い、内部のパラメータなどの条件を考慮し計画を作成、 コストを計算して、最も低コストは1つに絞り込む。

  • 各テーブルのレコード数 2.各テーブルの列数と列のサイズ

  • 列値のカーディナリティ(値の個数)
  • 列値のヒストグラム
  • 列内にあるnullの数
  • インデックス情報

上記の情報をもとに実行計画を作成するわけだが、このカタログ情報が実際のテーブルやインデックスと一致しない場合。その場合は統計情報を更新する必要とある。(例:ANALYZE) 運用しているとANALYZEをするタイミングも重要ですが...w

  • カタログマネージャ

DBMS内の内部情報えお集めたテーブル群で、テーブルやインデックスの統計情報が格納される。(統計情報)

  • プラン評価

オプティマイザから受け取った実行計画で、最適な実行計画を選択する。

おわり

と、いった具合でDMNSのアーキテクチャをざくっとかいてみましたの巻。