MySQL में ट्यूनिंग (और समझ) table_cache


18

मैंने उत्कृष्ट MySQL प्रदर्शन ट्यूनिंग स्क्रिप्ट चलाई और सुझावों के माध्यम से काम करना शुरू कर दिया। एक मैं भाग गया था

टेबल CACHE
वर्तमान टेबल_ कैश मूल्य = 4096 टेबल आपके पास कुल 1073 टेबल हैं। आपके पास 3900 ओपन टेबल हैं। वर्तमान तालिका_चैच हिट दर 2% है, जबकि आपकी तालिका कैश का 95% उपयोग में है। आपको संभवतः अपनी टेबल_चेची को बढ़ाना चाहिए

मैंने table_cache पर पढ़ना शुरू किया, लेकिन पाया कि MySQL के दस्तावेज में काफी कमी थी। वे कहते हैं table_cache, "अगर आपके पास स्मृति है" बढ़ाने के लिए । दुर्भाग्य से table_cacheचर को "सभी थ्रेड्स के लिए खुली तालिकाओं की संख्या" के रूप में परिभाषित किया गया है।

यदि मैं इस चर को बढ़ाता हूं, तो MySQL द्वारा उपयोग की जाने वाली मेमोरी कैसे बदल जाएगी? इसे सेट करने के लिए एक अच्छा मूल्य क्या है?

जवाबों:


16

से MySQL प्रलेखन

उदाहरण के लिए, 200 समवर्ती चलने वाले कनेक्शनों के लिए, आपके पास कम से कम 200 × N का एक टेबल कैश आकार होना चाहिए, जहां N आपके द्वारा निष्पादित किए जाने वाले किसी भी प्रश्न में प्रति तालिका में अधिकतम संख्या है। आपको अस्थायी टेबल और फाइलों के लिए कुछ अतिरिक्त फ़ाइल डिस्क्रिप्टर भी आरक्षित करने होंगे।

इसलिए यदि आपके आवेदन में आपके पास एक क्वेरी है जो 4 तालिकाओं से जुड़ती है और आप 200 समवर्ती कनेक्शनों को संभालने में सक्षम होना चाहते हैं, तो उस कथन के आधार पर आपके पास कम से कम 800 का टेबल_ कैश होना चाहिए।

जहां तक ​​मेमोरी के उपयोग की बात है, मेरे पास वे नंबर नहीं हैं, मुझे संदेह है कि यह आपके टेबलों के आकार पर निर्भर करेगा कि यह कैशिंग है।


सूचक के लिए धन्यवाद। मैं यह जानने के बिना कि मेरा RAM उपयोग कैसे बदलेगा, मेरा table_cache नंबर बढ़ाने से थोड़ा डर लगता है। मशीन की रैम पहले से ही भरी हुई है।
जोतंगो

क्या आप सुनिश्चित हैं कि मेमोरी वास्तव में उपयोग की जा रही है या सिर्फ मेमोरी को बफ़र्स / कैश द्वारा लिया गया है? "फ्री-एम" चलाएं और दूसरी पंक्ति (- / + बफ़र्स / कैश) को देखें, यह एमबी में आपके मेमोरी उपयोग का अधिक सटीक प्रतिनिधित्व है। में प्रतिसाद देखें serverfault.com/questions/73189/... और serverfault.com/questions/9442/...
ManiacZX

हाँ, यह वास्तव में मेमोरी का उपयोग कर रहा है। कल इसकी अदला-बदली हुई, जो वास्तव में एक उत्पादन डीबी के लिए बुरा है। मैंने आज HP से RAM अपग्रेड करने का आदेश दिया।
जोतंगो

अब आने वालों के लिए, यह जवाब mysql 5.1+ के लिए सटीक नहीं है। अब यह संदर्भित है table_open_cacheकि आप डॉक्स को कब देखते हैं। @MarkRs को देखते समय उत्तर देंtable_cache
जेसन

3

आपको Opened_Tables चर की निगरानी करनी चाहिए और देखना चाहिए कि यह कितनी जल्दी बढ़ता है। यदि आप नई तालिकाओं (अस्थायी लोगों सहित) की तुलना में काफी तेज हैं, तो आपकी तालिका कैश बहुत छोटी हो सकती है।

Table_Cache हमेशा होना चाहिए - वैसे भी ज्यादातर - सर्वर में टेबल की कुल संख्या से काफी बड़ा होना चाहिए। अन्यथा यह तालिकाओं को खोलना और बंद रखना होगा।

मैं नहीं देख सकता कि आप 2% कैश हिट दर कैसे प्राप्त कर सकते हैं, जब तक कि आप सर्वर को पुनरारंभ करने के बाद या FLUSH TABLES का उपयोग करके बहुत समय माप नहीं रहे हैं (प्रश्नों की संख्या के संबंध में)। आम तौर पर टेबल कैश हिट दर 99.9% होनी चाहिए अन्यथा प्रदर्शन बेकार हो जाएगा।

यदि आप इसे से बच सकते हैं, तो एक फ्लश टैब न करें, यह कैश को उड़ा देता है।

टेबल खोलना महंगा है क्योंकि इसमें एफआरएम फाइल को पढ़ना जरूरी है। MyISAM में यह काफी खराब है (अन्य इंजनों की तुलना में), जैसे ही यह एक टेबल को बंद करता है, यह इसके अनुक्रमणिका से आए कुंजी कैश के सभी ब्लॉक को भी बाहर फेंक देता है। तो एक टेबल को बंद करने से उसके अनुक्रमित कुंजी कैश से गिरते हैं == अच्छा नहीं है! अन्य इंजन कैश्ड ब्लॉक रखते हैं लेकिन फिर भी मेटाडेटा को फिर से व्यवस्थित करने और कुछ संरचनाओं को आवंटित करने की आवश्यकता होती है।

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