ความเร็วของ 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