ablog

不器用で落着きのない技術者のメモ

「Oracle脱ビギナー宣言 第3回 Oracleの動作に欠かせない領域の数々」のまとめ

DBマガジンの連載「Oracle脱ビギナー宣言(by一志達也さん)」がいい。
仕組みや昔のOracleではどうやってたかというのがあって、で最新バージョンではどのように自動化されてるというふうな説明になっている。絵を使って仕組みが説明されているのがうれしい。


「第3回 Oracleの動作に欠かせない領域の数々」の内容を浅くまとめてみた。

  • エクステント管理
    • ディクショナリ管理とローカル管理がある。
    • ローカル管理がよい。
    • ディクショナリ管理のデメリット。
      • システム表領域内の表に再帰SQLを発行するので遅い。ローカル管理の場合、表領域ヘッダで管理する。
      • データが削除されてできた空き領域を再利用するためには連続した空き領域の結合が必要。ローカル管理の場合、結合しなくても使える。
  • エクステント割り当て
    • 均一エクステントサイズと可変エクステントサイズがある(ローカル管理の場合のみ)。
    • 均一エクステントサイズのメリットはエクステントサイズが一定なので断片化しずらいこと。デメリットは均一エクステントのサイズより小さなセグメントが多いと、無駄に領域を使うこと。
    • 可変エクステントのメリットは無駄に領域を使わないこと。デメリットは断片化しやすいこと。
    • たとえば、データ量の小さいコード表用の表領域は可変エクステントにして、データ量が多く頻繁に追加/更新/削除されるトランザクション用の表領域は均一エクステントにする。とかでよいのかな。
  • ブロックの空き領域管理
    • 自動セグメント領域管理(ASSM)を使うと楽ちん。PCTFREEだけ設定すればよい。10gR2以降デフォルト。
    • 手動管理の場合は、PCTFREE、PCTUSED、INITRANS、MAXTRANS、FREELISTS などのパラメータを自分で設定する。


[参考]
DB Magazine (マガジン) 2009年 07月号 [雑誌]
Interested Transaction List - オラクル・Oracleをマスターするための基本と仕組み
トランザクションエントリに関する検証 その1 | Insight Technology, Inc.
ASSMに関する検証 その1 | Insight Technology, Inc.
データ・ブロック、エクステントおよびセグメント