लॉग इन करने से MySQL का प्रदर्शन प्रभावित होता है - लेकिन, क्यों?


9

मुझे काफी आश्चर्य है कि मैं पहले से ही साइट पर कहीं भी इसका जवाब नहीं देख सकता, न ही MySQL प्रलेखन में ( खंड 5.2 में लॉगिंग लगता है अन्यथा अच्छी तरह से कवर किया गया है!)

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

क्या मैं सिर्फ एक प्रदर्शन "टिपिंग पॉइंट" के करीब होने के प्रभावों को देख रहा हूं, जब यह आईओ की बात आती है, या क्या लॉगिंग प्रश्नों के बारे में कुछ मौलिक रूप से मुश्किल है जो ऐसा करने का कारण बनता है? मैं विकास को आसान बनाने के लिए सभी प्रश्नों को लॉग इन करने में सक्षम होना पसंद करूंगा, लेकिन मैं उस तरह के हार्डवेयर को सही नहीं ठहरा सकता, जैसा कि हमें लगता है कि हमें सामान्य क्वेरी लॉगिंग के साथ प्रदर्शन वापस लेने की आवश्यकता होगी।

यदि मैं इसे अक्षम करता हूं, तो मैं धीमे प्रश्नों को लॉग करता हूं, और सामान्य उपयोग में नगण्य सुधार होता है।

(यह सब Ubuntu 10.04 LTS, MySQLd 5.1.49 पर है, लेकिन शोध बताते हैं कि यह एक सर्वव्यापी मुद्दा है)

जवाबों:


9

सामान्य क्वेरी लॉग बाइनरी लॉग की तुलना में बहुत अधिक IO हैं। इस तथ्य के अलावा कि अधिकांश एसक्यूएल सर्वर 90% से 10% लिखता है, बाइनरी लॉग सादे पाठ के बजाय द्विआधारी प्रारूप में संग्रहीत किए जाते हैं जो कम डिस्क स्थान का उपयोग करता है। (कितना कम स्थान? मुझे यकीन नहीं है। क्षमा करें।)

अपाचे और एक्जिम महत्वपूर्ण प्रदर्शन प्रभाव के बिना हर अनुरोध को रिकॉर्ड कर सकते हैं, इसके दो पहलू हैं। पहला यह है कि वे इस तथ्य को दर्ज करते हैं कि एक अनुरोध हुआ था, लेकिन जो उन्होंने लॉग में रखा था वह आमतौर पर वास्तविक अनुरोध से काफी छोटा होता है। एक HTTP अनुरोध अक्सर उस रेखा से दोगुना बड़ा होता है जो लॉग में जाती है और यहां तक ​​कि उसके साथ आने वाली लॉग लाइन से 10 या 20 गुना बड़ा प्लेन टेक्स्ट ईमेल होता है। 10MB के अनुलग्नक वाले ईमेल में अभी भी लॉग में कुछ पंक्तियाँ लिखी होंगी।

इसका दूसरा भाग यह है कि एक सामान्य वेब अनुप्रयोग में आमतौर पर एक ही HTTP पृष्ठ से जुड़े दर्जनों SQL प्रश्न होते हैं। ईमेल HTTP अनुरोधों की तुलना में बहुत कम संख्या में आते हैं। आपका MySQL सर्वर शायद Apache या Exim की तुलना में बहुत अधिक लॉग इन करने की कोशिश कर रहा है।

अपने MySQL बाइनरी और सामान्य लॉग के आकार (असम्पीडित) को देखें और दिन के अंत में आपके Apache और Exim लॉग। मैं शर्त लगाता हूं कि आप पाएंगे MySQL सामान्य लॉग कम से कम 5 के कारक द्वारा सबसे बड़ा है।


1
कुछ अच्छे बिंदु - विशेष रूप से, हां, हमारे आवेदन के लिए एक एकल GET चयन के 100s का कारण बन सकता है, हालांकि हम एक ही प्रश्न में जितना संभव हो उतना करने की कोशिश करते हैं, कभी-कभी हम इसके लिए प्रदर्शन / क्लीन-नेस का व्यापार करते हैं अधिक सुरुचिपूर्ण संरचना, अधिक पठनीय कोड और एक क्लीनर डीबी। (एक तरफ के रूप में, यह पूरी बात वास्तव में POSTs की लॉगिंग सामग्री और GETs से URL के बारे में बात करने से शुरू हुई थी, क्योंकि हम params CGI.pm को एक मामले में देखते हैं, दूसरे को नहीं, और वहाँ से लॉगिंग / प्रदर्शन में देखते हैं) सामान्य)। वैसे भी, कुछ घंटे हो गए हैं, इसलिए, जवाब स्वीकार कर लिया गया है। धन्यवाद!
जेम्स ग्रीन

4

प्रदान किए गए उत्तर में जोड़ने के लिए , आपको एक प्रदर्शन हिट दिखाई देगा यदि आप उसी डिवाइस पर लॉग इन कर रहे हैं जैसे कि आपके MySQL डेटा स्टोर पर निवास कर रहे हैं - यदि यह एक ही डिस्क है, तो आप कई स्थानों पर पढ़ने और लिखने जा रहे हैं। हर समय, पूरी प्रक्रिया को धीमा करना।

यह सच है भले ही यह एक ही भौतिक डिस्क पर एक अलग विभाजन हो।

यदि लॉगिंग किसी भिन्न डिवाइस पर जा रही है, तो प्रदर्शन के कुछ मुद्दों को कम करना चाहिए ।


1
मेरी स्थिति के लिए प्रासंगिक नहीं है - यह एक होस्ट किया गया VM है, और DBs एक ही स्टोरेज ऐरे से बदले में, एक अलग लॉजिकल वॉल्यूम / / var पर हैं। मुझे लगता है कि सिद्धांत में वे एक ही धुरी पर हो सकते हैं, लेकिन यह एक नरक संयोग की तरह महसूस करेगा :-) यह कहा, +1 को एक तरफ, क्योंकि यह बिल्कुल किसी व्यक्ति के लिए प्रासंगिक होगा जैसे कि एक डिफ़ॉल्ट डेबियन / उबंटू सेटअप (डीबी में) / var / mysql, लॉग इन / var / लॉग)!
जेम्स ग्रीन

@ जिम्बो - प्रॉप्स के लिए धन्यवाद, भले ही यह आपकी विशेष स्थिति पर सीधे लागू न हो :)
वॉरेन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.