2011-10-13 18 views
8

मुझे एक अजीब समस्या है। मैं PHP से एक बहुत बड़ी तालिका के खिलाफ एक MySQL क्वेरी चला रहा हूँ। क्वेरी समय एक मिनट से अधिक है, लेकिन यह मेरी समस्या नहीं है। ऐसा लगता है कि PHP हर 66 सेकंड में क्वेरी भेज रहा है।MySQL क्वेरी प्रत्येक 60 सेकेंड को पुनरारंभ करना?

show processlist; 
+--------+---------+-------------------+----------+---------+------+---------------+-------------------------------------------------------- 
| Id  | User | Host    | db  | Command | Time | State   | Info             
+--------+---------+-------------------+----------+---------+------+---------------+-------------------------------------------------------- 
| 150018 | root | localhost   | amrs  | Query | 32 | Sending data | /*DEREK*/select ctlno, count(*) AS count from (omitted) 

कुछ ही मिनट बाद, मैं फिर से जांच की गई:

+--------+---------+-------------------+----------+---------+------+---------------+-------------------------------------------------------- 
| Id  | User | Host    | db  | Command | Time | State   | Info             
+--------+---------+-------------------+----------+---------+------+---------------+-------------------------------------------------------- 
| 150018 | root | localhost   | amrs  | Query | 188 | Sending data | /*DEREK*/select ctlno, count(*) AS count from (omitted) 
| 150021 | root | localhost   | amrs  | Query | 122 | Sending data | /*DEREK*/select ctlno, count(*) AS count from (omitted) 
| 150023 | root | localhost   | amrs  | Query | 56 | Sending data | /*DEREK*/select ctlno, count(*) AS count from (omitted) 

मैं पेज या कुछ भी पुनः लोड नहीं किया है। set_time_limit (0) को स्क्रिप्ट की शुरुआत के पास बुलाया जाता है। कष्टप्रद हिस्सा यह है कि पृष्ठ हाल ही में चलने वाले एक से जुड़ा हुआ प्रतीत होता है। तो अगर मैं 150018 को मारता हूं, तो कुछ भी बुरा नहीं होता है, लेकिन यदि मैं 150023 को मारता हूं तो इससे पहले कि कोई दूसरा उत्पन्न हो जाए, तो पृष्ठ "क्वेरी निष्पादन बाधित" त्रुटि के साथ आता है। 150018 अंततः अपने आप पर चलना समाप्त कर देगा लेकिन यह कोई अच्छा नहीं करता क्योंकि स्क्रिप्ट/पेज इसे प्राप्त नहीं करेगा।

किसी के पास कोई विचार है?

संपादित करें: शो पूर्ण processlist निम्नलिखित (संक्षिप्तता और गोपनीयता के लिए हटा दिया कुछ लाइनों के साथ) देता है:

+--------+---------+-------------------+----------+---------+-------+--------------+----------------------------------------------------- 
| Id  | User | Host    | db  | Command | Time | State  | Info 
+--------+---------+-------------------+----------+---------+-------+--------------+----------------------------------------------------- 
| 147385 | root | localhost:44560 | amrs  | Sleep | 14021 |    | NULL 
| 150248 | root | localhost   | NULL  | Query |  0 | NULL   | show full processlist 
| 150251 | root | localhost   | amrs  | Query |  1 | statistics | /*DEREK*/select ctlno, count(*) AS count from (snip) 
+--------+---------+-------------------+----------+---------+-------+--------------+----------------------------------------------------- 
+0

आप हमें दिखा सकते हैं इस आदेश का परिणाम: 'पूर्ण proceslist दिखाएं;' क्वेरी निष्पादित करने के बाद? (2 कनेक्शन खोलें, # 1 = आपकी क्वेरी, # 2 = यह क्वेरी) –

+0

ऐसा लगता है जैसा मैं अपेक्षा करता हूं। मैंने अन्य प्रश्नों से संबंधित कुछ पंक्तियों को छोड़ दिया, जैसा मैंने ऊपर किया था, लेकिन मैंने इसे ऊपर से निपटाया। – Derek

+0

क्या आप टेबल संरचना दिखा सकते हैं? वहां कोई खंड नहीं है? –

उत्तर

1

मैं एक ऐसी ही समस्या को देखा है कई बार से पहले, और अपनी समस्याओं बहुत के समान ध्वनि है कि मैं क्या पिछली वेबसाइट के साथ काम करने का अनुभव कर रहा था।

क्या आप वेब साइट पर जाने पर प्रॉक्सी सर्वर से गुज़र रहे हैं?

मेरी साइट के साथ क्या हो रहा था, यह था कि उसी कंपनी के उपयोगकर्ताओं के किसी विशेष सेट से पूछे जाने वाले प्रश्न उनके प्रॉक्सी सर्वर के माध्यम से निर्देशित किए जा रहे थे, जो स्वयं के लिए निर्णय ले रहा था कि अगर 60 सेकंड के भीतर कोई प्रतिक्रिया प्राप्त नहीं हुई है, तो यह ग्राहक ब्राउज़र को सूचित किए बिना वेब अनुरोध को फिर से जारी करेगा कि यह हो रहा था!

तो, निष्पादित करने के लिए एक मिनट से अधिक समय तक चलने वाले कुछ लंबे समय तक चलने वाले प्रश्नों के साथ, मैं देखता हूं कि क्वेरी एक-दूसरे पर मिलती-जुलती शुरू होती हैं, और मैं एक समान प्रश्नों के लोड के साथ प्रक्रिया-सूची को देखता हूं, प्रत्येक लगभग 60 सेकंड से अलग!

इसका समाधान क्लाइंट को हमारी साइट के लिए अपने प्रॉक्सी सर्वर को पास करने के लिए प्राप्त करना था।

क्लाइंट ने अपने प्रॉक्सी सर्वर को नवीनतम संस्करण में अपग्रेड करते समय इस सटीक समस्या का दूसरा उदाहरण हल किया था।

मैं माफी चाहता हूँ, लेकिन मैं याद नहीं कर सकते क्या प्रॉक्सी सर्वर, दोनों ही मामलों में उपयोग में किया गया था के रूप में यह काफी कुछ महीने पहले था, और मैं तब से सोया है: -/

+1

और जो कुछ आप कहते हैं, वह मेरे संदेह की पुष्टि करता है, उसमें यदि आप पुराने प्रश्नों में से किसी एक को मारते हैं तो आपको कोई प्रतिक्रिया नहीं दिखाई देती है (क्योंकि प्रॉक्सी सर्वर उस पृष्ठ पर छोड़ दिया गया है और आगे बढ़ गया है), और यदि आप एकल को मारते हैं (या हाल ही में?) क्वेरी, तो आप ब्राउज़र में प्रतिक्रिया देखते हैं, क्योंकि यह एकमात्र ऐसा है जो प्रॉक्सी सर्वर इंतजार कर रहा है ... –

+0

मुझे लगता है कि यह स्क्विड था। आशा है कि आप वैसे भी हैं, मेरा मालिक! –

+0

यह शायद हो सकता है, लेकिन मुझे यकीन नहीं है। दुर्भाग्यवश, क्लाइंट साइट पर होने वाली प्रॉक्सी का मतलब था कि हमारे पास इसका बहुत कम नियंत्रण था। और मैं बहुत अच्छा कर रहा हूँ, आशा है कि आप और आपकी अच्छी महिला भी हैं! :) –

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