innodb_flush_method = O_DSYNC बनाम प्रदर्शन, LV3 रिमोट विभाजन के साथ ext3 पर प्रदर्शन प्रभाव


12

मेरे एक उत्पादन वातावरण में, हमारे पास RedHat क्लस्टर पर दो इंस्टेंसेस चल रहे हैं, जिसमें क्लस्टर के साथ एक उत्पादन उदाहरण जुड़ा हुआ है।

हमारे पास 24 जी इनमोडी बफर पूल के साथ 1251 मुख्य मेमोरी है, जो कि उदाहरण 1 और 12 जी द्वारा कब्जा कर लिया गया है। यह 2 रेडहैट क्लस्टर से जुड़ा नहीं है। डेटा और लेन-देन लॉग दोनों LVM डिस्क विभाजन पर एक एक्स 3 फ़ाइल सिस्टम के साथ स्थित हैं।

एक प्रदर्शन को बढ़ावा देने और बेहतर I / O थ्रूपुट के लिए मैंने बदलने innodb_flush_methodका फैसला किया है O_DIRECT

MySQL प्रलेखन के संदर्भ में:

जहाँ एक सराय पर InnoDB डेटा और लॉग फाइलें स्थित हैं, यह पाया गया है कि तीन के एक कारक द्वारा सरल कथनों के प्रदर्शन innodb_flush_methodको कम O_DIRECTकर सकते हैं SELECT

उच्च प्रदर्शन MySQL Ver 2 और 3 का उल्लेख करते हुए, यह कहा गया कि InnoDB डेवलपर्स ने उपयोग के साथ बग पाए innodb_flush_method=O_DSYNCO_SYNCऔर O_DSYNCइसके समान हैं fsync()और fdatasync(): O_SYNCडेटा और मेटाडेटा दोनों को सिंक करता है, जबकि O_DSYNCडेटा को केवल सिंक करता है।

यदि यह सब बिना किसी सलाह के बहुत सारे स्पष्टीकरण की तरह लग रहा है, तो यहां सलाह है:

यदि आप एक यूनिक्स-जैसे ऑपरेटिंग सिस्टम का उपयोग करते हैं और आपके RAID नियंत्रक में बैटरी-समर्थित रिटेक है, तो हम अनुशंसा करते हैं कि आप उपयोग करें O_DIRECT। यदि नहीं, तो या तो डिफ़ॉल्ट या O_DIRECTशायद आपके आवेदन के आधार पर सबसे अच्छा विकल्प होगा।

गुग्लिंग द्वारा, मुझे यह बेंचमार्क रिपोर्ट मिली : O_DSYNCबनामO_DIRECT

बेंच मार्क रिपोर्ट:
===================
1 बी रो कॉम्प्लेक्स ट्रांजेक्शनल टेस्ट, 64 थ्रेड्स

 * सैन O_DIRECT: पढ़ने / लिखने के अनुरोध: 31560140 (8766.61 प्रति सेकंड)।
 * सैन O_DSYNC: अनुरोध पढ़ें / लिखें: 5179457 (प्रति सेकंड 1438.52)।
 * सैन fdatasync: पढ़ने / लिखने के अनुरोध: 9445774 (प्रति सेकंड 2623.66)।
 * स्थानीय-डिस्क O_DIRECT: पढ़ने / लिखने के अनुरोध: 3258595 (905.06 प्रति सेकंड)।
 * स्थानीय-डिस्क O_DSYNC: अनुरोध पढ़ें / लिखें: 3494632 (970.65 प्रति सेकंड।)
 * स्थानीय-डिस्क fdatasync: पढ़ने / लिखने के अनुरोध: 4223757 (1173.04 प्रति सेकंड)।

हालाँकि, O_DIRECTOS स्तर कैश अक्षम करता है, जहाँ डबल कैशिंग अक्षम किया जा सकता है जो कुछ बेहतर I / O थ्रूपुट दिखाते हैं।

क्या इसके O_DIRECTबजाय साथ जाना अच्छा है O_DSYNC? ये दो विकल्प थोड़े भ्रमित करने वाले हैं। कौन सा विकल्प कुछ बेहतर I / O थ्रूपुट दिखा सकता है और प्रदर्शन में वृद्धि के बिना डेटा पर प्रभाव पढ़ सकता है, विशेष रूप से उत्पादन में पढ़ता / लिखता है? आपके व्यक्तिगत अनुभव के आधार पर कोई बेहतर सुझाव?

मैं पोस्ट में रोलैंडो अपडेट देख सकता था :

फिर भी इन दोनों मापदंडों पर थोड़ा भ्रम है। जहाँ मैं अधिकांश उत्पादन विन्यास टेम्प्लेट का उपयोग करके देख सकता था O_DIRECT, वहाँ मैंने कोई सिफारिश नहीं देखी O_DSYNC

प्रणाली

  • MySQL 5.1.51-एंटरप्राइज़-जीपीएल-प्रो-लॉग
  • Red Hat Enterprise Linux सर्वर रिलीज़ 5.5
  • छापे नियंत्रक के साथ डीआईएल डीआरएसी जिसमें बैटरी बैक कैश 512MB है
  • डेल पीईआरसी एक बैटरी बैक-अप यूनिट (बीबीयू) के साथ H700 को नियंत्रित करता है।

अतिरिक्त जानकारी

