insert into TAB12_2 values(1, rpad('4KB_', 4000, '*'), null) ;
insert into TAB12_2 values(2, rpad('4KB_', 4000, '*'), rpad('4KB_', 4000, '*')) ;
commit;
4000バイトの列を2つ持つテーブルに対してデータを挿入します。
一つ目のデータは4000バイトのデータを1件、二つ目は2件
SQL> analyze table TAB1_2 list chained rows ;
表が分析されました。
SQL> select HEAD_ROWID, COL1, substr(COL2, 1, 8), substr(COL3, 1, 8)
2 from TAB1_2 a, CHAINED_ROWS b
3 where a.ROWID = b.HEAD_ROWID ;
HEAD_ROWID COL1 SUBSTR(COL2,1,8) SUBSTR(COL3,1,8)
------------------ ---------- -------------------------------- --------------------------------
AAATkbAAAAAAACUAAA 2 4KB_**** 4KB_****
analyse文で分析を実行します。
1件、行連鎖が発生しています。
先ほど、4000バイトのデータを2件挿入したため、4K+4K+αで8Kのブロックが溢れたためです。
SQL> update TAB1_3 set COL255='hoge' where COL001=0 ;
1行が更新されました。
SQL> commit;
コミットが完了しました。
SQL> analyze table TAB1_3 list chained rows ;
表が分析されました。
SQL> select TABLE_NAME, HEAD_ROWID from CHAINED_ROWS where TABLE_NAME='TAB1_3';
レコードが選択されませんでした。
今度は列を256個持つテーブルです。
1列目のデータを更新します。
行移行は発生していません。
SQL> update TAB1_3 set COL256='hoge' where COL001=0 ;
1行が更新されました。
SQL> commit;
コミットが完了しました。
SQL> analyze table TAB1_3 list chained rows ;
表が分析されました。
SQL> select TABLE_NAME, HEAD_ROWID from CHAINED_ROWS where TABLE_NAME='TAB1_3';
TABLE_NAME HEAD_ROWID
------------------------------ ------------------
TAB1_3 AAATkdAAAAAAACnAAA
今度は256列目のデータを更新してみます。
今度は行移行が発生したようです。
同じテーブルなのに更新する場所によって、行移行、行連鎖が発生します。
それは次回にでも
insert into TAB12_2 values(2, rpad('4KB_', 4000, '*'), rpad('4KB_', 4000, '*')) ;
commit;
4000バイトの列を2つ持つテーブルに対してデータを挿入します。
一つ目のデータは4000バイトのデータを1件、二つ目は2件
SQL> analyze table TAB1_2 list chained rows ;
表が分析されました。
SQL> select HEAD_ROWID, COL1, substr(COL2, 1, 8), substr(COL3, 1, 8)
2 from TAB1_2 a, CHAINED_ROWS b
3 where a.ROWID = b.HEAD_ROWID ;
HEAD_ROWID COL1 SUBSTR(COL2,1,8) SUBSTR(COL3,1,8)
------------------ ---------- -------------------------------- --------------------------------
AAATkbAAAAAAACUAAA 2 4KB_**** 4KB_****
analyse文で分析を実行します。
1件、行連鎖が発生しています。
先ほど、4000バイトのデータを2件挿入したため、4K+4K+αで8Kのブロックが溢れたためです。
SQL> update TAB1_3 set COL255='hoge' where COL001=0 ;
1行が更新されました。
SQL> commit;
コミットが完了しました。
SQL> analyze table TAB1_3 list chained rows ;
表が分析されました。
SQL> select TABLE_NAME, HEAD_ROWID from CHAINED_ROWS where TABLE_NAME='TAB1_3';
レコードが選択されませんでした。
今度は列を256個持つテーブルです。
1列目のデータを更新します。
行移行は発生していません。
SQL> update TAB1_3 set COL256='hoge' where COL001=0 ;
1行が更新されました。
SQL> commit;
コミットが完了しました。
SQL> analyze table TAB1_3 list chained rows ;
表が分析されました。
SQL> select TABLE_NAME, HEAD_ROWID from CHAINED_ROWS where TABLE_NAME='TAB1_3';
TABLE_NAME HEAD_ROWID
------------------------------ ------------------
TAB1_3 AAATkdAAAAAAACnAAA
今度は256列目のデータを更新してみます。
今度は行移行が発生したようです。
同じテーブルなのに更新する場所によって、行移行、行連鎖が発生します。
それは次回にでも
コメント