2011-11-27 11 views
11

मैं सिर्फ slow query logging मेरी MySQL डेटाबेस पर चालू कर रखी है, जोड़ने /etc/mysql/my.cnf के लिए निम्न:"SELECT/*! N SQL_NO_CACHE */*` mytable` से "का अर्थ MySQL के धीमे क्वेरी लॉग में क्या है?

log_slow_queries = /var/log/mysql/mysql-slow.log 
long_query_time = 1 

जब मैं mysqldumpslow चलाने के लिए, यह निम्नलिखित आउटपुट:

Reading mysql slow query log from mysql-slow.log 
Count: 1 Time=199.23s (199s) Lock=0.00s (0s) Rows=32513.0 (32513), ... 
SELECT /*!N SQL_NO_CACHE */ * FROM `mytable` 

... 

मूल mysql-slow.log को देखते हुए, पूर्ण क्वेरी थी:

SELECT /*!40001 SQL_NO_CACHE */ * FROM `mytable`; 

तो mysqldumpslow बस प्रतिस्थापित N के साथ संख्या (समान प्रश्नों को एकत्रित करने में सहायता के लिए।)

तो सवाल यह है कि वह क्वेरी कहां से आती है और /*!40001 SQL_NO_CACHE */ बिट का क्या मतलब है?

सबसे अच्छा मैं बता सकता हूं, यह शायद mysqldump कमांड से है जो बैकअप कर रहा था (इसलिए कैश डेटा नहीं चाहते थे), क्या यह सही लगता है? और यदि ऐसा है, क्योंकि यह केवल 32,000 पंक्तियों को पढ़ता है, तो यह 199 क्यों लेता है?

अन्य टेबलों पर 100 से अधिक, 50s, अधिक उचित 3 एस तक ले जाने के लिए एक समान प्रश्न हैं, जिनमें लगभग 10-20,000 पंक्तियां हैं, जो 450,000 पंक्तियों के साथ सबसे बड़ी हैं।

+0

शायद आप नीचे बेहतर उत्तर स्वीकार कर सकते हैं? – rubo77

उत्तर

4

क्वेरी शायद 'धीमी' है क्योंकि क्लाइंट (आपके बैकअप सिस्टम) को आपकी तालिका में प्रत्येक पंक्ति को पढ़ना पड़ रहा है; जो स्पष्ट रूप से 199 सेकंड ले रहा है।

ध्यान दें कि आप की तरह कुछ किया है, तो:

SELECT * FROM table LIMIT 100; 

// read 50 rows 

// sleep for 5 minutes 

// read last 50 rows 

ऊपर क्वेरी धीमी लॉग में, प्रकट होता है क्योंकि से जब वह पहली बार शुरू किया था, जब यह खत्म हो सकता है (आप पिछले अनुरोध किया पंक्ति भेजकर) इसमें 5 मिनट लग गए।

+1

शीर्षक में नहीं, लेकिन "बैकअप सिस्टम" mysqldump है, निश्चित रूप से 32,000 पंक्तियों को लिखने में 200 सेकंड नहीं लगते हैं? – Tom

+2

असल में, अगर यह एसएसएच (gzip के माध्यम से) पर भेज रहा है जो डेटा को स्थानांतरित होने तक इसे तब तक खुला रख सकता है ... – Tom

+0

क्वेरी चलने पर एक शो प्रोसेसलिस्ट करें, यदि इसकी स्थिति 'नेट पर लिखना' है (I सोचें) तो डेटा को तेज़ी से भेजकर आपके दूसरे छोर को संसाधित कर रहा है। – Andrew

22

/*!40001 SQL_NO_CACHE */ का अर्थ है कि mysql> = 4.0.1 के संस्करणों में SELECT SQL_NO_CACHE * FROM mytable निष्पादित करें और पुराने संस्करणों में SQL_NO_CACHE के बिना कमांड निष्पादित करें।

इसके अलावा mysqldump /*!40001 SQL_NO_CACHE */ वाक्यविन्यास का उपयोग करता है।

मुझे यकीन नहीं है कि आपके प्रश्न इतने धीमे क्यों होंगे।

+0

आह, एक संस्करण संख्या! मैंने सोचा कि यह एक त्रुटि कोड या कुछ हो सकता है। यह जानना अच्छा है, क्या उस वाक्यविन्यास के लिए कोई दस्तावेज है? – Tom

+0

हाँ आप MySQL साइट पर कुछ जानकारी यहां देख सकते हैं: http://dev.mysql.com/doc/refman/5.1/en/comments.html –

+0

यह सही उत्तर होना चाहिए। मुझे नहीं लगता कि मुख्य सवाल यह था: "मेरे प्रश्न धीमे क्यों हैं?" कम से कम –

3

ट्यूनिंग की बात आपके द्वारा इस क्वेरी को तेज़ी से चलाने के लिए विचार की जा सकती है, btw, SQL_NO_CACHE का अर्थ है कि यह क्वेरी क्वेरी कैश में संग्रहीत करने के योग्य नहीं होगी। उदाहरण के लिए, आप इस क्वेरी को कैश करने के लिए इस HINT, SQL_NO_CACHE का उपयोग कर सकते हैं ताकि निष्पादन समय का परीक्षण किया जा सके।

इसे देखें: http://dev.mysql.com/doc/refman/5.0/en/query-cache-in-select.html

अधिक संकेत प्रश्नों में उपयोग करने के लिए: http://www.petefreitag.com/item/613.cfm

चीयर्स, पश्चिम बंगाल

-1

मेरे काम से, मैं भी तो एक ही मुद्दा का सामना करना पड़ा मैं हल करने के लिए दो तरह से करने की कोशिश की यह।

सबसे पहले, मैंने mysql_query_cache आकार बढ़ाया है और स्थानीय मशीन में स्थान बढ़ाया है।

दूसरा, मैंने दूरस्थ सर्वर mysql_query_cache आकार की जांच की है और temp निर्देशिका स्थान को बढ़ाया है।

क्योंकि, मुझे शोध से क्या मिला है कि यह प्रणाली दोनों तरीकों से काम कर रही है और हमें यह समझ दे रही है कि हमें विशिष्ट स्थान पर जगह बढ़ाना है।

तो, विशिष्ट रहें जो mysqldum पी आप दोनों सिस्टम के लिए संस्करण का उपयोग और जांच भी कर रहे हैं। जैसा कि अलग संस्करण भी थोड़ा अलग व्यवहार करता है।

+2

मैं यह देखने में असफल रहा कि यह पूछे जाने वाले प्रश्न का उत्तर कैसे देता है? – Carpetsmoker

+0

मुझे एक ही त्रुटि मिली और मैंने इसे उन चरणों से हल किया। मेरा मतलब है कि यह धीमी क्वेरी लॉग से संबंधित नहीं है। यह सिस्टम में अंतरिक्ष आकार के बारे में है। इस प्रकार उत्तर प्रश्न से संबंधित है। – Sumsun

+1

लेकिन यह सवाल किसी त्रुटि के बारे में नहीं है, लेकिन किसी चीज़ के बारे में स्पष्टीकरण मांगना है? – Carpetsmoker

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