catch-img

log buffer space - 日本エクセム株式会社 Oracle待機イベント情報


目次[非表示]

  1. 1.基本情報
  2. 2.待機パラメータと待機時間
    1. 2.1.待機パラメータ
    2. 2.2.待機時間
  3. 3.チェックポイントとソリューション
    1. 3.1.REDOログ・バッファを充分な大きさにする
    2. 3.2.REDOエントリの生成量を最小限にする
    3. 3.3.LGWRの性能を改善させましょう

基本情報

 REDOログ・バッファにREDOレコードを記録するプロセスは、REDOログ・バッファ内に必要なスペースを確保するためにREDOアロケーション・ラッチの獲得が必要とされます。

 REDOアロケーション・ラッチを獲得した後、REDOログ・バッファに空き領域がない場合、スペースが確保できるまで待機します。この時、状況により2種類のイベント待機が発生します。

・現在使用中のREDOログ・ファイルがFULLになり空き領域がない状態であれば
 LGWRはログ・スイッチを実行しサーバプロセスはlog file switch completionイベントで待機します。

・それ以外の場合、log buffer spaceイベントで待機することになります。

 前者の場合、ログ・スイッチが実行された直後、log buffer spaceの待機が急増する可能性があります。これはREDOログ・バッファに記録しようとする多数のセッションがログ・スイッチが終了するまで待機し、その後同時に記録しようとするためです。


待機パラメータと待機時間

待機パラメータ

 log buffer spaceの待機イベントは待機パラメータを使用しません。


待機時間

 一般的には1秒ですが、log file switchが発生した場合は5秒間待機します。


チェックポイントとソリューション

REDOログ・バッファを充分な大きさにする

 log buffer spaceの待機はトランザクションによって生成されるREDOの量に比べ、REDOログ・バッファのサイズが小さい時に発生します。従って、log buffer spaceの待機が広い範囲で発生した場合、REDOログ・バッファのサイズを調査し必要に応じてサイズを調整します。

 log buffer space 待機と log file switch completion待機が同時に発生した場合はREDOログ・バッファのサイズと同時に、REDOログ・ファイルのサイズも確認する必要があります。

 大概の場合、この2つの待機が同時に発生します。

 REDOログ・ファイルのサイズがあまりにも小さい場合、log file switch completionの待機が増加し、ログ・スイッチが終了した直後、再びlog buffer spaceの待機が発生します。log buffer spaceの待機を減らすためにREDOログ・バッファのサイズを大きくした場合、log file syncの待機が増加することがありますが、この現象を解決するためには、REDOログ・バッファのサイズとlog file syncのイベントを参考にしてください。

 REDOログ・バッファの大きさによってlog buffer spaceの待機がどのように現れるかについて確認してみましょう。テストのシナリオは次のようになります。


<13万行程のデータを持ったtestテーブルに対し、UPDATEを実行します>
 ・ケース1:REDOログ・バッファの大きさを256KBに指定します
 ・ケース2:REDOログ・バッファの大きさを5MBに指定します

2つのケースにおいてlog buffer spaceの待機がどのように発生するかを確認します。

ケース1:REDOログ・バッファのサイズが256KBと、非常に小さく設定されている場合

SQL> show sga
Total System Global Area  314572800 bytes
Fixed Size                             788692 bytes
Variable Size                    263190316 bytes
Database Buffers                50331648 bytes
Redo Buffers                         262144 bytes

SQL> update test set id = id, name = name;
131079 rows updated.

SQL> select event, total_waits, time_waited
from v$session_event
where sid = (select sid from v$mystat where rownum = 1)
order by 3 desc;

EVENT                                      TOTAL_WAITS   TIME_WAITED
------------------------------------  -----------------   ----------------
SQL*Net message from client                          19              24819
log buffer space                              1582             6234
db file scattered read                              616               4297
log file switch completion                      89             1210
db file sequential read                            1073               1202
log file switch (checkpoint in                        4                137
complete)

-- log buffer space 待機にかなり時間がかかっていることが確認できます。
-- log file switch completion 待機も影響しています。これはREDOログ・ファイルのサイズが適切でないことを意味します。


ケース2:REDOログ・バッファのサイズが5MBと、大きく設定されている場合

SQL> alter system set log_buffer=5242880 scope=spfile;
SQL> --再起動
SQL> show sga
Total System Global Area  314572800 bytes
Fixed Size                             788692 bytes
Variable Size                    258209580 bytes
Database Buffers                50331648 bytes
Redo Buffers                        5242880 bytes

SQL> update test set id = id, name = name;
131079 rows updated.

SQL> select event, total_waits, time_waited
from v$session_event
where sid = (select sid from v$mystat where rownum = 1)
order by 3 desc;

EVENT                                           TOTAL_WAITS   TIME_WAITED
----------------------------------         -----------------  -----------------
db file scattered read                                    81               4783
SQL*Net message from client                               18               3718
log buffer space                                     66             3455
log file switch completion                               115               2651
db file sequential read                                 1208               2103
free buffer waits                                       1160                944
log file sync                                              2                 10
latch: cache buffers lru chain                             2                  1
latch: cache buffers chains                                2                  1
latch: redo allocation                                     1                  1
latch: shared pool                                         1                  1

-- log buffer space イベントの待機回数および待機時間が減少されたことが確認できます。


 テストの結果から、REDOログ・バッファのサイズがlog buffer spaceのイベント待機に大きな影響を与えることがわかりました。


REDOエントリの生成量を最小限にする

 log buffer space待機を減らすもう一つの方法として、REDOエントリの生成量を最小限にする方法があります。ダイレクト・ロード機能を適切に活用しつつ、nologging optionを与える、等の方法もこれに当たります。
 詳しい内容はlog file sync#REDOデータ量とlog file sync待機イベントをご参照ください。


LGWRの性能を改善させましょう

 log buffer space待機とfree buffer waits待機は特長が似ています。サーバープロセスのFree bufferが要求するスピードに対して、DBWRプロセスが遅れてしまうことが原因でfree buffer waits待機が発生するように、サーバープロセスのfree redo buffer領域が要求するスピードにLGWRプロセスがついていけないことから、log buffer spaceが発生します。

CONTACT

他社に頼らず自社でデータベースを監視・運用をしませんか?
MaxGaugeがサポートします

お役立ち資料は
こちらから

不明点がある方は、
こちらからお問い合わせください

お電話でのお問い合わせはこちら

平日 10時~18時

人気記事ランキング

タグ一覧