MySQL InnoDB page_cleaner सेटिंग्स इष्टतम नहीं हो सकती हैं


17

इस नोट को mysqld.log में देखें:

[Note] InnoDB: page_cleaner: 1000ms intended loop took 15888ms. The settings might not be optimal. (flushed=200 and evicted=0, during the time.)

यहाँ कुछ इस तरह का उल्लेख प्रतीत होता है: MySQL उदाहरण "SYNC सूचकांक कर रहा है"

मेरा सवाल यह है: इस नोट को लॉग में देखा जाए तो क्या कार्रवाई की जानी चाहिए?

MySQL और OS संस्करण:
mysql-community-server- 5.7.9 -1.el7.x86_64 सेंटोस
-रिलीज़-7-1.1503.el7.centos.2.8.x86_64

SHOW VARIABLES चल रहा है 'निर्दोष%'; सुझाए गए शो के अनुसार:

innodb_page_cleaners | 1

जवाबों:


11

MySQL 5.7.8 में innodb_page_cleaners डिफ़ॉल्ट मान 1 से 4 में बदल दिया गया था। यदि पृष्ठ क्लीनर थ्रेड्स की संख्या बफ़र पूल इंस्टेंस की संख्या से अधिक है, तो innodb_page_cleaners स्वतः ही innodb_buffer_pool_instances के समान मान पर सेट है

Innodb_buffer_pool_instances साथ जांचें:

mysql> SHOW GLOBAL VARIABLES LIKE 'innodb_buffer_pool_instances'

आप केवल innodb_page_cleanersउच्च के रूप में सेट कर सकते हैं innodb_buffer_pool_instances। अगर आप चाहते हैं innodb_page_cleaners=4तो आपको भी चाहिए innodb_buffer_pool_instances=4


2
अच्छी तरह से मैं दोनों innodb_buffer_pool_instances और innodb_page_cleaners 8 पर सेट है और मुझे कभी-कभी चेतावनी दिखाई देती है। इसके सिर्फ एक धारीदार डेस्कटॉप क्लास कताई डिस्क के दौरान भारी आई / ओ ऑप्स जैसे ऑप्टिमाइज़ टेबल और इसी तरह, मेरा अनुमान है कि यह सिर्फ mysql के सूक्ष्म तरीके से आपको बता रहा है कि आपके डिस्क बहुत धीमे हैं;)
अलेक्जेंडर इवानसेविले

5

हमने विभिन्न ग्राहकों में समान समस्या का अनुभव किया और पाया कि यह समस्या 1024 के डिफ़ॉल्ट से innodb_lru_scan_depth के मान को 128 के रूप में निम्न पर सेट करने के कारण थी। हालांकि मूल्य को कम करने से लेन-देन में विशेष रूप से बाध्य वर्कलोड को संसाधित करने में लगने वाला समय कम हो जाता है मेरा मानना ​​है कि बहुत कम मान सेट करने से बफर पूल अपने कुछ बफ़र्स और बफर पूल के गंदे पन्नों को साफ़ करने में असमर्थ हो जाएगा।

हमारे मामले में हमने मान को 128 से 256 तक बढ़ाकर एक व्यापक सुधार देखा है, लेकिन आम तौर पर सही मूल्य हार्डवेयर और लोड के प्रकार पर निर्भर करता है। चाल OLTP प्रदर्शन को बढ़ाने और MySQL को बफर पूल को साफ रखने के बीच सही मान खोजने के लिए है ताकि पेज_क्लीनर को बहुत अधिक काम करने की आवश्यकता न हो , जैसा कि उपरोक्त संदेश द्वारा कहा गया है ( "InnoDB: page -cleaner: 1000ms इच्छित लूप) 15888ms लिया " )।

मूल्य MySQL, उदाहरण के लिए पुनरारंभ किए बिना गतिशील रूप से बदला जा सकता है

SET GLOBAL innodb_lru_scan_depth=256;

1
अगर मैं MySQL innodb_lru_scan_depth को पुनः आरंभ करता हूं तो 1024 पर वापस आ जाता है ताकि इसे स्थायी रूप से कैसे बदला जा सके?
करीम समीर

@KarimSamir innodb_lru_scan_depth = 256अपने my.cnfलोड पथ में कहीं जोड़ें ।
क्वेंटिन स्कूसन

0

यह StackOverflow धागा उपयोगी हो सकता है ...

/programming/41134785/how-to-solve-mysql-warning-innodb-page-cleaner-1000ms-intended-loop-took-xxx

इसका मूल रूप से मतलब है, आपका DB बहुत अधिक लिख रहा है, जिससे बफ़रपूल गंदे मूल्यों से भर जाता है। यह पेजक्लीनर को कार्य करने और गंदे पृष्ठों को साफ़ करने के लिए ट्रिगर करता है । चूँकि सामान्य से बहुत अधिक गंदे पृष्ठ थे, इसलिए पेज क्लीन्ज़र को बफर साफ़ करने में अधिक समय लगा ।

innodb_lru_scan_depthविशेष चर नियंत्रित करता है कि क्लियरिंग के लिए बफ़र पूल स्कैनिंग कितनी होनी चाहिए। यह या तो एक बड़ा मूल्य हो सकता है या सिस्टम का थ्रूपुट लिख सकता है वास्तव में बड़ी संख्या में गंदे पृष्ठ हैं।

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