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 文を発行したとき、内部処理としてどのような順序で処理が行われているのか、という話。
ざっくりとした順序†
- from 句による表の選択
- where 句による行の切り出し
- 切り出しした表はメモリに展開される。メモリの節約などは where 句から考える
- group by 句によるグループ化
- having 句による行の切り出し
- order by 句のソート
オートトレース†
内部での SQL 文の解釈、実行計画、統計情報を参照できる。
- 方法
-- トレースの開始 set autotrace traceonly -- トレースの終了 set autotrace off
- 内容(例)
- index unique scan | hoge_pk
- プライマリキィ(unique)の索引(index)のスキャン。プライマリキィの制約名も列挙される。
- consistents gets
- メモリから読み込んだバッファ(8KB/buffer)の数。同じ結果が得られるのであればこれが少ない(=リソース使用量が少ない)ほうが良い。索引の付け方などの工夫も必要
- index unique scan | hoge_pk
Last-modified: 2011-10-17 (月) 12:33:25