REDOログに関する検証 その15
< REDOログに関する検証 その15 > ペンネーム つけまい
— 内部構造を理解し
パフォーマンスの向上に役立てる —
前回は、REDOに関する2つのラッチ「REDOアロケーション・ラッチ」と
「REDOコピー・ラッチ」の役割についての解説を行った。
今回は、ラッチ・タイムアウトの検出および、REDOアロケーション・ラッチ、
REDOコピー・ラッチの競合の低減方法などについての解説を行う。
********** ラッチ・タイムアウトの検出 ***********
Oracleは、全てのラッチに対する統計を収集し、それらをV$LATCHに格納してい
る。以下は、REDOに関するラッチ・タイムアウトを検出するためのSQL文である
が、この結果でGETSとMISSESの合計に対するMISSESの比率(MIS_RATE)が1%を
超える様な場合、ラッチの競合がパフォーマンスに影響を及ぼしている可能性
がある。
<SQL文>
Select name,gets,misses,to_char((misses/(gets+misses)) * 100,'990.99') MIS_RATE From v$latch Where name = 'redo allocation' or name = 'redo copy' ;
<結果>
NAME GETS MISSES MIS_RATE ---------------------------------- --------- --------- -------- redo allocation 221671 71 0.03 redo copy 2662 3 0.11
******* REDOアロケーション・ラッチの競合の低減 ********
REDOアロケーション・ラッチの競合を低減させるには、単一のプロセスがラッ
チを保持する時間を最小限に抑えるようにすべきである。
REDOアロケーション・ラッチでのコピーを減少させることによって、この時間
を低減させることが可能となる。つまり、LOG_SMALL_ENTRY_MAX_SIZEの値を小
さくすることによって、REDOアロケーション・ラッチでコピーされるREDOエン
トリの数を減少させ、REDOアロケーション・ラッチの競合を低減させるのであ
る。
また、余談ではあるが、REDOアロケーション・ラッチはトランザクションが無
くても、3秒毎にシグナルによって起こされ、ラッチを取得していることを頭に
入れておいていただきたい。
********* REDOコピー・ラッチの競合の低減 **********
複数CPU環境の場合、REDOコピー・ラッチの数を増やすことによって、ラッチの
競合を低減させることができる。
REDOコピー・ラッチの数を増やすことによって、REDOエントリのコピーにかか
る負荷を、各REDOコピー・ラッチに分散できるからである。
LOG_SIMULTANEOUS_COPIESの値を上げることにより、REDOコピー・ラッチの数を
増やすことができる。この値は、CPUの2倍まで指定することができる。
もし、REDOコピー・ラッチの数を増やしても競合が低減しないようであれば、
LOG_SMALL_ENTRY_MAX_SIZEの値を増やすことによって、REDOコピー・ラッチに
対する競合を低減できる場合がある。つまり、REDOコピー・ラッチにかかる負
荷をREDOアロケーション・ラッチにも負担させ、REDOコピー・ラッチに対する
負荷を低減させるのである。
しかし、LOG_SMALL_ENTRY_MAX_SIZEの値をあまり大きくしすぎてしまうと、
ショート・ラッチで済んでいたREDOアロケーション・ラッチの時間が長くなり、
タイムアウトを誘発してしまう恐れがあるので、最大でもデフォルトの10倍
(800=Oracle7.2以前のデフォルト)以内にとどめるべきである。
なお、Oracle8.1より、LOG_SMALL_ENTRY_MAX_SIZE及びLOG_SIMULTANEOUS_COPIES
共に、obsolete parameter(一般にはもう使われていないパラメータ)扱いと
なった。
ちなみに、LOG_SIMULTANEOUS_COPIESは、_(アンダースコア)で始まる隠しパ
ラメータとなっている。
次回は、チェックポイントについての解説を行う予定である。
以上 真夏の賑やかさが恋しい茅ヶ崎海岸にて