मुझे किसी प्रोजेक्ट पर क्वेरी कैश के साथ बहुत सारी परेशानी हो रही है: मैं MySQL का पेर्कोना स्वाद चला रहा हूं, दोनों ही मेरे स्थानीय विकास मशीन पर उत्पादन सर्वर पर समान संस्करण हैं। अब, क्वेरी कैश को सक्षम करने से मुझे मेरी स्थानीय मशीन पर उत्कृष्ट परिणाम मिलते हैं: लगभग सभी प्रश्न जिन्हें कैश किया जाना चाहिए, प्रभावी रूप से हैं।प्रश्न स्थानीय सेटअप पर कैश किया गया है, लेकिन सर्वर पर कभी नहीं?
अब, वही प्रश्न उत्पादन सर्वर पर कैश नहीं किए जा रहे हैं। सब ठीक वही है; mysql चर, डेटाबेस सामग्री, कोडबेस, उपयोगकर्ता में लॉग इन, .. लेकिन उत्पादन पर केवल एक मुट्ठी भर प्रश्नों को कैश किया जा रहा है, सबसे महत्वपूर्ण सभी को छोड़ दिया जा रहा है। और मैं यह नहीं समझ सकता कि क्यों :-)
तो, समाधान की तलाश में, मैं निम्नलिखित क्वेरी के साथ काम कर रहा हूं, विषय तालिका से नवीनतम 3 विषयों का चयन करने के लिए उपयोग किया जाता है: (यह सबसे अधिक "भारी" है !
+------------------------------+----------+
| Variable_name | Value |
+------------------------------+----------+
| have_query_cache | YES |
| query_cache_limit | 1048576 |
| query_cache_min_res_unit | 4096 |
| query_cache_size | 10485760 |
| query_cache_strip_comments | OFF |
| query_cache_type | ON |
| query_cache_wlock_invalidate | OFF |
+------------------------------+----------+
ऊपर क्वेरी चल रहा है: क्वेरी और एक मैं निश्चित रूप से चाहते कैश हो जाने की है)
SELECT `topic`.* FROM `topics` AS `topic`
LEFT OUTER JOIN `topics` AS `topic_helper`
ON (`topic`.`id` = `topic_helper`.`id`
AND `topic_helper`.`created_on` < `topic`.`created_on`)
GROUP BY `topic`.`id` HAVING COUNT(*) < 3
ORDER BY `topic`.`created_on` DESC;
तो, शुरू करने के लिए, SHOW VARIABLES LIKE '%query_cache%
मुझे एक ही परिणाम दोनों उत्पादन पर के रूप में स्थानीय देते हैं, पहले रन के बाद स्थानीय रूप से कैश किया जाता है, क्योंकि SHOW PROFILE
स्पष्ट रूप से मुझे बताता है n कान के निशान का अंत कान:
| Waiting for query cache lock | 0.000001 |
| Waiting on query cache mutex | 0.000001 |
| freeing items | 0.000000 |
| storing result in query cache | 0.000002 |
| logging slow query | 0.000001 |
| cleaning up | 0.000006 |
+--------------------------------+----------+
दूसरा कॉल कैश से क्वेरी को अपेक्षित रूप से देता है।
उत्पादन सर्वर पर, यह क्वेरी चलाने से इसे कैश में कभी भी स्टोर नहीं किया जाएगा। परिणाम सेट बिल्कुल वही है, और स्पष्ट रूप से कोई कथन नहीं किया जा रहा है जो क्वेरी कैशिंग को अमान्य कर देगा (मैनुअल के अनुसार http://dev.mysql.com/doc/refman/5.1/en/query-cache-operation.html पर - मुझे यकीन है कि उपरोक्त क्वेरी कैश होने के लिए आवश्यकताओं का अनुपालन करती है।)
पूर्णता खातिर, उत्पादन सर्वर पर है कि समान क्वेरी SHOW PROFILE
का पूरा उत्पादन, के लिए यहां चिपकाया जाता है: http://pastebin.com/7Jm5rmVd
इसके अलावा, यह ध्यान देने योग्य है कि हालांकि विन्यास दोनों सर्वर पर बिल्कुल वैसा ही है, अपने स्थानीय संस्करण 5.5.27 है, उत्पादन 5.5.17-55 पर एक से थोड़ा नया है। क्या यह हो सकता है कि यह समस्या है ..?
मैं उत्पादन सर्वर के रूप में दोनों अपने स्थानीय सर्वर से पूर्ण SHOW VARIABLES;
उत्पादन की तुलना में अगर कुछ भी याद आ रही थी को देखने के लिए, लेकिन कुछ भी प्रणाली समय क्षेत्र के अलावा अलग है और पथ की फाइलें आदि लॉग इन करने की ..
तो, हो सकता है आप में से कोई भी जानता है कि आगे कहां देखना है? या कोई संकेत है कि यह क्या हो सकता है?
MySQL मैन्युअल से आपके लिंक से, मैंने अभी सीखा है कि "एक प्रश्न भी कैश नहीं किया गया है [अगर] उपयोगकर्ता में शामिल किसी भी तालिका के लिए कॉलम-स्तरीय विशेषाधिकार है"। क्या यह आपके उत्पादन सर्वर पर मामला हो सकता है? साथ ही, "किसी तालिका में कोई भी सम्मिलित, अद्यतन, हटाएं या अन्य संशोधन क्वेरी क्वेरी को फ़्लश करने के लिए किसी भी प्रासंगिक प्रविष्टियों का कारण बनता है।", Http://dev.mysql.com/doc/refman/5.5/en/query- cache.html)। यह परीक्षण सर्वर की तुलना में उत्पादन में अधिक बार होने की संभावना है। आप कम ट्रैफिक समय के दौरान उत्पादन में अपना परीक्षण चलाने के लिए चाहते हैं। – RandomSeed
हाय याक, आपकी अंतर्दृष्टि के लिए धन्यवाद। बस परीक्षण के लिए, मैंने जल्दी से अपने डीबी उपयोगकर्ता को रूट में बदल दिया, जिसके पास कोई विशेषाधिकार नहीं था। क्वेरी कैश अभी भी क्वेरी को सम्मिलित नहीं कर रहा है, दुर्भाग्यवश। इसके अलावा, मैं स्टेजिंग सर्वर (जो उत्पादन के सटीक क्लोन का उपयोग कर रहा है) पर काम कर रहा हूं, इसलिए मुझे यकीन है कि जब मैं परीक्षण कर रहा हूं तो बहुत अधिक ट्रैफिक नहीं है :-) आपकी मदद के लिए बहुत बहुत धन्यवाद! –
यदि कोई गैर-निर्धारक मूल्य नहीं है तो एक क्वेरी कैश नहीं की जाती है। मुझे नहीं पता कि गिनती गैर निर्धारक के रूप में क्यों गिना जाएगा, गिनती को हटाने का प्रयास करें और परीक्षण करें यदि यह कैश किया गया है – FabioCosta