मेरे हाल ही में अपग्रेड किए गए उत्पादन डेटाबेस में, मुझे कई SQL कथन दिखाई दे रहे हैं जो अब "asynch डिस्क्रिप्टर आकार बदलें" ईवेंट पर उच्च प्रतीक्षा का अनुभव कर रहे हैं। मैंने हाल ही में 11.1.0.7 से 11.2.0.2 में अपग्रेड किया है और एसक्यूएल स्टेटमेंट्स जो इस घटना पर कभी इंतजार नहीं करते थे, अब पकड़े जा रहे हैं।
Oracle 11.2 ने डेटाबेस और OS कर्नेल के अतुल्यकालिक I/O कॉल करने के तरीके को थोड़ा बदल दिया। क्या हो रहा है कि एसिंक I/O कॉल को संभालने में सक्षम होने के लिए कई एसिंक्रोनस I/O डिस्क्रिप्टर हैं। जब एसिंच I/O कॉल की संख्या बढ़ती है, तो डिस्क्रिप्टर की संख्या भी बढ़ जाती है। जब एसिंच I/O कॉल की संख्या कम हो जाती है, तो इसी तरह से डिस्क्रिप्टर की संख्या कम हो जाती है।
इससे पहले कि Oracle डिस्क्रिप्टर की संख्या बढ़ा सके, उसे उन सभी प्रक्रियाओं की प्रतीक्षा करनी चाहिए जो वर्तमान में अपने I/O कॉल को पूरा करने के लिए async I/O कर रही हैं। यह भयानक क्रिया वास्तव में I/O के "asynch" भाग को मार देती है! एक बार सभी प्रक्रियाओं ने अपने ansych I/O कॉल को पूरा कर लिया है, तो Oracle कार्यभार के आधार पर डिस्क्रिप्टर को ऊपर या नीचे संशोधित कर सकता है।
यदि आपकी प्रक्रिया अभी अपना एसिंक I/O पूरा कर चुकी है, इससे पहले कि वह एक और async I/O कॉल कर सके, उसे Oracle द्वारा डिस्क्रिप्टर की संख्या को संशोधित करने की प्रतीक्षा करनी चाहिए। जैसे, आप "एसिंच डिस्क्रिप्टर आकार बदलें" प्रतीक्षा घटना की प्रतीक्षा कर रहे हैं।
यह बग 9829397 प्रतीत होता है और आप इसके लिए मेटालिंक से एक पैच डाउनलोड कर सकते हैं। यह समस्या 11.2.0.3 में ठीक की गई है इसलिए यह केवल 11.2.0.1 और 11.2.0.2 में दिखाई देती है। Async I/O को अक्षम करने के लिए एक समाधान है, लेकिन मेरे लिए यह समाधान अत्यधिक अवांछनीय है। कोई भी इस प्रतीक्षा घटना की घटनाओं को उनके प्रत्यक्ष I/O को कम करके और उनके SQL कथनों को ट्यून करके कम कर सकता है।