In meiner kürzlich aktualisierten Produktionsdatenbank sehe ich eine Reihe von SQL-Anweisungen, bei denen es jetzt zu hohen Wartezeiten auf das Ereignis „asynch descriptor resize“ kommt. Ich habe kürzlich ein Upgrade von 11.1.0.7 auf 11.2.0.2 durchgeführt und SQL-Anweisungen, die nie auf dieses Ereignis gewartet haben, werden jetzt abgefangen.
Oracle 11.2 hat die Art und Weise, wie die Datenbank und der Betriebssystemkernel asynchrone E/A-Aufrufe durchgeführt haben, geringfügig geändert. Was passiert, ist, dass es eine Reihe von asynchronen E/A-Deskriptoren gibt, um die asynchronen E/A-Aufrufe handhaben zu können. Wenn die Anzahl der asynchronen E/A-Aufrufe zunimmt, steigt auch die Anzahl der Deskriptoren. Wenn die Anzahl der asynchronen E/A-Aufrufe abnimmt, wird die Anzahl der Deskriptoren auf ähnliche Weise verringert.
Bevor Oracle die Anzahl der Deskriptoren erhöhen kann, muss es warten, bis alle Prozesse, die derzeit asynchrone E/A ausführen, ihre E/A-Aufrufe abgeschlossen haben. Diese schreckliche Aktion tötet wirklich den „asynchronen“ Teil der E/A! Sobald alle Prozesse ihre Ansych-E/A-Aufrufe abgeschlossen haben, kann Oracle die Deskriptoren je nach Arbeitslast nach oben oder unten ändern.
Wenn Ihr Prozess gerade seine Asynch-I/O abgeschlossen hat, muss er warten, bis Oracle die Anzahl der Deskriptoren geändert hat, bevor er einen weiteren Asynch-I/O-Aufruf durchführen kann. Daher warten Sie auf das Warteereignis „asynch descriptor resize“.
Dies scheint Bug 9829397 zu sein und Sie können einen Patch dafür von Metalink herunterladen. Dieses Problem wurde in 11.2.0.3 behoben, sodass es nur in 11.2.0.1 und 11.2.0.2 auftritt. Eine Problemumgehung besteht darin, Asynch I/O zu deaktivieren, aber für mich ist diese Problemumgehung höchst unerwünscht. Man kann auch das Auftreten dieses Wait-Ereignisses reduzieren, indem man ihre direkte E/A reduziert und ihre SQL-Anweisungen optimiert.