最近アップグレードした本番データベースでは、「非同期記述子のサイズ変更」イベントで高い待機時間が発生しているSQLステートメントが多数見られます。最近、11.1.0.7から11.2.0.2にアップグレードしましたが、このイベントを待機していなかったSQLステートメントがキャッチされています。
Oracle 11.2は、データベースとOSカーネルが非同期I/O呼び出しを実行する方法をわずかに変更しました。何が起こっているのかというと、非同期I/O呼び出しを処理できる非同期I/O記述子がいくつかあるということです。非同期I/O呼び出しの数が増えると、記述子の数も増えます。非同期I/O呼び出しの数が減少すると、記述子の数も同様に減少します。
Oracleが記述子の数を増やす前に、現在非同期I/Oを実行しているすべてのプロセスがI/O呼び出しを完了するのを待つ必要があります。このひどい行動は本当にI/Oの「非同期」部分を殺します!すべてのプロセスがansychI/ O呼び出しを完了すると、Oracleはワークロードに応じて記述子を上下に変更できます。
プロセスが非同期I/Oの完了を完了したばかりの場合、別の非同期I / O呼び出しを行う前に、Oracleが記述子の数を変更するのを待つ必要があります。そのため、「非同期記述子のサイズ変更」待機イベントを待機しています。
これはバグ9829397のようで、Metalinkからパッチをダウンロードできます。この問題は11.2.0.3で修正されているため、11.2.0.1と11.2.0.2でのみ発生します。回避策の1つは、非同期I / Oを無効にすることですが、私にとって、この回避策は非常に望ましくありません。また、直接I / Oを減らし、SQLステートメントを調整することで、この待機イベントの発生を減らすことができます。