フリーブロックに関する検証 その8
<フリーブロックに関する検証 その8(最終回)> ペンネーム ちゃむ
今回で、~フリーブロックに関する検証~の最終回である。
以下の検証はフリーブロックに関連はするが、少し、横道にそれたものかもし
れない。
1.データファイルを複数もつテーブルスペースのエクステントの割当て方
2.フリーリストグループを指定したときのセグメントヘッダー
まずは、1.から検証する。
1_1.
TEST3Xというデータファイルを3つもつテーブルスペースを作成する。
create tablespace TEST3X datafile '/export1/home1/oradata/test3a' SIZE 1M, '/export2/home1/oradata/test3b' SIZE 1M, '/export3/home1/oradata/test3c' SIZE 1M;
1_2.
テーブルを作成し、1500件インサートする。
/*db_block_size=2kの環境 t10man_orgはEMP表を10万件まで膨らませた表*/
create table dummy1 ( dm number) tablespace TEST3X storage (initial 2k next 2k pctincrease 0 maxextents unlimited); insert into dummy1 select empno from t10man_org where rownum < 1501; commit;
1_3.
ここで、dba_extentsを見てみよう。
select TABLESPACE_NAME, SEGMENT_NAME, EXTENT_ID, FILE_ID, BLOCK_ID, BLOCKS from dba_extents where segment_name='DUMMY1'order by extent_id
TABLESPACE_NAME SEGMENT_NAME EXTENT_ID FILE_ID BLOCK_ID BLOCKS ------------------------------------------------------------------- TEST3X DUMMY1 0 34 2 2 TEST3X DUMMY1 1 32 26 1 TEST3X DUMMY1 2 33 93 1 TEST3X DUMMY1 3 34 69 1 TEST3X DUMMY1 4 32 82 1 TEST3X DUMMY1 5 33 39 1 TEST3X DUMMY1 6 34 101 1 TEST3X DUMMY1 7 32 85 1 TEST3X DUMMY1 8 33 59 1 TEST3X DUMMY1 9 34 21 1
ここで注目していただきたいのは、エクステントを割り当てるのに、データフ
ァイルFILE_ID 34,32,33の順に割り当てている点である。これは、オラクルが
自動的にデータを均等に分散してくれるためだ。
もし、明示的にこのデータファイルにアロケーションさせたいというニーズ
があれば、次のようにデータファイルを指定する。
alter table dummy1 allocate extent (size 100k datafile '/export1/home1/oradata/test3a')
OPS(Oracle Parallel Server Option)では、事前にエクステントをアロケーシ
ョンさせておくことは、INSERTの激しく行われるテーブルでFreelistの競合を防
ぐための1つの方法である。その場合はされらに以下のようにinstance番号も指定
する。
alter table dummy1 allocate extent (size 100k datafile '/export1/home1/oradata/test3a' instance 1)
OPSでは、テーブル作成時に指定するフリーリストグループが上記の事前アロ
ケーション同様非常に重要である。
ということで、2.の検証に移っていく。
2.フリーリストグループを指定したときのセグメントヘッダー
フリーリストグループは、OPS環境で、特にINSERTの多いテーブルにおいて、
インスタンス間のinsertを振り分けるために使用するものである。
フリーリストグループは、セグメントヘッダーにとられる。OPS環境ではこ
のセグメントヘッダーにアクセスが集中することがある。
今回はそのセグメントヘッダーがFREELIST GROUPによって何ブロック取られる
か見てみる。
/*db_block_size=2kの環境
minimum extent 2kで作成するのは、5ブロック単位の切り上げをさせないため*/
create tablespace TEST4a datafile '/export/home1/oradata/test4a' SIZE 1M minimum extent 2k;
/*freelist groupsをそれぞれ2,3,4で作成*/
create table dummy4_fg2 ( dm number) tablespace TEST4a storage (initial 2k next 2k pctincrease 0 freelist groups 2 maxextents unlimited); create table dummy4_fg3 ( dm number) tablespace TEST4a storage (initial 2k next 2k pctincrease 0 freelist groups 3 maxextents unlimited); create table dummy4_fg4_m2k ( dm number) tablespace TEST4a storage (initial 2k next 2k pctincrease 0 freelist groups 4 maxextents unlimited);
DBA_EXTETNSから見てみると以下のようになる。
TABLESPACE_NAME SEGMENT_NAME EXTENT_ID FILE_ID BLOCK_ID BLOCKS -------------------------------------------------------------------- TEST4A DUMMY4_FG2 0 36 2 4 TEST4A DUMMY4_FG3 0 36 6 5 TEST4A DUMMY4_FG4_M2K 0 36 11 6
、
freelist groups 1のときは、BLOCKSは2であったがfreelist groupsを複数
指定するとそれに応じて1ブロック別に取られることがわかる。
例えばDUMMY4_FG4_M2KのINITIALエクステントの中身は次のような構造になって
いる。
---------------------------------------------------------------------- SEGMENT FREELIST FREELIST FREELIST FREELIST DATA HEADER GROUP 1 GROUP 2 GROUP 3 GROUP 4 1ブロック 1ブロック 1ブロック 1ブロック 1ブロック 1ブロック 合計 6ブロック ----------------------------------------------------------------------
ちなみに、minimum extent 0で作成した表領域にfreelist groups 4
のテーブルを作成してみるとどうなるであろうか。
/*minimum extent 0*/
create tablespace TEST4b datafile '/export/home1/oradata/test4b' SIZE 1M;
/*freelist groups 4*/
create table dummy4_fg4_m0 ( dm number) tablespace TEST4b storage (initial 2k next 2k pctincrease 0 freelist groups 4 maxextents unlimited);
DBA_EXTENTSを見てみよう。TEST4Bは5ブロック単位で切り上げられるので、
10ブロック割当てられた様子がわかる。私は、これを避けたかったので、
上記の検証では、minimum extent=2Kを指定した。
TABLESPACE_NAME SEGMENT_NAME EXTENT_ID BLOCKS -------------------------------------------------- TEST4B DUMMY4_FG4_M0 0 10 ←10ブロックに切り上げ TEST4A DUMMY4_FG4_M2K 0 6 ←切り上げのない様子
今回で、~フリーブロックに関する検証 ~は終了です。
せっかくのメールマガジン。領域管理の検証だけでは、面白くないと思います
ので、テーマを変えることにしました。
とりあえず「ちゃむ」はいったんお休み….。充電させていただきます。
今後、もっといい記事を書くために、やってほしいテーマや、今回のテーマだ
ったフリーブロックに関して「ここが良かった」、「ここが悪かった」という
意見があればどしどしいただきたいと思います。
また、いろいろな検証結果をひっさげて皆様にご紹介したいと思います。
約2ヶ月間、お付き合いしていただきましてありがとうございました。
以上 茅ヶ崎にて