Oracleロールバックセグメント
ロールバックセグメントと表領域の例
Oracleのテキストに出てくる円形の概念図は一つのセグメントだけを
表している。そこで、専用の表領域に複数ロールバックセグメントを
持つSAP R/3を参考にして、上記のような例を描いてみた。
例からわかることは以下のとおり。
- rbs1はエクステント拡張を伴ってbefore imageを格納したが、
後に非アクティブになってOPTIMALサイズまでshrinkした状態。
- rbs3はエクステント拡張を伴う更新のbefore imageを
格納し続けている状態。
- rbs2,rbs20は、これまでエクステント拡張したことが無い
(MINEXTENTSのままなので)。
さらに、管理者として理解しておかなければならない動作は
以下のとおり。
- 1024KB(INITIAL)*5(MINEXTENTS)*20(ロールバックセグメント数)=100MB。
したがって、まったく更新処理が行われていない静かな
状態では、ロールバックセグメントは100*100MB/800MB=12.5%の
使用率となる。エクステント拡張を必要としない
オンライン系の微小更新ばかりの状態も、上記に当てはまる。
- commitが入らない大きな更新が一つだけ発生した場合、
肥大化するセグメントの最大サイズは
1024KB(INITIAL=NEXT)*505(MAXEXTENTS)=505MBなので、この
ロールバック専用表領域のサイズは問題にならない。
エラー別対処法
ORA-1650 : unable to extend rollback segment
<Segment> by <N> in tablespace <TableSpace>
意味 |
あるロールバックセグメントが表領域を使い切ってしまい、
エクステント拡張できなかった。
|
対処 |
更新処理のcommit頻度を上げる。表領域を拡張する。
|
ORA-1628 : max # extents (N) reached for rollback
segment <Segment>
意味 |
あるロールバックセグメントがMAXEXTENTSに達してしまい、
エクステント拡張できなかった。
|
対処 |
更新処理のcommit頻度を上げる。全てのロールバック
セグメントのMAXEXTENTSを大きくする(オンラインで実施可)。
|
ORA-1555 : snapshot too old: rollback segment number
<Number> with name "<Segment>" too small
意味 |
非アクティブになったbefore image Aが、他の更新処理の
before image Bで上書きされてしまい、Aを参照し続けていた
select処理に対して読み取り一貫性が保証できなくなった。
|
対処 |
長すぎるselect処理を短くする(最優先)。
ロールバックセグメントの数を増やす。
MINEXTENTSを大きくする、またはINITIAL,NEXTを大きくする
(ロールバックセグメントの作り直しが必要となる)。
|
診断
v$rollstatのカラムhwmsizeは、Oracleインスタンスが
起動してから現在までで、ロールバックセグメントが
最も大きくなったときのサイズを示す。
SVRMGR> select rssize, hwmsize
2> from v$rollstat;
RSSIZE HWMSIZE
---------- ----------
729088 729088
5316608 14901248
5316608 5316608
5316608 8511488
5300224 5300224
5316608 7446528
5316608 201129600
5316608 55369728
5316608 83058688
60694528 60694528
5316608 10641408
5316608 12771328
5316608 7446528
5316608 25550848
5316608 14901248
5316608 70279168
5316608 12771328
5316608 129916928
5316608 24485888
5316608 5316608
5316608 5316608
21 rows selected.
上の例では、最も大きくなったものでも200MBほどなので、
しばらくはORA-1628(MAXEXTENTS到達)の心配は無い。
ORA-1650(表領域あふれ)については、大きな更新の
同時発生数にも依存するので、上記の情報からだけでは
なんともいえない。
関連するディクショナリとビュー
- dba_rollback_segs
- v$rollname
- v$rollstat
2001/9/24 Taikou Yamada (t-yamada@ceres.dti.ne.jp)