INNODB बफर पूल आँकड़े की समझ बनाना


20

इस पृष्ठ को mysql प्रलेखन में पढ़ने के बाद , मैंने हमारे वर्तमान InnoDB उपयोग की समझ बनाने की कोशिश की। वर्तमान में, हम बफर पूल के लिए 6GB RAM आवंटित करते हैं। हमारे डेटाबेस का आकार उसी के बारे में है। यहाँ से आउटपुट show engine innodb status\G(हम v5.5 चला रहे हैं)

----------------------
BUFFER POOL AND MEMORY
----------------------
Total memory allocated 6593445888; in additional pool allocated 0
Dictionary memory allocated 1758417
Buffer pool size   393215
Free buffers       853
Database pages     360515
Old database pages 133060
Modified db pages  300
Pending reads 0
Pending writes: LRU 0, flush list 0, single page 0
Pages made young 7365790, not young 23099457
0.00 youngs/s, 0.00 non-youngs/s
Pages read 1094342, created 185628, written 543182148
0.00 reads/s, 0.00 creates/s, 37.32 writes/s
Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 0 / 1000
Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s
LRU len: 360515, unzip_LRU len: 0
I/O sum[2571]:cur[0], unzip sum[0]:cur[0]

मैं जानना चाहता था कि हम बफ़र कैश का कितना अच्छा उपयोग कर रहे हैं। प्रारंभ में आउटपुट पर नज़र रखने के बाद, यह दिखाई दिया कि हम वास्तव में इसका उपयोग कर रहे हैं, बंद है Pages made youngऔर not youngउनमें संख्याएँ हैं और Buffer pool hit rate is 1000 / 10000(जो मैंने वेब पर कहीं और देखा है कि इसका मतलब है कि यह बहुत भारी उपयोग किया जा रहा है? यह सच है?)

मुझे एक लूप के माध्यम से फेंक रहा है young-making rateऔर क्यों not0/1000 पर दोनों हैं young/sऔर non-young/sएक्सेस दोनों 0. पर हैं। वे सभी संकेत देंगे कि यह बिल्कुल भी उपयोग नहीं किया जा रहा है, है ना?

किसी को भी यह समझ बनाने में मदद कर सकते हैं?

जवाबों:


18
 Buffer pool hit rate is 1000 / 1000

यह उस स्थिति में केवल वास्तव में सार्थक मूल्य है जो आप में हैं ... और वह स्थिति यह है कि आप भाग्यशाली हैं कि एक बफर पूल एक पूर्ण 100% हिट दर के साथ है। इसके बाकी हिस्सों का विश्लेषण न करें, क्योंकि आपको कुछ भी बदलने की ज़रूरत नहीं है, जब तक कि सर्वर ओएस मेमोरी पर कम न हो, जिससे स्वैपिंग हो।

युवा / न युवा मूल्य ऐसे मामले में दिलचस्प नहीं हैं जहां बफर पूल पर शून्य दबाव है। InnoDB इसका उपयोग कर रहा है, यह इसके बिना कुछ भी नहीं करता है। यदि पूल बहुत छोटा है, तो पेज बेदखल हो जाते हैं और नए पेज पढ़ने को मिलते हैं और अन्य आँकड़े आपको यह समझने में मदद करते हैं ... लेकिन यह वह समस्या है जो आपके पास नहीं है।

पूल में "अप्रयुक्त" स्थान को कभी भी उपेक्षित या निष्क्रिय नहीं छोड़ा जाएगा, यदि यह किसी भी कारण से आवश्यक हो, तो इस तथ्य का मतलब यह है कि इसका केवल इतना ही मतलब है कि आपके काम करने के आकार में विस्तार करने के लिए आपके पास कुछ सांस लेने की जगह है। डेटासेट बढ़ता है।

