วิธีเปลี่ยน innodb_log_file_size เพื่อลดปัญหา freeing items
ผมเคยเจอปัญหา updating / freeing items ขึ้นใน table innodb ตอนแรกก็ไม่เอะใจนึกว่าเป็นที่ innodb แต่พอหลังๆกาง updating / freeing items นั้นเกิดขึ้นบ่อยแล้ว แล้วกินเวลา 2-3 วินาทีตลอด เลยทำให้ส่งสัยแล้วหาวิธีแก้ พอไปอ่านมามีคนบอกใน Stackoverflow ว่าให้ลองเปลี่ยน innodb_log_file_size สรุปหายครับ ! ผมเลยเอาวิธีเปลี่ยนมาบอกกับเพื่อนกันครับ
- ทำการ Backup Table ที่เป็น Innodb ครับแล้ว drop table ทิ้งไปหรือไม่ก็เปลี่ยนเป็น MyIsam ก่อน
- Stop MySQL
- เข้าไปแก้ไข my.cnf ครับโดยผมมีตัวอย่างเป็นแบบนี้ครับ
innodb_data_file_path = ibdata1:128M;ibdata2:10M:autoextend
innodb_log_file_size = 512M #64G_RAM+ = 768, 24G_RAM+ = 512, 8G_RAM+ = 256, 2G_RAM+ = 128
innodb_log_files_in_group = 4 #combined size of all logs <4GB. <2G_RAM = 2, >2G_RAM = 4 - เข้า SSH ไปที่ /var/lib/mysql/ (centos) จะเห็นไฟล์ที่ขึ้นต้นด้วย ib_logfile , ibdata ให้ backup ไว้ก่อนแล้วลบออกจาก directory นั้นทั้งหมด
- Start MySQL ถ้าทำถูกมันจะสามารถ start ได้ครับ
- เสร็จแล้ว import ข้อมูลกลับเข้ามาครับ หรือถ้าใครเปลี่ยนเป็น myisam ไว้ก็เปลี่ยนเป็น innodb ครับเป็นอันเสร็จ
จากประสบการณ์ตรงนั้นการเปลี่ยน innodb_log_file_size จาก default นั้นทำให้ปัญหา freeing items , updating , inserting หมดไปใน table ขนาด 13GB ครับผม
ปล. ผมปรับ innodb_flush_log_at_trx_commit = 0 แทน 2 ด้วยครับ
