यह मेरे लिए एक पुरानी समस्या है जिसे मैंने कुछ समय पहले हल किया था, लेकिन मुझे लगा कि मैं इसे अंत में लिखूंगा। जब मैंने अपनी नई कंपनी में शुरुआत की, तो उत्पादन डेटाबेस महीने में एक बार ओआरए -4031 मेमोरी त्रुटियों के साथ दुर्घटनाग्रस्त हो जाएगा। वर्तमान डीबीए ने सोचा कि समस्या एप्लिकेशन कोड में बाइंड वेरिएबल्स की कमी थी, जो आमतौर पर सबसे अधिक संभावित अपराधी है। बाइंड वेरिएबल्स की कमी एक समस्या थी, लेकिन जैसा कि मुझे जल्द ही पता चला, समस्या SQL स्टेटमेंट से बिल्कुल भी संबंधित नहीं थी। बल्कि, समस्या Direct NFS के साथ एक बग के कारण थी। जाहिर है, डायरेक्ट एनएफएस में मेमोरी लीक थी। स्मृति रिसाव ने साझा पूल को प्रभावित किया और पर्याप्त समय दिया, साझा पूल में मुक्त स्मृति अस्तित्वहीन हो गई, ओआरए -4031 त्रुटियों को फेंक दिया जाएगा, और डेटाबेस क्रैश हो जाएगा।
मैंने यह पुष्टि करने के लिए Oracle समर्थन के साथ काम किया कि यह एक बग था। यह समस्या बग 10237987 के रूप में दर्ज की गई थी और संस्करण 11.1.0 और 11.2.0 को प्रभावित करती है। मैं ओरेकल एंटरप्राइज लिनक्स चलाने वाले 3 नोड आरएसी क्लस्टर पर इस बग में भाग गया। अगर यह बग अन्य ओएस प्लेटफॉर्म पर या गैर-आरएसी वातावरण के लिए हुआ तो मुझे कभी जवाब नहीं मिला। बग के कारण साझा पूल में KGNFS पूल समय के साथ महत्वपूर्ण रूप से विकसित होता है।
मुझे खेद है कि मैं इस बग को Oracle समर्थन के साथ एक निष्कर्ष तक नहीं देख पाया। समर्थन चाहता था कि जब डेटाबेस KGNFS पूल के साथ ORA-4031 त्रुटियों के कारण क्रैश हो जाए तो मैं एक ट्रेस कैप्चर करूँ। वे यह महसूस करने में विफल रहे कि KGNFS पूल ने साझा पूल के अन्य सभी पूलों में जगह की कमी का कारण बना। केजीएनएफएस पूल अन्य पूलों को निचोड़ लेते थे और अक्सर ऐसा होता था जब अन्य पूलों में जगह का अनुरोध किया जाता था कि ओआरए -4031 त्रुटि तक पहुंच गई थी। और ट्रेस फ़ाइलें उत्पन्न होने का एकमात्र समय इंस्टेंस के क्रैश होने की प्रतीक्षा करना था। मैं ओरेकल सपोर्ट के लिए ट्रेस फाइल को कैप्चर करने के लिए दिन के मध्य में हमारे इंस्टेंस के क्रैश होने का इंतजार नहीं कर सकता था, खासकर जब से ट्रेस फाइल केजीएनएफएस पूल से भी नहीं हो सकती है!
अंत में, हमारा समाधान हमारे कॉन्फ़िगरेशन में डायरेक्ट एनएफएस का उपयोग करना बंद करना था। हमारे परीक्षण ने प्रत्यक्ष NFS के साथ या उसके बिना कोई प्रदर्शन अंतर नहीं दिखाया। चूंकि हमने Direct NFS का उपयोग करना छोड़ दिया है, इसलिए हमने ORA-4031 में से कोई भी त्रुटि नहीं देखी है। मैं देखता हूं कि मेटालिंक पर बग अभी भी बाहर है लेकिन अभी तक कोई फिक्स नहीं है।