यह सब है, इसका मतलब है, जब तक, ज़ाहिर है, आपने हाल ही में सर्वर को पुनरारंभ किया है, जिस स्थिति में, यह अधूरा है। सर्वर को पूरी कहानी बताने से पहले "सामान्य" उपयोग (पूर्ण बैकअप सहित) की एक पूरी अवधि के माध्यम से चलाने की आवश्यकता है ... चाहे वह एक घंटा, एक दिन, सप्ताह, महीना या वर्ष हो, आपके आवेदन पर निर्भर करता है।


28

The Buffer pool size 393215 यह पृष्ठों में बाइट्स नहीं है।

GB में बफ़र पूल का आकार देखने के लिए इसे चलाएं:

SELECT FORMAT(BufferPoolPages*PageSize/POWER(1024,3),2) BufferPoolDataGB FROM
(SELECT variable_value BufferPoolPages FROM information_schema.global_status
WHERE variable_name = 'Innodb_buffer_pool_pages_total') A,
(SELECT variable_value PageSize FROM information_schema.global_status
WHERE variable_name = 'Innodb_page_size') B;

Database pages 360515 यह बफ़र पूल के अंदर डेटा वाले पृष्ठों की संख्या है

GB में बफ़र पूल आकार में डेटा की मात्रा देखने के लिए इसे चलाएं:

SELECT FORMAT(BufferPoolPages*PageSize/POWER(1024,3),2) BufferPoolDataGB FROM
(SELECT variable_value BufferPoolPages FROM information_schema.global_status
WHERE variable_name = 'Innodb_buffer_pool_pages_data') A,
(SELECT variable_value PageSize FROM information_schema.global_status
WHERE variable_name = 'Innodb_page_size') B;

उपयोग में बफ़र पूल का प्रतिशत देखने के लिए, इसे चलाएँ:

SELECT CONCAT(FORMAT(DataPages*100.0/TotalPages,2),' %') BufferPoolDataPercentage FROM
(SELECT variable_value DataPages FROM information_schema.global_status
WHERE variable_name = 'Innodb_buffer_pool_pages_data') A,
(SELECT variable_value TotalPages FROM information_schema.global_status
WHERE variable_name = 'Innodb_buffer_pool_pages_total') B;

Modified db pages 300यह बफ़र पूल में पृष्ठों की संख्या है जिन्हें डेटाबेस में वापस लिखा जाना है। उन्हें गंदे पृष्ठ भी कहा जाता है।

डर्टी पेज द्वारा स्पेस टेकन अप को देखने के लिए इसे चलाएं:

SELECT FORMAT(DirtyPages*PageSize/POWER(1024,3),2) BufferPoolDirtyGB FROM
(SELECT variable_value DirtyPages FROM information_schema.global_status
WHERE variable_name = 'Innodb_buffer_pool_pages_dirty') A,
(SELECT variable_value PageSize FROM information_schema.global_status
WHERE variable_name = 'Innodb_page_size') B;

डर्टी पेज के प्रतिशत को देखने के लिए इसे चलाएं:

SELECT CONCAT(FORMAT(DirtyPages*100.0/TotalPages,2),' %') BufferPoolDirtyPercentage FROM
(SELECT variable_value DirtyPages FROM information_schema.global_status
WHERE variable_name = 'Innodb_buffer_pool_pages_dirty') A,
(SELECT variable_value TotalPages FROM information_schema.global_status
WHERE variable_name = 'Innodb_buffer_pool_pages_total') B;

प्रदर्शन में अन्य चीजों के लिए, इसे चलाएं:

SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool%';

आप बफ़र पूल के लिए सभी स्थिति चर देखेंगे। you आपको जो कुछ भी जांचने की आवश्यकता है, वही क्वेरी लागू कर सकता है।


