MySQL - क्वेरी की गति के परीक्षण के लिए कैश का उपयोग न करने के लिए बाध्य करें


343

मैं MySQL में कुछ प्रश्नों की गति का परीक्षण कर रहा हूं। डेटाबेस इन प्रश्नों को कैशिंग कर रहा है, जिससे मेरे लिए यह सुनिश्चित करना मुश्किल है कि इन प्रश्नों का परीक्षण कितनी तेजी से हो रहा है।

क्या क्वेरी के लिए कैशिंग को अक्षम करने का कोई तरीका है?

सिस्टम: MySQL 4 लिनक्स वेबहोस्टिंग पर, मेरे पास PHPMyAdmin तक पहुंच है।

धन्यवाद

mysql 

जवाबों:


527

अपनी क्वेरी में SQL_NO_CACHE (MySQL 5.7) विकल्प का उपयोग करने का प्रयास करें । (MySQL 5.6 उपयोगकर्ता यहां क्लिक करें )

जैसे।

SELECT SQL_NO_CACHE * FROM TABLE

यह MySQL के परिणामों को रोकना बंद कर देगा, हालाँकि इस बात से अवगत रहें कि अन्य OS और डिस्क कैश भी प्रदर्शन को प्रभावित कर सकते हैं। ये मुश्किल से निकलते हैं।



4
Mysql क्वेरी कैश के बारे में एक अच्छा लेख। कैसे सेटअप करें और कार्रवाई में कैश देखें! पढ़ने लायक। databasejournal.com/features/mysql/article.php/3110171/…
एड्रियन पी।

1
प्रदर्शन में सुधार करने की कोशिश करने से पहले, अपने mysql सर्वर को पुनरारंभ करने का प्रयास करें। हो सकता है कि कुछ प्रक्रिया सब कुछ प्रभावित कर रही हो। यह मेरे साथ हो चुका है। हालांकि यह एक टिप्पणी है जिसका इस मुद्दे से कोई सीधा संबंध नहीं है, यह कई लोगों की मदद कर सकता है।
डेलासाविया

2
यह परिणामों को कैशिंग करने से रोकता है लेकिन क्या यह कैश का उपयोग करने से भी रोकता है ?
ब्रेट

3
@ ब्रेट सलमान पीके की टिप्पणी को '11 में वापस देखें। वह doc पृष्ठ वस्तुतः 4 वाक्य है और आपके प्रश्न का सीधा उत्तर देता है। यदि भविष्य में पृष्ठ को हटा दिया जाता है, तो "यह न तो क्वेरी कैश की जांच करता है कि परिणाम पहले से ही कैश है या नहीं, और न ही यह क्वेरी परिणाम को कैश करता है।"
मौरिस

121

एक अन्य विकल्प जो केवल वर्तमान कनेक्शन को प्रभावित करता है:

SET SESSION query_cache_type=0;

मेरी गलती। यह query_cache_sizeमैं देख रहा था, नहीं query_cache_type। मैं तुम्हारा और सीनियरदेव का जवाब मिला रहा था।
माइक

56

वर्तमान तिथि / समय का कोई भी संदर्भ उस चयन के लिए क्वेरी कैश को अक्षम कर देगा:

SELECT *,NOW() FROM TABLE

"पूर्वापेक्षाएँ और MySQL क्वेरी कैश उपयोग के लिए नोट्स" देखें @ http://dev.mysql.com/tech-resources/articles/mysql-query-cache.html


30

कॉन्फ़िगरेशन विकल्प भी है: query_cache_size = 0

सर्वर स्टार्टअप पर क्वेरी कैश को अक्षम करने के लिए, query_cache_size सिस्टम वैरिएबल को 0. पर सेट करें। क्वेरी कैश कोड को अक्षम करके, कोई ध्यान देने योग्य ओवरहेड नहीं है। यदि आप स्रोत से MySQL का निर्माण करते हैं, तो क्वेरी कैश क्षमताओं को पूरी तरह से --without-query-cache विकल्प के साथ कॉन्फ़िगर करके सर्वर से बाहर रखा जा सकता है।

Http://dev.mysql.com/doc/refman/5.1/en/query-cache.html देखें


24

क्वेरी कैश को रीसेट करने के लिए आप फॉलो कमांड भी चला सकते हैं।

RESET QUERY CACHE

9
यह शायद ओवरकिल है ... आदर्श रूप से, आप केवल MySQL को अस्थायी रूप से कैश को अनदेखा करना चाहते हैं।
बीएमपीएन

3
इसके लिए आपको विशेष अनुमति की भी आवश्यकता होती है।
एलिक रॉबर्टसन

19

के साथ एक समस्या है

SELECT SQL_NO_CACHE * FROM TABLE

विधि यह है कि यह केवल आपके प्रश्न के परिणाम को कैश्ड होने से रोकता है। हालाँकि, यदि आप किसी ऐसे डेटाबेस को क्वेरी कर रहे हैं, जिसका उपयोग सक्रिय रूप से उस क्वेरी के साथ किया जा रहा है जिसे आप परीक्षण करना चाहते हैं, तो अन्य क्लाइंट आपके परिणामों को प्रभावित करते हुए, आपकी क्वेरी को कैश कर सकते हैं। मैं इसके आस-पास शोध के तरीकों को जारी रख रहा हूं, अगर मैं इसका पता लगाऊंगा तो इस पोस्ट को संपादित करूंगा।


1
लेकिन अगर आपका कैश दूसरों द्वारा भरा जाता है, तो आपको तेज होने का भ्रम होगा। लेकिन कभी-कभी नहीं।
कराटेग


3

किसी क्वेरी के भीतर उपयोगकर्ता-परिभाषित चर का उपयोग करना क्वेरी को अस्वीकार्य बनाता है। मैंने इसे उपयोग करने से बेहतर संकेतक पाया SQL_NO_CACHE। लेकिन आपको चर को ऐसी जगह पर रखना चाहिए जहां चर सेटिंग गंभीरता से प्रदर्शन को प्रभावित न करे:

SELECT t.*
FROM thetable t, (SELECT @a:=NULL) as init;

3
"मैंने इसे इस्तेमाल करने से बेहतर संकेतक पाया SQL_NO_CACHE।" ऐसा कैसे? लगता है कि आपको एक स्पष्ट कीवर्ड पर अस्पष्ट हैक का उपयोग करने के लिए एक बहुत मजबूत मामले की आवश्यकता होगी, जब तक कि स्पष्ट कीवर्ड वह नहीं कर रहा है जो वह दावा करता है।
हवा

1
@ मैंने पाया कि यह समाधान SQL_NO_CACHE से भी बेहतर काम करता है। SQL_NO_CACHE ने पहली बार क्वेरी चलाने का काम किया, लेकिन उसके बाद फिर से काम नहीं किया। मैं यह मान रहा हूं कि यह कैशिंग के अन्य तंत्रों के कारण है। मुझे लगता है कि यह बेहतर काम करता है क्योंकि एक खोज जो किसी चर पर निर्भर होती है उसे किसी भी परत या तंत्र द्वारा कैश नहीं किया जा सकता है - कम से कम, यह मेरा सबसे अच्छा अनुमान है।
क्लेक

2

यदि आप क्वेरी कैश को अक्षम करना चाहते हैं, तो अपने mysql कॉन्फ़िगरेशन फ़ाइल में 'query_cache_size' को 0 पर सेट करें। यदि इसका सेट 0 mysql अभ्यस्त क्वेरी कैश का उपयोग करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.