वहाँ हमेशा के लिए एक व्यापार होने जा रहा है लचीलापन और प्रदर्शन के बीच।
MySQL ext4 पर बाधाओं के साथ = 1 डिफ़ॉल्ट वास्तव में एक धीमी गति से नीचे का कारण बनता है, हालांकि पहली कार्रवाई जर्नलिंग को अक्षम करने या डेटा = राइटबैक चालू करने के लिए नहीं होनी चाहिए।
सबसे पहले, यदि लचीलापन उच्च महत्व का है, तो एक बैटरी समर्थित RAID निश्चित रूप से इसके लायक है।
मेरे द्वारा चुने गए माउंट विकल्प, विशेष रूप से गैर-बैटरी समर्थित RAID हैं:
/dev/mapper/vg-mysql--data /var/lib/mysql/data ext4 defaults,noatime,nodiratime,barrier=1,data=ordered 0 0
यह जानबूझकर डेटा = राइटबैक का उपयोग नहीं कर रहा है, क्योंकि मैं फाइलसिस्टम भ्रष्टाचार का जोखिम नहीं उठाना चाहता हूं, जिसके परिणामस्वरूप "पुराने डेटा क्रैश और जर्नल रिकवरी के बाद फाइलों में दिखाई देते हैं" (उद्धरण है man mount
)।
I / O संबंधित सेटिंग्स के चारों ओर पूर्ण लचीलापन के लिए my.cnf में आदर्श कॉन्फ़िगरेशन हैं:
[mysqld]
sync_binlog = 1
innodb_flush_log_at_trx_commit = 1
मैंने प्रदर्शन बढ़ाने के लिए व्यापार-नापसंद के निम्नलिखित अनुक्रम का विकल्प चुना है:
sync_binlog = 0
: यह पहला MySQL कॉन्फिगरेशन है जिसे मैं पूरी रीसेंसी से दूर करता हूं। इसका कारण यह है कि यह एक महत्वपूर्ण प्रदर्शन में सुधार देता है, खासकर जहां binlog_format=row
(दुर्भाग्य से जीरा के लिए आवश्यक)। मैं क्लस्टर में पर्याप्त MySQL प्रतिकृतियां का उपयोग कर रहा हूं कि यदि बिनलॉग को एक बिजली हानि परिदृश्य से दूषित हो गया तो मैं दूसरी प्रतिकृति से एक द्विआधारी प्रतिलिपि बनाऊंगा।
innodb_flush_log_at_trx_commit = 2
: जबकि पूर्ण ACID अनुपालन के लिए 1 का मान आवश्यक है, 2 के मान के साथ "लॉग बफर प्रत्येक कमेटी में फाइल के लिए लिखा जाता है, लेकिन इस पर फ्लश टू डिस्क ऑपरेशन नहीं किया जाता है। हालांकि, फ्लश पर। लॉग फाइल प्रति सेकंड एक बार भी होती है जब मूल्य 2 होता है। ध्यान दें कि प्रक्रिया शेड्यूलिंग मुद्दों के कारण प्रति सेकंड फ्लशिंग एक बार प्रति सेकंड होने की 100% गारंटी नहीं है। " (MySQL डॉक्स से उद्धरण)
- उपयोग करने के लिए माउंट विकल्पों को अपडेट करें
data=writeback
। ध्यान दें कि यदि यह आपका रूट फाइल सिस्टम है, तो आपको कर्नेल कमांड लाइन विकल्प भी पास करना होगा। मैंने उस पर कोडरवल में कुछ कदम एक साथ रखे ।
- के विभिन्न मूल्यों का परीक्षण करें
innodb_flush_method
। O_DIRECT को कुछ वर्कलोड में प्रदर्शन में सुधार करने के लिए दिखाया गया है, लेकिन यह एक ऐसा नहीं है कि यह आपके वातावरण में काम करेगा।
- SSDs में अपग्रेड करें, जिस स्थिति में आप भी वृद्धि करना चाहते हैं
innodb_io_capacity
सेटिंग्स जैसे, और धुन innodb_adaptive_flushing
, innodb_read_io_threads
, innodb_write_io_threads
, innodb_purge_threads
, और अन्य संभावित सेटिंग्स।