क्लाइंट टाइम आउट, जबकि MySQL क्वेरी चल रही है?


9

हमें एक समस्या का सामना करना पड़ा जिसमें एक रीड-ओनली क्वेरी, MySQL वर्कबेंच के माध्यम से चलती है, एक उपयोगकर्ता के यूआई के नजरिए से समय से बाहर है और सर्वर पर चल रहा है (और जाहिर तौर पर अधिक से अधिक संसाधनों का उपभोग) जब तक हमारे पास आउटेज नहीं था।

प्रशन

  • क्या MySQL में इस तरह के मुद्दे से निपटने के लिए कोई मानक तरीका है?
  • क्या कोई मूलभूत कारण है जिससे हमें बचने की आवश्यकता है?

जवाबों:


11

आपको यह देखने की जरूरत है कि टाइमआउट के लिए कौन से डिफ़ॉल्ट मान हैं:

mysql> show variables like '%timeout';
+----------------------------+-------+
| Variable_name              | Value |
+----------------------------+-------+
| connect_timeout            | 10    |
| delayed_insert_timeout     | 300   |
| innodb_lock_wait_timeout   | 50    |
| innodb_rollback_on_timeout | OFF   |
| interactive_timeout        | 60    |
| net_read_timeout           | 30    |
| net_write_timeout          | 60    |
| slave_net_timeout          | 3600  |
| table_lock_wait_timeout    | 50    |
| wait_timeout               | 60    |
+----------------------------+-------+
10 rows in set (0.00 sec)

आमतौर पर, मैं कई टाइमआउट चर के लिए देखता हूं। यदि आप MySQL कार्यक्षेत्र, Mysql क्लाइंट या PHP ऐप से MySQL का उपयोग करते हैं, तो यह बहुत ही अनिवार्य है, जो किसी DB सर्वर पर MySQL से संपर्क करने वाले ऐप सर्वर पर है।

यहाँ MySQL प्रलेखन कहा जाता है कि इन सेटिंग्स में से एक:

  • Wait_timeout (डिफ़ॉल्ट 28800 [8 घंटे]): सर्वर को बंद किए बिना एक गैर-सक्रिय कनेक्शन पर गतिविधि के लिए सेकंड की संख्या का इंतजार होता है। यह टाइमआउट केवल टीसीपी / आईपी और यूनिक्स सॉकेट फ़ाइल कनेक्शन पर लागू होता है, न कि नामित पाइप, या साझा की गई मेमोरी का उपयोग करके किए गए कनेक्शन पर। थ्रेड स्टार्टअप पर, सत्र प्रतीक्षा_ टाइमआउट मान क्लाइंट के प्रकार (जैसा कि CLIENT_INTERACTIVE कनेक्ट विकल्प mysll_real_connect () द्वारा परिभाषित किया गया है) के आधार पर वैश्विक प्रतीक्षा_टाइम मान से या वैश्विक इंटरैक्टिव_टाइम मान से प्रारंभ किया जाता है। इंटरेक्टिव_टाइमआउट भी देखें।
  • इंटरैक्टिव_टाइम (डिफ़ॉल्ट 28800 [8 घंटे]): सर्वर को बंद करने से पहले एक इंटरैक्टिव कनेक्शन पर गतिविधि के लिए सेकंड की संख्या का इंतजार होता है। एक इंटरैक्टिव क्लाइंट को क्लाइंट के रूप में परिभाषित किया जाता है जो CLIENT_INTERACTIVE विकल्प का उपयोग mysql_real_connect () में करता है। यह भी देखें wait_time
  • net_read_timeout (डिफ़ॉल्ट 30): रीड को निरस्त करने से पहले कनेक्शन से अधिक डेटा की प्रतीक्षा करने के लिए सेकंड की संख्या। जब सर्वर क्लाइंट से पढ़ रहा है, तो net_read_timeout गर्भपात करने के समय नियंत्रित करने वाला टाइमआउट मान है। जब सर्वर क्लाइंट को लिख रहा है, तो net_write_timeout गर्भपात करने के लिए समयबाह्य मान नियंत्रित कर रहा है। Slave_net_timeout भी देखें।
  • net_write_timeout (डिफ़ॉल्ट 60): लेखन को निरस्त करने से पहले एक कनेक्शन के लिए एक ब्लॉक के लिए प्रतीक्षा करने के लिए सेकंड की संख्या। Net_read_timeout भी देखें।

कृपया सुनिश्चित करें कि इन टाइमआउट को प्रश्नों को समायोजित करने के लिए पर्याप्त रूप से सेट किया गया है जो बहुत लंबे समय तक चल सकते हैं, जिसमें शामिल हो सकते हैं:

  • द्रव्यमान UPDATEs
  • द्रव्यमान DELETEs
  • ENABLE KEYS एक बड़े MyISAM पर

उन प्रश्नों से निपटने के लिए जो आपके साथ संपर्क खोने के बाद भी चलते रहते हैं, आपको लंबे समय तक चलने वाली क्वेरी की प्रक्रिया आईडी के खिलाफ KILL चलाना होगा। KILL कमांड के साथ भी, आपको किसी भी क्वेरी के लिए इंतजार करना होगा जो डिस्क-सघन चरणों के बीच में है या प्रगति में आंतरिक म्यूटेक्स है।


क्या लंबे समय से चली आ रही प्रक्रियाओं के खिलाफ KILL चलाने का एक मानक, मजबूत तरीका है, या यह आमतौर पर bash script / cron job के माध्यम से किया जाता है?
द्वादश

मैंने वास्तव में मई 2011 में एक पोस्ट लिखी थी कि DB_
RolandoMySQLDBA

"कृपया सुनिश्चित करें कि इन टाइमआउट्स को प्रश्नों को समायोजित करने के लिए पर्याप्त रूप से सेट किया गया है जो बहुत लंबे समय तक चल सकते हैं, जिसमें शामिल हो सकते हैं: बड़े पैमाने पर अपडेट ..." उदाहरण: php + mysql मुझे टेबल कॉलम से हर रिकॉर्ड का चयन करना है, इसलिए प्राप्त करें पंक्तियाँ और फिर कुछ करें ... फिर एक नए मान के साथ एक और रिकॉर्ड अपडेट करें। मामला डालें जो इस स्क्रिप्ट को लगभग 5+ मिनट की आवश्यकता है। शुरुआत में एक का चयन और अंत में एक अद्यतन, पंक्तियों को लाने और बीच में ... करें। क्या आप बता सकते हैं कि इस स्थिति के साथ क्या करना है? वास्तव में यह मेरे लिए स्पष्ट नहीं है ... क्या
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.