मुझे कुछ समर्पित MySQL सर्वरों के साथ प्रस्तुत किया गया है जो कभी भी एक से अधिक कोर का उपयोग नहीं करते हैं। मैं MySQL के लिए DBA से अधिक डेवलपर हूं इसलिए कुछ मदद चाहिए
सेट अप
OLAP / DataWarehouse (DW) प्रकार के लोड के साथ सर्वर काफी भारी हैं:
- प्राथमिक: 96GB RAM, 8 कोर + सिंगल RAID 10 सरणी
- टेस्ट: 4 कोर के साथ 32 जीबी रैम
- सबसे बड़ी DB 540 GB है, कुल लगभग 1.1TB है और ज्यादातर InnoDB टेबल है
- सोलारिस 10 इंटेल -64
- MySQL 5.5.x
नोट: सबसे बड़ी DB OLTP DR सर्वर से एक प्रतिकृति है और DW को इससे लोड किया गया है। यह पूर्ण डीडब्ल्यू नहीं है: पिछले 6 महीने से 6 सप्ताह तक तो यह ओएलटीपी डीबी से छोटा है।
एक परीक्षण सर्वर पर अवलोकन
- 3 अलग कनेक्शन
- प्रत्येक में एक समवर्ती (और अलग) है
ALTER TABLE...DROP KEY...ADD INDEX
- 3 तालिकाओं में 2.5, 3.8 और 4.5 मिलियन पंक्तियाँ हैं
- सीपीयू का उपयोग 25% तक हो जाता है (एक कोर अधिकतम हो जाता है) और इससे अधिक नहीं
- 3 ALTERs को 12-25 मिनट लगते हैं (सबसे छोटा 4.5 पर एक एकल)
प्रशन
- एक से अधिक कोर का उपयोग करने की अनुमति देने के लिए किस सेटिंग या पैच की आवश्यकता होती है?
यही कारण है, MySQL उपलब्ध सभी कोर का उपयोग क्यों नहीं करता है? (अन्य RDBMS की तरह) - क्या यह प्रतिकृति का परिणाम है?
अन्य नोट
- मैं RDBMS "थ्रेड" और OS "थ्रेड" के बीच का अंतर समझता हूं
- मैं समानता के किसी भी रूप के बारे में नहीं पूछ रहा हूं
- InnoDB और थ्रेड्स के लिए कुछ सिस्टम चर उप-इष्टतम हैं
(त्वरित जीत की तलाश में) - लघु अवधि, मैं डिस्क लेआउट को बदलने में असमर्थ हूं
- जरूरत पड़ने पर ओएस को घुमाया जा सकता है
- छोटी मेज पर एक एकल तालिका में 4.5 मिनट लगते हैं (चौंकाने वाला IMO)
संपादित करें 1
- innodb_thread_concurrency दोनों पर 8 पर सेट है। हां, यह गलत है लेकिन MySQL को कई कोर का उपयोग नहीं करेगा
- innodb_buffer_pool_size प्राथमिक पर 80GB है, एक परीक्षण पर 10GB (एक और उदाहरण बंद है)। यह अभी के लिए ठीक है।
- innodb_file_per_table = ON
संपादित करें 2
- innodb_flush_log_at_trx_commit = 2
- innodb_use_sys_malloc = ON
- innodb_flush_method O_DIRECT होना चाहिए (लेकिन SHOW VARIABLES यह नहीं दिखाता है)
- innodb_doublewrite = OFF
- फ़ाइल सिस्टम = ZFS (और मेरे sysadmin ने यह पाया: http://blogs.oracle.com/realneel/entry/mysql_innodb_zfs_best_practices )
परीक्षा करना
- innodb_flush_method O_DIRECT के रूप में नहीं दिखाया जा रहा है जब यह होना चाहिए
- RolandoMySQLDBA की सेटिंग्स का पालन करेंगे
मुझे पता है कि क्या मैंने कुछ महत्वपूर्ण याद किया है
चियर्स
अपडेट करें
RolandoMySQLDBA के उत्तर में innodb_flush_method + 3 x थ्रेड सेटिंग्स बदली गईं
:> परीक्षणों के लिए उपयोग किए गए 1 कोर = सकारात्मक परिणाम
\G
। इसके अलावा, मुझे लगता SHOW INNODB STATUS
है कि SHOW ENGINE INNODB STATUS
5.5 के पक्ष में पदावनत किया गया है (मुझे कमांड-लाइन में पूर्व को चलाने में त्रुटि मिलती है।