ความเร็วของ MySQL เปรียบเทียบกับรถยนต์
วิธีปรับปรุง /etc/my.cnf เพิ่มความเร็วในการอ่าน Database Mysql
1. ตรวจสอบการตั้งค่าก่อน และหลังปรับปรุง
ก่อนปรับปรุง
- innodb_buffer_pool_size: 4GB
- innodb_flush_log_at_trx_commit : 1 (เขียน Log ทุกครั้ง)
- thread_cache_size: 100
- table_open_cache: 2000
ข้อจำกัด:
- ทำงานช้าเมื่อข้อมูลเยอะ เพราะ Buffer Pool ขนาดเล็ก
- I/O หนักจากการเขียน Log ทุก Transaction
หลังปรับปรุง
- innodb_buffer_pool_size: 12GB
- innodb_flush_log_at_trx_commit: 2 (เขียน Log ลดลง)
- thread_cache_size: 512
- table_open_cache: 4000
ข้อดี:
- ลด I/O และหน่วงเวลาระหว่างการประมวลผล
- รองรับ Connection พร้อมกันมากขึ้น
- เพิ่มความเสถียรและการทำงานของ Query
2. เปรียบเทียบแบบรถยนต์
- ก่อนปรับปรุง: เหมือนรถยนต์เครื่องเล็ก (1.5 ลิตร, ไม่มีเทอร์โบ)
- วิ่งได้บนถนนธรรมดา
- บรรทุกหนัก/ขึ้นทางด่วน ช้าลงและกินน้ำมัน
- หลังปรับปรุง: เหมือนรถยนต์เครื่องใหญ่ (3.0 ลิตร, เทอร์โบ)
- วิ่งเร็ว บรรทุกหนักได้
- ใช้ทรัพยากรดีขึ้น ประสิทธิภาพสูง
3. การวัดผลหลังปรับปรุง
ใช้เครื่องมือ sysbench หรือ mysqlslap เพื่อทดสอบ
ตัวอย่าง Command:
sysbench oltp_read_write --table-size=1000000 --threads=64 --time=60 \ --mysql-db=test --mysql-user=root --mysql-password=yourpassword run
4. Code ตัวอย่าง MySQL Configuration
# ก่อนปรับปรุง innodb_buffer_pool_size=4G innodb_flush_log_at_trx_commit=1 table_open_cache=2000 thread_cache_size=100 sql_mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION # หลังปรับปรุง innodb_buffer_pool_size=12G innodb_flush_log_at_trx_commit=2 table_open_cache=4000 thread_cache_size=512 sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
การปรับปรุง MySQL เปรียบเหมือนอัปเกรดรถให้แรงขึ้น รองรับงานหนักโดยยังประหยัดทรัพยากร! 🚗✨
#banksdollarsine | อัพเดตข้อมูล : 25 ม.ค. 2568 17:09 : 59