DB/SQL/アーキテクチャ

Top / DB / SQL / アーキテクチャ

データディクショナリ

表の定義内容が格納される。create table 文の操作対象。

create table はデータディクショナリに定義内容を格納したのち、データファイルに作成した表のための領域を確保する。

drop table 文によって、データディクショナリの当該領域とデータファイルの当該領域がクリアされる。

キーワード

  • データセグメント
  • エクステント
    • 領域を割り当てる単位
  • データブロック

データファイル

表の実際のレコードが格納される。データファイル内に create table によって領域が確保され、insert 文によって更新される。

delete 文によってレコードは削除されるが、表のための領域そのものは削除されない。truncate 文は、レコードの削除だけでなく領域そのものの解放を行うこともある。


読み取り一貫性

トランザクションが二つ、ほぼ同時に走ったとする。

先に走ったトランザクション A が、あるレコードの値を 0 から 1 に変更した。トランザクション A のコミット前に、後から走ったトランザクション B が当該レコードを読み込んだとき、トランザクション B は、変更前の値 0 を得る。

トランザクション開始時点でコミットされていない更新は、そのトランザクションからは見えない。これを読み取り一貫性という。

このとき、上の例でいう値 0 を保持している場所が、データファイルの中の UNDO セグメント。トランザクション B の開始時に UNDO セグメントがメモリに読み込まれ、トランザクション B はそこを触る。

キーワード

  • UNDO セグメント

SQL 文の処理の順序

SQL 文を発行したとき、内部処理としてどのような順序で処理が行われているのか、という話。

ざっくりとした順序

  1. from 句による表の選択
  2. where 句による行の切り出し
    • 切り出しした表はメモリに展開される。メモリの節約などは where 句から考える
  3. group by 句によるグループ化
  4. having 句による行の切り出し
  5. order by 句のソート

オートトレース

内部での SQL 文の解釈、実行計画、統計情報を参照できる。

  • 方法
    -- トレースの開始
    set autotrace traceonly
    
    -- トレースの終了
    set autotrace off
    
  • 内容(例)
    • index unique scan | hoge_pk
      • プライマリキィ(unique)の索引(index)のスキャン。プライマリキィの制約名も列挙される。
    • consistents gets
      • メモリから読み込んだバッファ(8KB/buffer)の数。同じ結果が得られるのであればこれが少ない(=リソース使用量が少ない)ほうが良い。索引の付け方などの工夫も必要

Last-modified: 2011-10-17 (月) 12:33:25 (2587d)