धन्यवाद! तो इस से, मैं इकट्ठा करता हूं कि हमारे बफर कैश का उपयोग वास्तव में किया जा रहा है, लेकिन जो मैं जानना चाहता हूं अगर हम इसका उपयोग कर रहे हैं। अगर मैं युवा और पुराने पन्नों की अवधारणा को समझता हूं, तो मेरा अनुमान यह होगा कि एक अच्छा संकेतक जो बफर कैश का उपयोग अपने पूर्ण रूप से कर रहा है, वह युवा बने पृष्ठों की संख्या में होगा और युवा पृष्ठों तक पहुंच, सही है? हम हर 3 घंटे में बैकअप करने के लिए mysqldump का उपयोग करते हैं, जो यह बताता है कि यह पूर्ण क्यों है। लेकिन young-making rate 0 / 1000और 0.00 youngs/s, यह बताता है कि हम वास्तव में इसका उपयोग नहीं कर रहे हैं। क्या मेरे द्वारा इसे सही से पढ़ा जा रहा है?
सफ़ादो

2
0/1000 की युवा-निर्माण दर आपको बताती है कि आपके द्वारा चलाए जा रहे प्रश्नों के लिए डेटा पेज न केवल सभी कैश में फिट होते हैं, वे युवा कैश के छोटे (3/8) आकार में फिट होते हैं। यही है, क्वेरीज़ पर्याप्त डेटा का उपयोग नहीं कर रहे हैं ताकि कुछ पेजों को बड़े नॉट-यंग कैश में उम्र हो।
थॉमस जोन्स-लो

शेष innodb_buffer_pool स्थिति चर पर एक संक्षिप्त विवरण बहुत उपयोगी होगा। क्या आप इसे अपने उत्तर में जोड़ सकते हैं
विद्याधर

5

मैं इस आकलन से असहमत हूँ कि "आप 100% हिट दर के साथ एक बफर पूल के लिए पर्याप्त भाग्यशाली हैं"

आउटपुट के शीर्ष पर (जो कटा हुआ है), एक लाइन कुछ इस तरह है:

Per second averages calculated from the last 16 seconds

यह मेरे लिए कहता है कि पिछले 16 सेकंड में कोई रीडिंग नहीं हुई, जिससे (कृत्रिम रूप से) आपको एक पूर्ण '1000/1000' अंक मिला।

0.00 reads/s, 0.00 creates/s, 37.32 writes/s
Buffer pool hit rate 1000 / 1000, young-making rate 0 / 1000 not 0 / 1000

इस बीच कुछ लिख चुके थे। ये संभवत: 'गंदे' पृष्ठों को फ्लश करने या 'परिवर्तन बफर' से अनुक्रमणिका को साफ करने के लिए लिखे गए थे।

संभवतः पिछले 16 सेकंड में युवा / गर्म क्षेत्र में कोई गतिविधि नहीं हुई थी।


ठीक है, हम 6k-10k के बीच औसतन एक दूसरे का चयन करते हैं और उसी समय मैं सर्वर पर लगभग 0 डिस्क रीड गतिविधि देख सकता हूं, इसलिए मुझे नहीं लगता कि यह मामला है
Safado

क्या "क्वेरी कैश" अधिकांश प्रश्नों से संतुष्ट है? SHOW VARIABLES LIKE 'query%';और SHOW GLOBAL STATUS LIKE 'Qc%';और SHOW GLOBAL VARIABLES LIKE 'Com_SELECT';
रिक जेम्स

0

बफर पूल को दो भागों में विभाजित किया गया है, एक युवा सूची और एक नहीं-युवा सूची। बनाने की दर से पता चलता है कि दो सूचियों के बीच बफर पूल में कितने पृष्ठ हैं।

पेज बनाए गए युवा नहीं हैं, युवा पेज बनाए जा रहे हैं (यानी कैश से पढ़े जा रहे हैं। पेज नॉट-यंग बनाए गए पेज युवा सूची से स्थानांतरित किए गए हैं क्योंकि या तो वे बहुत पुराने हैं, या क्योंकि युवा सूची पूर्ण है।

पृष्ठों पर दर दोनों के बीच ले जाया जाता है यह इस बात पर निर्भर करता है कि वर्तमान में युवा पूल के आकार के बफ़र पूल का कितना उपयोग किया जा रहा है। शून्य पर सेट का अर्थ है आपका सक्रिय सेट (आपके द्वारा उपयोग किए जा रहे पृष्ठ) युवा पूल से छोटा है।

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