ローカル管理表領域
ローカル管理表領域は 表領域 のヘッダ部分に 64K バイト(ブロックサイズが〜16K バイト) 、128K バイト(ブロックサイズが32K バイト)の領域を取る。
この領域で使用・未使用ビットマップを作成してブロック、ブロックグループ単位にエクステント管理を行っている。
ローカル管理表領域の特徴
- 空き領域のコアレス処理が不要。
- 領域管理の処理がテーブルスペース単位に分散されている(I/Oの拡散)
そのため領域管理の処理も高速に処理される。⇔ ディクショナリ管理表領域、 ST エンキュー
ローカル管理表領域を「あえて使用しない」という話は聞いたことがないので、ローカル管理を積極的に使用する。
ディクショナリ管理表領域が優れているのはダイレクト・パス・インサート時に 1 回のエクステント拡張処理で
データ登録できるくらいだと思われる。
一方、ローカル管理表領域の場合、特に UNIFORM ALLOCATE の場合には処理サイズによりエクステント数が多くなる。
しかし、データブロック(グループ)単位のビットマップで管理され、さらに分散配置されるため
ディクショナリ管理表領域のようにエクステント数に気を遣うことはない。
エクステント管理の種類
UNIFORM ALLOCATE (均一) 管理
エクステント・サイズを指定する(省略時 1M バイト)
均一サイズのエクステントの獲得(と解放)を行うため解放領域は再利用され、テーブルスペース内でエクステントの使用不可領域、歯抜けの状態(断片化の一形態)が発生しにくい。
しかし、エクステントサイズが小さくてもよいものと大きなものを同じ定義にすると効率が悪くなる。
(エクステントの個数が多い or 必要以上のサイズのエクステントを割り当てているなど)
注意 :きっちり使い切ろうとしてテーブル領域サイズを UNIFORM SIZE の倍数で宣言してはいけない。
ローカル管理表は先頭に 64K バイト(もしくは128K バイト) の領域を使用する、すると最後の 1 つになったときに割り当てるべき
空き領域が容量不足になり未使用領域が発生する。
テーブルスペースは、UNIFORM SIZEの倍数に +256K バイト〜1M バイト程度の余裕をつけて作成する。(1M バイト にして半端を出さない方が管理しやすい)
SYSTEM 表領域 は、UNIFORM ALLOCATEを指定することはできない。
AUTO ALLOCATE (システム)
パラメータはシステム管理(自動)で算出する。
各種エクステントの大きさはセグメントサイズによりダイナミックに変動しているが算出方法はわかりません(※)
(※) 公式情報では見つけられなかったのですが調査した情報が載っているところもありますので検索してみてください。
セグメントの大きさによりエクステントのサイズが選択されるため、獲得、解放が繰り返されると断片化しやすい。
ビットマップで管理されているイメージ)
DDL の例
CREATE TABLESPACE tablespace_name
DATAFILE '/〜/oradata/<SID>/hoge_uniform01.dbf'
SIZE 123M AUTOEXTEND ON
NEXT 246M
MAXSIZE UNLIMITED
BLOCKSIZE 8K
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 3M または EXTENT MANAGEMENT LOCAL AUTOALLOCATE
-- ↑ ローカル管理 UNFORM で SIZE 句を省略した場合には 1M
SEGMENT SPACE MANAGEMENT AUTO ;
-- ↑ 自動セグメント領域管理
表領域の管理方式の変換
ディクショナリ管理表領域からローカル管理表領域に変換したい場合には、DBMS_SPACE_ADMIN パッケージを使用する。
SQL> EXECUTE DBMS_SPACE_ADMIN.TABLESPACE_MIGRATE_TO_LOCAL('TABLE_SPACE_NAME');
ALTER TABLESPACE には該当するコマンドはない。
注意事項
- Oracle 10g は全表領域に対してローカル管理表領域がデフォルト(システム表領域含む)
- Oracle 9i R1 からローカル管理表領域がデフォルトの表領域
- Oracle 9i R2 からシステム表領域もローカル管理が可能になる。(※)
(※) デフォルト設定ではシステム表領域はディクショナリ形式で作成される。
(注意) システム表領域をローカル管理表領域で作成するとディクショナリ管理表領域は作成できなくなる。
10g の通常のデータベース作成ではディクショナリ管理表領域は作成できない
(DBMS_SPACE_ADMIN.TABLESPACE_MIGRATE_FROM_LOCAL による変換もエラーとなる)
表領域に関連する内容