ロールバック・セグメントに関する検証 その2
~ロールバックセグメントに関する検証 その2 ~
ペンネーム ちゃむ
前回は、パブリック・ロールバック・セグメントと
プライベート・ロールバック・セグメントの違いについて述べた。
今回は、プライベート・ロールバック・セグメントの使用される順番に関して
説明する。
結果からいうと、プライベート・ロールバック・セグメントが使用される順番
は、初期化パラメータによって決められる。では、その様子を見ていこう。
1.初期化パラメータのrollback_segmentsの指定を確認
SVRMGR> show parameter rollback_segments NAME TYPE VALUE ----------------------------------- ------- ------------------------ max_rollback_segments 整数値 30 rollback_segments 文字列 r1, r2, r3, r4, r0, RBS0
2.既存のテーブルを確認
SQL> select * from tab where tname like 'A%' ; TNAME TABTYPE CLUSTERID ------------------------------ ------- --------- A TABLE A1 TABLE A2 TABLE A3 TABLE A4 TABLE A5 TABLE A6 TABLE A7 TABLE
3.別プロセスから順番に以下のupdate文を発行する。
(sqlplusを個々に起動し、それぞれ以下のSQL文を発行。トランザクションを
終了させないためにcommitは発行しない。)
プロセス1より update a set ename = ‘osamu’;
プロセス2より update a1 set ename = ‘osamu’;
プロセス3より update a2 set ename = ‘osamu’;
プロセス4より update a3 set ename = ‘osamu’;
プロセス5より update a4 set ename = ‘osamu’;
プロセス6より update a5 set ename = ‘osamu’;
プロセス7より update a6 set ename = ‘osamu’;
プロセス8より update a7 set ename = ‘osamu’;
4.ロールバック・セグメントのトランザクション開始時間順にselectする。
(ロールバック・セグメントの使用された順番に検索)
select t.xidusn,r.segment_name,t.used_ublk, t.start_time from dba_rollback_segs r,v$transaction t where t.xidusn = r.segment_id order by t.start_time; XIDUSN SEGMENT_NAME USED_UBLK START_TIME --------- ------------------------------ --------- -------------------- 2 R1 2 02/26/01 14:44:39 3 R2 1 02/26/01 14:45:00 4 R3 2 02/26/01 14:46:17 5 R4 2 02/26/01 14:46:36 1 R0 1 02/26/01 14:46:51 6 RBS0 1 02/26/01 14:47:06 7 R_PUB 1 02/26/01 14:49:43 2 R1 1 02/26/01 14:50:57
上記の結果と、初期化パラメータrollback_segmentsの指定の順番を見ると見事
に一致する。
R_PUBは、前回作成したパブリック・ロールバック・セグメントであるが、これ
は、初期化パラメータrollback_segmentsに最後に指定したかのように動く。
(今回は、CEIL(TRANSACTIONS/TRANSACTIONS_PER_ROLLBACK_SEGMENT)
=CEIL(75/5)=25なので、最大でプライベート、パブリック合わせて25個まで
のパブリック・ロールバック・セグメントを起動する。)
このように、初期化パラメータで指定された順番でロールバック・セグメント
が使用されていくといく構造を理解したところで、どのようなメリットがある
のだろうか?
<メリット>
ディスクI/Oの競合を減少できることにつながる。
それを示したものが以下の画像です。
このように、ディスクの分散を考えると、rollback_segmentsで指定する順番で
ロールバック・セグメントが使用されるのは、非常に重要なことであろう。
パブリック・ロールバック・セグメントを作成しておくと、初期化パラメータ
rollback_segmentsを指定しなくてもデータベースを起動することができるが、
rollback_segmentsを指定しないと、上記のようなメリットを享受できないこと
も覚えておこう。
以上 ちゃんと戻しておけ 茅ヶ崎にて