REDOログに関する検証 その17

投稿日: 2001年10月31日

< REDOログに関する検証 その17 > ペンネーム つけまい

— 内部構造を理解し
パフォーマンスの向上に役立てる —

前回は、チェックポイントについての解説を行った。

今回は、チェックポイントの発生を操作する方法などについての解説を行う。

********** チェックポイントを操作する ***********

チェックポイントには、「パフォーマンスに関わる重要な要素が含まれている」
ということはご理解いただけたと思うが、だからといって、チェックポイント
を発生させない訳にはいかない。

では、どの位の割合で発生させればよいのだろうか。

弊社が、長年に渡るコンサルティング活動で培ってきた経験からすると、リカ
バリに要する時間を短縮したい場合でも、1時間に2回以上起こすべきではない。

以下は、チェックポイントを発生させるタイミングを操作する際に、必要とな
る情報を収集するためのSQL文である。

<REDOに対する書き込み量を調査するためのSQL文>

select * from v$sysstat where name = 'redo blocks written' ;

<結果>

STATISTIC# NAME                                   CLASS     VALUE
---------- ---------------------------------- --------- ---------
104 redo blocks written                        2        97

もし仮に、1時間に1回の割合でチェックポイントを発生させたい場合、上記の
SQL文を1時間の間隔で2回取得しその差分を求めれば、1時間に必要とされるREDO
ログのサイズを見積ることができる。

ここで求めた値を、チェックポイントの発生するタイミングを操作する初期設
定パラメータ「LOG_CHECKPOINT_INTERVAL」に設定(ブロック単位)することに
より、おおよそ1時間に1回の割合でチェックポイントが発生することになる。

********** パフォーマンスを優先させる ***********

アクティブ・ログ・ファイルが満杯になると、次のREDOエントリのために新た
なログ・ファイルを用意する必要がある。この作業のことをログ・スイッチと
呼ぶ。

ログ・スイッチが起きると、必然的にチェックポイントが発生し、それと同時
にREDOの生成がストップしてしまう。

したがって、チェックポイント同様、多発させることは好ましくない。

そこで、リカバリを無視した場合のチューニング・テクニックを紹介しよう。

<初期設定パラメータ>

・LOG_CHECKPOINT_INTERVAL = 999999999999999(High Value)

・LOG_CHECKPOINT_TIMEOUT = 0(not timeout)

上記の様に、LOG_CHECKPOINT_INTERVALの値を、REDOログ・ファイルのサイズよ
りも大きく設定する。この時、チェックポイントの間隔を秒単位で設定するパ
ラメータLOG_CHECKPOINT_TIMEOUTの値は0(デフォルト)に設定する。

このことにより、ログ・スイッチ以外でのチェックポイントは発生しなくなる。

しかし、この場合、REDOログ・ファイルのサイズが大きければ大きいほど、リ
カバリに要する時間が増大してしまうことになるのだが、「リカバリなど滅多に
起きない」と割り切ってしまいパフォーマンスを優先させることは、多くのシス
テムにおいては正しい判断と言えよう。

したがって、この様な運用を行う場合、REDOログ・ファイルの大きさがカギを
握ることになる。

つまり、REDOログ・ファイルのサイズをできるだけ大きくすることが、ログ・
スイッチの発生を減少させることにつながるのである。

次回からは、Oracle8iの新機能である「ログ・マイナー」についての解説を行
う予定である。

以上 寒さが増した茅ヶ崎にて