2010-10-29 8 views
9

मैं अपने वेब ऐप में एक तनाव परीक्षण इंजेक्शन दे रहा हूं जो एक MySQL सर्वर से कनेक्ट होता है और मैं mysql की शो प्रोसेसलिस्ट की निगरानी कर रहा हूं।MySQL शो प्रक्रिया सूची कई प्रक्रियाओं नींद और जानकारी = शून्य?

उच्च (उच्च स्वैप आई/ओ) मुझे लगता है कि जैसे कई प्रक्रियाओं मिलता है जब लोड किया जाता है:

| 97535 | db| localhost | userA | Sleep | 515 |   | NULL 
| 97536 | db| localhost | userA | Sleep | 516 |   | NULL 
| 97786 | db| localhost | userA | Sleep | 343 |   | NULL 
| 97889 | db| localhost | userA | Sleep | 310 |   | NULL 

लेकिन मैं नहीं समझ सकता है कि वे अभी भी वहाँ और मार डाला नहीं कर रहे हैं कर रहे हैं? यह अंततः सभी ऐप_कनेक्शन का उपयोग करके मेरे ऐप की ओर जाता है और इनकमिंग अनुरोधों को संसाधित करना बंद कर देता है ...

कोई विचार ये प्रक्रियाएं क्या हैं और वे वहां क्या कर रहे हैं :)?

उत्तर

12

वे ग्राहक द्वारा निष्क्रिय निष्क्रिय कनेक्शन हैं। आपको यह सुनिश्चित करना चाहिए कि आप जिस भी क्लाइंट लाइब्रेरी का उपयोग कर रहे हैं (जेडीबीसी, ...) अप्रयुक्त कनेक्शन को इतनी देर तक नहीं खोलने के लिए कॉन्फ़िगर किया गया है, या आपके # क्लाइंट * अधिकतम कनेक्शन कनेक्शन बहुत बड़े नहीं हैं।

+0

क्या कोई mysql टाइमआउट चर है जिसे मैं इससे बचने के लिए समायोजित कर सकता हूं? – AlfaTeK

+4

आप प्रतीक्षा_टाउटआउट को कुछ छोटे (http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html#sysvar_wait_timeout) पर सेट कर सकते हैं या कनेक्शन सीमा बढ़ा सकते हैं। हालांकि, आप इसे वास्तव में एप्लिकेशन पक्ष पर हल करना चाहते हैं। डेटाबेस पक्ष से कनेक्शन को लटकाना एक कनेक्शन को बंद करने के जोखिम को बंद कर देता है जैसे कि एप्लिकेशन इसका उपयोग करने का प्रयास करता है, संभावित रूप से किसी भी अच्छे कारण के लिए एप्लिकेशन त्रुटि उत्पन्न करता है। आप किस डेटाबेस कनेक्शन लाइब्रेरी का उपयोग कर रहे हैं? –

+0

@ किथरंडल लेकिन नल प्रक्रियाओं की पहचान कैसे करें? – Khuram

3

मेरा अनुमान है कि आप लगातार कनेक्शन का उपयोग कर रहे हैं, उदा। pconnect php में:

[..] जब जोड़ने, समारोह पहली बार एक (लगातार) लिंक को पहले से ही एक ही मेजबान, उपयोगकर्ता नाम और पासवर्ड के साथ खुला है कि खोजने के लिए कोशिश करेंगे। यदि कोई मिलता है, इसके लिए एक पहचानकर्ता के बजाय एक नया कनेक्शन

और

खोलने की लौटा दी जाएगी

[..] एसक्यूएल सर्वर से कनेक्शन बंद नहीं किया जाएगा, जब के निष्पादन लिपि समाप्त होता है। इसके बजाय, लिंक भविष्य में उपयोग के

के लिए खुला रहेगा मैं एक ऐसी ही स्थिति थी, और Codeigniter उपयोग कर रहा था pconnect साथ चालू कर दिया। इसे बंद करने के बाद (see how) उपयोग के बाद प्रत्येक कनेक्शन ठीक से बंद कर दिया गया था, और मेरी MySQL प्रक्रियासूची खाली थी।

प्रदर्शन: उपर्युक्त प्रदर्शन के बारे में बहस नहीं करता है, लेकिन बस यह समझाने की कोशिश करता है कि आप MySQL में बहुत से स्लीपिंग कनेक्शन क्यों देख सकते हैं। कनेक्शन सक्रिय होने के कारण, प्रदर्शन के संबंध में यह नकारात्मक नहीं हो सकता है। अधिक जानकारी: http://www.mysqlperformanceblog.com/2006/11/12/are-php-persistent-connections-evil/

संबंधित मुद्दे