I min nyligen uppgraderade produktionsdatabas ser jag ett antal SQL-satser som nu upplever höga väntan på händelsen "asynch descriptor resize". Jag uppgraderade nyligen från 11.1.0.7 till 11.2.0.2 och SQL-satser som aldrig väntade på den här händelsen fastnar nu.
Oracle 11.2 ändrade något hur databasen och OS-kärnan utförde asynkrona I/O-anrop. Vad som händer är att det finns ett antal asynkrona I/O-deskriptorer för att kunna hantera de asynkrona I/O-anropen. När antalet asynkrona I/O-anrop ökar, ökar också antalet deskriptorer. När antalet asynkrona I/O-anrop minskar, minskas antalet deskriptorer på liknande sätt.
Innan Oracle kan öka antalet deskriptorer måste det vänta på att alla processer som för närvarande utför asynkron I/O slutför sina I/O-anrop. Denna fruktansvärda åtgärd dödar verkligen den "asynkrona" delen av I/O! När alla processer har slutfört sina I/O-anrop kan Oracle sedan ändra beskrivningarna uppåt eller nedåt beroende på arbetsbelastning.
Om din process precis har slutfört sin asynkrona I/O, innan den kan göra ett nytt asynkront I/O-samtal, måste den vänta på att Oracle ändrar antalet deskriptorer. Som sådan väntar du på väntehändelsen "asynch descriptor resize".
Det här verkar vara Bug 9829397 och du kan ladda ner en patch för det från Metalink. Det här problemet är åtgärdat i 11.2.0.3 så det visas bara i 11.2.0.1 och 11.2.0.2. En lösning är att inaktivera Asynch I/O, men för mig är den lösningen högst oönskad. Man kan också minska förekomsten av denna väntehändelse genom att minska deras direkta I/O och ställa in deras SQL-satser.