
db file parallel write - 日本エクセム株式会社 Oracle待機イベント情報
目次[非表示]
- 1.基本情報
- 2.待機パラメータと待機時間
- 3.チェックポイントとソリューション
- 3.1.I/O システムのパフォーマンスが遅い場合
- 3.2.操作が多すぎる場合
- 3.3.バッファキャッシュを効率的に使用させる
基本情報
名前から想像されるものとは異なり、db file parallel write待機イベントは並列処理(parallel DML)とは関係はありません。バッファキャッシュを経由するすべてのデータは、DBWRでディスクに記録されます。DBWRがバッファキャッシュの不良ブロックを整理するためにI/O要求を行います。その要求の待機中に発生するものが、db file parallel writeイベントとなります。DBWRは、1回のI/O要求で1つの不良ブロックを整理するわけではなく、1回のI/O要求で複数の不良ブロックを整理します。これをwrite batchといいます。DBWRがwrite batchを実行し、I/O要求が完了するまで待機するときに、このイベントが発生します。非同期I/Oを実行する場合には、DBWRはI/O要求が完了するまで待機をしません。write batch経由でディスクに記録する必要のある不良ブロックの一部がディスクに書き込まれ、バッファ(free buffer)が変更され、LRUリストに登録されるまでの間待機します。この作業には多くの書き込み要求が発生します。
db file parallel writeキューは、通常I/Oの問題とみられる。もしDBWRプロセスでこの待機が幅広く発生する場合は、データファイルに関連付けられるI/Oシステムに深刻なパフォーマンス低下が発生していると想定されます。また、I/Oシステムのパフォーマンスに問題がないのにdb file parallel writeが発生する場合は、I/Oシステムが対応できないほど多くの書き込み要求が発生していると判断できます。
待機パラメータと待機時間
待機パラメータ
db file parallel write待機イベントの待機中のパラメーターは次の通りです。
待機時間
I/O 関連のイベントであるため、タイムアウトが発生せず、セッションは、I/O が完了するまで待機する。
チェックポイントとソリューション
I/O システムのパフォーマンスが遅い場合
もし DBWR プロセスでdb file parallel write待機時間が長くなるようなケースでは、I/Oシステムに問題があると判断できます。DBWR でdb file parallel write待機時間が長くなると、サーバープロセスは、連鎖的にfree buffer waitsイベントやwrite complete waitsイベントの待機を苦しむことになります。この問題は、I/O システムのパフォーマンスを改善することによって解決できます。I/O のパフォーマンスを向上させるには、次の方法が知られています。
デバイス(Raw device)と非同期入出力 (Asychronous IO)を組み合わせて使用することが、現在知られている最良の方法です。その他では、OS レベルでDirect I/Oを使用する。CPU の数が十分である場合、DB_WRITER_PROCESSESパラメーター値を修正し、DBWR の数を増やす。などがあります。複数のDBWRにより、競合を減らすことができます。V$FILESTATビューを使用すると、どのようなファイルで、主にパフォーマンスの問題が発生しているかを間接的に推測することができます。
操作が多すぎる場合
頻繁にチェックポイントが発生する場合は、DBWR の使用率が極端に増えて、DBWR のパフォーマンスが低下しているということができます。DBWR のパフォーマンスの低下は、システムの全体的なパフォーマンスの低下に直結します。FAST_START_MTTR_TARGETパラメータ値を過度に小さくした場合、頻繁に増分チェックポイント(Incremental Checkpoint)が発生することになります。ログファイルのサイズが極端に少ない場合、ログファイルが頻繁に発生し、チェックポイントが増えます。Parallel Queryによりdirect path readが発生した場合や、truncate、drop、hot backup 時にもチェックポイントが多く発生されます。これらの場合、I/O システムのパフォーマンスの問題がなくてもdb file parallel writeが広範囲で発生するため、DBWR に不要な負荷を与える要因がないか確認する必要があります。
バッファキャッシュを効率的に使用させる
DBWR のパフォーマンスを向上させるために間接的ではありますが方法があります。それは複数のバッファープール(Default、Keep、Recycle)を適切に使用することです。この方法は、I/O システムのパフォーマンスを改善するよりも、不要な書き込み操作を減らすことが出来るため、DBWR の負担を減らしてくれます。