कृपया नीचे दिए गए इस उत्तर को अवश्य पढ़ें , जो यहां बताई गई समस्याओं को कम करने के तरीकों का विवरण देता है।
समान कमियां पीडीओ का उपयोग करते हुए किसी भी अन्य PHP डेटाबेस इंटरफ़ेस के साथ मौजूद हैं जो लगातार कनेक्शन करता है: यदि आपकी स्क्रिप्ट डेटाबेस ऑपरेशन के बीच में अप्रत्याशित रूप से समाप्त हो जाती है, तो अगला अनुरोध जो बाईं ओर कनेक्शन प्राप्त करता है वह उठाएगा जहां मृत स्क्रिप्ट छोड़ दिया है। कनेक्शन को प्रबंधक स्तर पर खुला रखा जाता है (mod_php के लिए अपाचे, वर्तमान FastCGI प्रक्रिया यदि आप FastCGI, आदि का उपयोग कर रहे हैं), PHP स्तर पर नहीं, और PHP कनेक्शन को मरने देने के लिए मूल प्रक्रिया को नहीं बताता है। स्क्रिप्ट असामान्य रूप से समाप्त हो जाती है।
यदि मृत स्क्रिप्ट लॉक टेबल, उन तालिकाओं को तब तक लॉक किया जाता है जब तक कि कनेक्शन मर नहीं जाता है या अगली स्क्रिप्ट जो कनेक्शन प्राप्त करती है, टेबल को अनलॉक कर देती है।
यदि मृत स्क्रिप्ट लेन-देन के बीच में थी, तो जब तक कि डेडलॉक टाइमर किक नहीं करता तब तक तालिकाओं की एक भीड़ को ब्लॉक कर सकता है और तब भी, डेडलॉक टाइमर पुराने अनुरोध के बजाय नए अनुरोध को मार सकता है जो समस्या पैदा कर रहा है।
यदि मृत स्क्रिप्ट लेन-देन के बीच में थी, तो उस कनेक्शन को प्राप्त करने वाली अगली स्क्रिप्ट को भी लेनदेन स्थिति मिलती है। यह बहुत संभव है (आपके एप्लिकेशन डिज़ाइन पर निर्भर करता है) कि अगली स्क्रिप्ट वास्तव में कभी भी मौजूदा लेनदेन करने की कोशिश नहीं कर सकती है, या जब ऐसा नहीं होना चाहिए, या जब यह नहीं होना चाहिए तो वापस रोल करेंगी।
यह सिर्फ हिमशैल का शीर्ष है। यह हमेशा हर एक स्क्रिप्ट अनुरोध पर एक गंदे कनेक्शन के बाद साफ करने की कोशिश करके एक हद तक कम किया जा सकता है, लेकिन यह डेटाबेस के आधार पर दर्द हो सकता है। जब तक आपने डेटाबेस कनेक्शन बनाने की पहचान नहीं की है, तब तक आपकी स्क्रिप्ट में एक अड़चन है (इसका मतलब है कि आपने xdebug और / या xhprof का उपयोग करके कोड प्रोफाइलिंग किया है ), आपको किसी भी चीज़ के समाधान के रूप में लगातार कनेक्शन पर विचार नहीं करना चाहिए ।
इसके अलावा, अधिकांश आधुनिक डेटाबेस (PostgreSQL सहित) के पास कनेक्शन पूलिंग करने के अपने पसंदीदा तरीके हैं जो तत्काल कमियां नहीं हैं जो सादे वेनिला PHP- आधारित लगातार कनेक्शन करते हैं।
एक बिंदु को स्पष्ट करने के लिए, हम अपने कार्यस्थल पर लगातार कनेक्शन का उपयोग करते हैं, लेकिन पसंद से नहीं। हम अजीब कनेक्शन व्यवहार का सामना कर रहे थे , जहां हमारे ऐप सर्वर से हमारे डेटाबेस सर्वर का प्रारंभिक कनेक्शन बिल्कुल तीन सेकंड ले रहा था , जब इसे एक दूसरे के एक अंश का हिस्सा लेना चाहिए था। हमें लगता है कि यह एक कर्नेल बग है। हमने इसे समस्या निवारण की कोशिश करना छोड़ दिया क्योंकि यह अनियमित रूप से हुआ और मांग पर पुन: पेश नहीं किया जा सका, और हमारे आउटसोर्स आईटी में इसे ट्रैक करने की ठोस क्षमता नहीं थी।
बावजूद, जब गोदाम के लोग कुछ सौ आने वाले हिस्सों को संसाधित कर रहे हैं, और प्रत्येक भाग आधे सेकंड के बजाय तीन और आधे सेकंड का समय ले रहा है, तो हमें कार्रवाई करनी थी इससे पहले कि वे हम सभी का अपहरण कर लें और हमें उनकी मदद करें। इसलिए, हमने अपने घर-विकसित ईआरपी / सीआरएम / सीएमएस की संकीर्णता पर कुछ बिट्स को फ़्लिप किया और लगातार कनेक्शन के भयावहता का अनुभव किया। हमें सभी सूक्ष्म छोटी समस्याओं और विचित्र व्यवहार को ट्रैक करने के लिए सप्ताह लग गए जो यादृच्छिक रूप से प्रतीत होते थे। यह पता चला है कि एक बार एक हफ्ते की घातक त्रुटियां जो हमारे उपयोगकर्ताओं ने हमारे ऐप से परिश्रमपूर्वक निचोड़ ली हैं वे बंद टेबल, परित्यक्त लेनदेन और अन्य दुर्भाग्यपूर्ण विस्की राज्यों को छोड़ रहे थे।
इस सोब-स्टोरी में एक बिंदु है: इसने उन चीजों को तोड़ दिया, जिनके प्रदर्शन के नाम पर हमें कभी भी टूटने की उम्मीद नहीं थी। ट्रेडऑफ़ इसके लायक नहीं था, और हम उस दिन का बेसब्री से इंतजार कर रहे हैं जिस दिन हम अपने उपयोगकर्ताओं से दंगा किए बिना सामान्य कनेक्शन पर वापस जा सकते हैं।