จะมีการแลกเปลี่ยนระหว่างความยืดหยุ่นและประสิทธิภาพเสมอ
ด้วย MySQL บน ext4 อุปสรรค = 1 ค่าเริ่มต้นย่อมทำให้การทำงานช้าลง แต่การกระทำแรกไม่ควรที่จะปิดการใช้งานการทำเจอร์นัลหรือเปิด data = writeback
ก่อนอื่นหากความยืดหยุ่นมีความสำคัญสูง RAID ที่มีแบตเตอรี่สำรองจะคุ้มค่าอย่างแน่นอน
ตัวเลือกการเมานต์ที่ฉันเลือกโดยเฉพาะอย่างยิ่งใน RAID ที่ไม่ใช่แบตเตอรี่สำรองคือ:
/dev/mapper/vg-mysql--data /var/lib/mysql/data ext4 defaults,noatime,nodiratime,barrier=1,data=ordered 0 0
นี่เป็นการจงใจไม่ได้ใช้ data = writeback เพราะฉันไม่ต้องการเสี่ยงต่อความเสียหายของระบบไฟล์ที่เกิดขึ้นใน "ข้อมูลเก่าที่จะปรากฏในไฟล์หลังจากเกิดความผิดพลาดและการกู้คืนเจอร์นัล" (อ้างจากman mount
)
การกำหนดค่าในอุดมคติใน my.cnf สำหรับความยืดหยุ่นเต็มรูปแบบรอบการตั้งค่าที่เกี่ยวข้อง I / O คือ:
[mysqld]
sync_binlog = 1
innodb_flush_log_at_trx_commit = 1
ฉันได้เลือกลำดับของการแลกเปลี่ยนต่อไปนี้เพื่อเพิ่มประสิทธิภาพ:
sync_binlog = 0
: นี่เป็นการกำหนดค่า MySQL ตัวแรกที่ฉันเปลี่ยนไปจากความยืดหยุ่นเต็มที่ เหตุผลของเรื่องนี้คือมันให้การปรับปรุงประสิทธิภาพอย่างมีนัยสำคัญโดยเฉพาะอย่างยิ่งที่binlog_format=row
(น่าเสียดายที่จำเป็นสำหรับจิรา) ฉันใช้แบบจำลอง MySQL เพียงพอในคลัสเตอร์ที่ถ้า binlog จะเสียหายจากสถานการณ์การสูญเสียพลังงานฉันจะทำสำเนาไบนารีจากแบบจำลองอื่น
innodb_flush_log_at_trx_commit = 2
: ในขณะที่จำเป็นต้องใช้ค่า 1 สำหรับการปฏิบัติตามข้อกำหนดของ ACID อย่างเต็มรูปแบบด้วยค่า 2 "บัฟเฟอร์การบันทึกจะถูกเขียนไปยังไฟล์ในแต่ละการกระทำ แต่การดำเนินการ flush to disk ไม่ได้ดำเนินการอย่างไรก็ตามการลบบน ไฟล์บันทึกจะเกิดขึ้นหนึ่งครั้งต่อวินาทีเช่นกันเมื่อค่าเป็น 2 โปรดทราบว่าการล้างข้อมูลครั้งละหนึ่งวินาทีไม่ได้รับประกัน 100% ว่าจะเกิดขึ้นทุกวินาทีเนื่องจากปัญหาการกำหนดเวลาในกระบวนการ " (อ้างจาก MySQL เอกสาร)
data=writeback
การปรับปรุงการติดตั้งตัวเลือกในการใช้งาน โปรดทราบว่าหากนี่เป็นระบบไฟล์รูทของคุณคุณจะต้องผ่านตัวเลือกบรรทัดคำสั่งเคอร์เนล ฉันใส่กันไม่กี่ขั้นตอนในที่ที่coderwall
innodb_flush_method
ทดสอบค่าต่างๆของ O_DIRECT จะแสดงเพื่อปรับปรุงประสิทธิภาพการทำงานในเวิร์กโหลดบางตัว แต่ไม่ได้ระบุว่าสิ่งนี้จะทำงานในสภาพแวดล้อมของคุณ
- อัพเกรดเป็น SSDs ซึ่งในกรณีที่คุณยังจะต้องการที่จะเพิ่ม
innodb_io_capacity
และปรับแต่งการตั้งค่าเช่นinnodb_adaptive_flushing
, innodb_read_io_threads
, innodb_write_io_threads
, innodb_purge_threads
และการตั้งค่าที่เป็นไปได้อื่น ๆ