db file parallel write

class=”heading04 heading04–small”>

目次

概要

名前から想像されるものとは異なり、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待機イベントの待機中のパラメーターは次の通りです。

  • P1 : write batchで同時に書き込まれるファイルの数
  • P2 : write batchで同時に書いているの合計ブロック数
  • P3 : オラクル 9. 2 以降では、I/O の完了を待機する時間を1/100秒単位で示す。以前のバージョンでは、I/O 要求の合計数を示す。

待機時間

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 の負担を減らしてくれます。

豆知識

分析事例