Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

एक सम्मिलित क्वेरी को पूरा होने में कभी-कभी इतना समय क्यों लगता है?

मैंने अपने सिस्टम पर एक ही घटना देखी है। सामान्य रूप से एक मिलीसेकंड लेने वाली क्वेरी में अचानक 1-2 सेकंड लगेंगे। मेरे सभी मामले सरल हैं, एकल तालिका INSERT/UPDATE/REPLACE कथन --- किसी भी चयन पर नहीं। कोई लोड, लॉकिंग या थ्रेड बिल्ड अप स्पष्ट नहीं है।

मुझे संदेह था कि यह गंदे पृष्ठों को हटाने, डिस्क में फ्लशिंग परिवर्तन, या कुछ छिपे हुए म्यूटेक्स के कारण है, लेकिन मैंने अभी तक इसे कम नहीं किया है।

इसे भी खारिज कर दिया गया

  • सर्वर लोड -- उच्च लोड के साथ कोई संबंध नहीं
  • इंजन -- InnoDB/MyISAM/Memory के साथ होता है
  • MySQL क्वेरी कैश -- होता है चाहे वह चालू हो या बंद
  • लॉग रोटेशन -- ईवेंट में कोई संबंध नहीं

इस बिंदु पर मेरे पास एकमात्र अन्य अवलोकन इस तथ्य से लिया गया है कि मैं एक ही डीबी को कई मशीनों पर चला रहा हूं। मेरे पास एक भारी पढ़ने वाला एप्लिकेशन है इसलिए मैं प्रतिकृति वाले वातावरण का उपयोग कर रहा हूं - अधिकांश भार दासों पर है। मैंने देखा है कि मास्टर पर न्यूनतम भार होने के बावजूद, घटना वहां अधिक होती है। भले ही मुझे कोई लॉकिंग समस्या नहीं दिख रही है, हो सकता है कि यह इनोडब/माइस्क्ल को (थ्रेड) समेकन में परेशानी हो रही है? याद रखें कि स्लेव पर अपडेट सिंगल थ्रेडेड होंगे।

MySQL Verion 5.1.48

अपडेट करें

मुझे लगता है कि मेरे मामले में समस्या के लिए मेरे पास एक लीड है। अपने कुछ सर्वरों पर, मैंने इस घटना को दूसरों की तुलना में अधिक देखा। यह देखते हुए कि विभिन्न सर्वरों के बीच क्या भिन्न था, और चीजों को इधर-उधर करते हुए, मुझे MySQL innodb सिस्टम वैरिएबल innodb_flush_log_at_trx_commit

मुझे दस्तावेज़ पढ़ने में थोड़ा अजीब लगा, लेकिन innodb_flush_log_at_trx_commit 1,2,0 के मान ले सकते हैं:

  • 1 के लिए, लॉग बफ़र को प्रत्येक कमिट के लिए लॉग फ़ाइल में फ़्लश किया जाता है, और लॉगफ़ाइल को प्रत्येक कमिट के लिए डिस्क पर फ़्लश किया जाता है।
  • 2 के लिए, लॉग बफ़र को प्रत्येक कमिट के लिए लॉग फ़ाइल में फ़्लश किया जाता है, और लॉगफ़ाइल को लगभग हर 1-2 सेकंड में डिस्क पर फ़्लश किया जाता है।
  • 0 के लिए, लॉग बफ़र हर सेकंड लॉग फ़ाइल में फ़्लश किया जाता है, और लॉगफ़ाइल को हर सेकंड डिस्क पर फ़्लश किया जाता है।

प्रभावी रूप से, क्रम में (1,2,0), जैसा कि रिपोर्ट किया गया है और दस्तावेज किया गया है, आपको बढ़े हुए जोखिम के लिए व्यापार में बढ़ते प्रदर्शन के साथ मिलना चाहिए।

ऐसा कहने के बाद, मैंने पाया कि innodb_flush_log_at_trx_commit=0 वाले सर्वर innodb_flush_log_at_trx_commit=2 सर्वरों की तुलना में खराब प्रदर्शन कर रहे थे (यानी 10-100 गुना अधिक "लंबे अपडेट") . इसके अलावा, जब मैंने इसे 2 पर स्विच किया (ध्यान दें कि आप इसे मक्खी पर बदल सकते हैं) खराब उदाहरणों पर चीजें तुरंत सुधर गईं।

तो, मेरा सवाल यह है कि आपका क्या सेट है? ध्यान दें कि मैं इस पैरामीटर को दोष नहीं दे रहा हूं, बल्कि इस बात पर प्रकाश डाल रहा हूं कि इसका संदर्भ इस मुद्दे से संबंधित है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. जावा में बाइट सरणी को ब्लॉब में बदलने का सबसे आसान तरीका

  2. phpMyAdmin ('एक्सेस अस्वीकृत डेटाबेस बनाएं db_name' त्रुटि) के माध्यम से डेटाबेस को आयात और निर्यात कैसे करें

  3. MySQL:किसी अन्य तालिका से COUNT के साथ अद्यतन तालिका?

  4. कैसे जांचें कि कोई तालिका MySQL में बनाने से पहले पहले से मौजूद है या नहीं?

  5. मैक ओएस एक्स पर MySQL रत्न कैसे स्थापित करें