フリーブロックに関する検証 その7

<フリーブロックに関する検証  その7>  ペンネーム  ちゃむ
1.minimum extentに関して<前々回説明>
2.少ないフリーブロックの断片をなるべく残さないような動き<前回説明>
3.フリーブロックをどのように使うかを表わしたフローチャート

2_1.create tablespaceで空きスペースが5ブロック以下になるようなSIZE
を指定したとき
2_2.minimum extentを変更したとき

2_2.に関してもう少しだけ説明を加える。前回は、minimum extentを指定し
なかったとき(default 0)の動きを見た。
一見すると、db_block_size=2kのときエクステントをアロケーションする単位
は、1ブロックから5ブロックまでは、minimum extent 2k(1ブロック)を指定し
たときの動きで、6ブロック以上からは、minimum extent 10k(5ブロック)を指
定したときの動きに見える。しかし、はたして、本当にまったく同じ割り当て
方だろうか?

以下の問題に答えていただきたい。

問題
DB_BLOCK_SIZE=2Kでminimum extent 0 のとき(デフォールトのとき)と
minimum extent 10K (5ブロック)のときで、114ブロックのフリーブロックの
連続領域のテーブルスペースにinitial 114ブロックのテーブルを作成すると以
下のどちらになだろうか?

1.115ブロックとろうとして、エラーになる。
2.114ブロックきっちりとる。

正解はこちら
minimum extent 0   のとき      2.
minimum extent 10K のとき      1.

ということで、minimum extent 10Kを指定したときには、あくまでも5ブロック
単位でしか領域を割り当てられないことを示し、minimum extent 0のときは、6
ブロックを以上のエクステントを割り当てるときは5ブロック単位で割り当てよ
うとするが、もし割り当てられないと切り上げる前の値、上記の例では114ブロ
ックを割り当てる動きをする。フリーブロックの断片をなるべく残さないような
動きで少し違いが出たことがわかる。以下に検証結果の様子を示す。

/*フリーブロックを114ブロックもつテーブルスペースをminimum extent 0,10k
でそれぞれ作成*/

create tablespace tbs114_m0 datafile
'/shome/share/tbs114_m0' SIZE 230k
minimum extent 0
default storage (pctincrease 0);

create tablespace tbs114_m5 datafile
'/shome/share/tbs114_m5' SIZE 230k
minimum extent 10k
default storage (pctincrease 0);

/*それぞれのテーブルスペースにinitial 114ブロックのテーブルを作成*/

create table tb114_m0 (col1 number)  tablespace tbs114_m0
storage(initial 228k  minextents 1);

表が作成されました。
create table tb114_m5 (col1 number)  tablespace tbs114_m5
storage(initial 228k  minextents 1);

にエラーが発生しました。ORA-01658: 表領域:
TBS114_M5にセグメント用のINITIALエクステントを作成できません。

検証結果から、問題の結果が読み取れるだろう。

3.フリーブロックをどのように使うかを表わしたフローチャートに関しては
以下にその図を示す。これは、すべて、検証によって積み上げた結果の
フローチャートである。今までの記事をふまえて、見ていただくと理解できる
と思う。

次回でこの~フリーブロックに関する検証~は最終回となります。

以上  茅ヶ崎にて

~フリーブロックに関する検証 その7~
by  ちゃむ