mysql> 'innodb_thread_concurrency' जैसे वैरिएबल दिखाएं; 

+ --------------------------- + ------- +
| चर_नाम | मान |
+ --------------------------- + ------- + 
| innodb_thread_concurrency | 96 |
+ --------------------------- + ------- + 
1 पंक्ति में सेट (0.00 सेकंड) 

mysql> 'innodb_read_io_threads' जैसे चर दिखाते हैं; 
खाली सेट (0.00 सेकंड) 

mysql> 'innodb_write_io_threads' जैसे चर दिखाएं; 
खाली सेट (0.00 सेकंड)

हम डिफ़ॉल्ट प्लगइन का उपयोग कर रहे हैं, इसलिए मैंने InnoDB स्थिति से जानकारी पोस्ट की है:

mysql> चयन करें * प्लग इन से जहां PLUGIN_NAME '% innodb%' और PLUGIN_TYPE 'STORAGE इंजन' \ G को पसंद करता है
************************** 1. पंक्ति ********************* *******
           PLUGIN_NAME: InnoDB
        PLUGIN_VERSION: 1.0
         PLUGIN_STATUS: सक्रिय करें
           PLUGIN_TYPE: भंडारण इंजन
   PLUGIN_TYPE_VERSION: 50151.0
        PLUGIN_LIBRARY: NULL
PLUGIN_LIBRARY_VERSION: NULL
         PLUGIN_AUTHOR: Innobase ओए
    PLUGIN_DESCRIPTION: लेनदेन, पंक्ति-स्तरीय लॉकिंग और विदेशी कुंजियों का समर्थन करता है
        PLUGIN_LICENSE: GPL
1 पंक्ति में सेट (0.00 सेकंड)

जवाबों:


7

21 जनवरी 2009 को वापस, पीटर ज़ैतसेव ने mysqlperformanceblog.com पर निम्नलिखित बातें कही

कार्रवाई के लिए कॉल के रूप में - मैं निश्चित रूप से किसी को यह देखना चाहूंगा कि क्या इस संबंध में EXT3 को ठीक किया जा सकता है क्योंकि यह लिनक्स के लिए अब तक की सबसे आम फाइल प्रणाली है। यह जांचने योग्य भी है कि क्या MySQL की तरफ से कुछ किया जा सकता है - O_DSYNCक्या झंडे के साथ बिनलॉग को खोला जा सकता है अगर sync_binlog=1इसके बजाय fsync का उपयोग करने में मदद मिलेगी? या बिनलॉग हो सकता है पूर्व-आवंटन अच्छा समाधान होगा।

अभी तक, मुझे पता है कि किसी ने भी इस मुद्दे को नहीं छुआ है। O_DSYNCएक डिफ़ॉल्ट के रूप में एक आकर्षक संभावना नहीं है, लेकिन तेजी से लिखता है कि वास्तव में सत्यापित नहीं हैं समायोजित करता है। यही कारण है कि चारों ओर बहुत प्रचार है O_DIRECT

मैं आपको बता सकता हूं कि आपके पास InnoDB प्लगइन स्थापित नहीं है। InnoDB प्लगइन के साथ, कई चर मौजूद होने चाहिए।

आपको InnoDB को दो तरीकों में से एक में अपग्रेड करना चाहिए:

एक बार जब आप ऐसा कर लेते हैं, तो आप InnoDB को बढ़ा सकते हैं

  • अधिक सीपीयू और कोर का उपयोग करें
  • बढ़ाएँ पढ़ने और लिखने मैं / हे धागे
  • पैमाने I / O क्षमता (यह विशेष रूप से विभिन्न भंडारण मीडिया के लिए आवश्यक है)

यहाँ सेटिंग्स पर मेरे पिछले पोस्ट हैं जिन्हें आप इसके लिए बदल सकते हैं:


1

मैं हमेशा इस धारणा के तहत था कि O_DIRECTप्रदर्शन के लिए बेहतर है क्योंकि यह डबल बफरिंग को रोकता है। इसके अलावा, बशर्ते आपके पास बैटरी-समर्थित राइट कैश के साथ हार्डवेयर RAID हो। बेशक, यह कार्यभार पर भी निर्भर करता है, चाहे आप READ हों या भारी।

इसके अलावा, विशेषज्ञों के लिए सवाल: समग्र प्रदर्शन में ध्यान देने योग्य गिरावट के fsync()लिए अतिरिक्त कॉल करें O_DIRECT, या क्या यह नगण्य है? मुझे अभी तक बेंचमार्क यह दिखाना नहीं है।

इसके अलावा, ध्यान दें कि पेरकोना ने सेट करने की क्षमता को सक्षम किया है innodb_flush_method=ALL_O_DIRECT, जो न केवल InnoDB डेटा फ़ाइलों पर प्रत्यक्ष I / O प्रदान करता है, बल्कि एक ही समय में InnoDB लेनदेन लॉग पर भी प्रदान करता है।


2
2012 के बफ़र पूल में विशाल रैम के लिए अच्छी तरह से पैमाने नहीं थे, इसलिए उल्लेख किया गया कि डबल बफ़रिंग उन मामलों के लिए अच्छा हो सकता है जब ओएस कैश इन्सोडब बफर पूल की तुलना में बहुत बड़ा है। 5.6 और इसके बाद के संस्करण के लिए - मैं कहता हूं कि आपका उत्तर पूरी तरह से मान्य है।
noonex
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.