~ロールバックセグメントに関する検証 その3 ~
ペンネーム ちゃむ

前回は、プライベート・ロールバック・セグメントの使用される順番に関して
説明した。

今回は、TRANSACTIONS_PER_ROLLBACK_SEGMENTに関して掘り下げて調べていきた
いと思う。

TRANSACTIONS_PER_ROLLBACK_SEGMENT

マニュアルには以下のように書いてある。

----------------------------------------------------------------------
TRANSACTIONS_PER_ROLLBACK_SEGMENT には、各ロールバック・セグメントを処
理する同時トランザクションの数を指定します。起動時に取得されるロールバ
ック・セグメントの最小数は、TRANSACTIONS をこのパラメータの値で割った数
です。たとえば、TRANSACTIONS が101でこのパラメータが10 の場合、取得され
るロールバック・セグメントの最小数は101/10 となり、11 に切り上げられます。
ロールバック・セグメントをROLLBACK_SEGMENTS パラメータに指定すると、より
多くのロールバック・セグメントを取得できます。
----------------------------------------------------------------------

この中で記述されていることを元に、以下のことを実際に調べてみようと思う。

1.CEIL(TRANSACTIONS/TRANSACTIONS_PER_ROLLBACK_SEGMENT)の値とどのよう
に関連して、パブリック・ロールバック・セグメントが起動されるのか?
(CEIL(A)ならA以上の最小の整数)

2.TRANSACTIONS_PER_ROLLBACK_SEGMENTで指定した数だけ、各ロールバック・
セグメントで同時トランザクションを処理できるのかどうか?

1.の検証

1_1.

パブリック・ロールバック・セグメントを50個作成する。
以下は、検証生活ではお馴染み「POPSQL」のスクリプト。

-----------------------POPSQLのスクリプト-----------------------
CONNECT SYSTEM/MANAGER
LOOP (I=1; I SHOW PARAMETER TRANSACTIONS
[/jva]
<pre>
NAME                                 TYPE    VALUE
------------------------------------ ------- ----------------
transactions                         integer 126
transactions_per_rollback_segment    integer 4
</pre>
プライベート・ロールバック・セグメントは、以下のような指定で起動されて
いる。
[sql]
SVRMGR> show parameter rollback_segments

NAME                                TYPE    VALUE
----------------------------------- ------- ------------------------------
rollback_segments                   文字列  rb_test1,rb_test2,rb_find50
[/sql]
(rb_test1,rb_test2,rb_find50 ⇒ 3つのロールバック・セグメントを指定)

ロールバック・セグメントは、100個までonlineにできるように指定しておく。
[sql]
SVRMGR> show parameter max_rollback_segments

NAME                                TYPE    VALUE
----------------------------------- ------- ------------------------------
max_rollback_segments               整数値  100
[/sql]
1_3.

この状態でデータベースを再起動し、以下のSELECT文でロールバック・セグメ
ントの状態を確認する。
[sql]
SELECT SEGMENT_NAME,OWNER,STATUS FROM DBA_ROLLBACK_SEGS ;

SEGMENT_NAME   OWNER   STATUS
-----------------------------
SYSTEM         SYS     ONLINE
RB_TEST1       SYS     ONLINE
RB_TEST2       SYS     ONLINE
RB_FIND50      SYS     ONLINE
RB_PUB1        PUBLIC  ONLINE |
RB_PUB2        PUBLIC  ONLINE |
RB_PUB3        PUBLIC  ONLINE |
RB_PUB4        PUBLIC  ONLINE |
   ・            ・      ・   |
   ・            ・      ・   |← RB_PUB1からRB_PUB29までONLINE
   ・            ・      ・   |
   ・            ・      ・   |
RB_PUB27       PUBLIC  ONLINE |
RB_PUB28       PUBLIC  ONLINE |
RB_PUB29       PUBLIC  ONLINE |

                                ← ここからOFFLINE

RB_PUB30       PUBLIC  OFFLINE |
RB_PUB31       PUBLIC  OFFLINE |
RB_PUB32       PUBLIC  OFFLINE |
   ・            ・      ・    |
   ・            ・      ・    |← RB_PUB30からRB_PUB50までOFFLINE
   ・            ・      ・    |
RB_PUB48       PUBLIC  OFFLINE |
RB_PUB49       PUBLIC  OFFLINE |
RB_PUB50       PUBLIC  OFFLINE |

                                       ONLINE      OFFLINE
プライベート・ロールバック・セグメント      3            0
パブリック・ロールバック・セグメント       29           21
----------------------------------------------------------
                                    計     32           21
[/sql]
CEIL(TRANSACTIONS/TRANSACTIONS_PER_ROLLBACK_SEGMENT)
   = CEIL(126/4)=CEIL(31.5)=32である。

これは、上記のONLINEのロールバック・セグメントの合計数と一致する。

つまり、
CEIL(TRANSACTIONS/TRANSACTIONS_PER_ROLLBACK_SEGMENT)
         - 初期化パラメータROLLBACK_SEGMENTSで指定した個数
=32-3=29

ということで、29個のパブリック・ロールバック・セグメントが起動されたの
である。

最後に、パブリック・ロールバック・セグメントをdropしておこう。
(offlineにしておかないとdropできないので注意!!)
[java]
-----------------------POPSQLのスクリプト-------------------------
CONNECT SYSTEM/MANAGER
LOOP (I=1; I<=50; I++)
     SQL alter rollback segment rb_pub\I\ offline ;
     SQL drop  rollback segment rb_pub\I\ ;
ENDLOOP
------------------------------------------------------------------

次回は、2.について検証する。

以上 さわやかな潮風を感じながら 茅ヶ崎にて

About OraOraOracle

「おら! オラ! Oracle どっぷり検証生活」は、「もっとOracleを知ってほしい」という願いから、弊社のエンジニアたちが、Oracleを徹底検証し、マニュアルでは得られないマニアックかつとっても重要なOracleの技術情報を、検証結果を交えながらメールマガジンで発行してきたものです。2000年4月に配信が始まったメルマガは、2011年4月から「おら! オラ! Oracle どっぷりBLOG生活」(仮)としてリニューアル。

関連記事

Comments are closed.

This entry was posted in おら!オラ! Oracle and tagged . Bookmark the permalink.