วิธีเปลี่ยน innodb_log_file_size เพื่อลดปัญหา freeing items

ผมเคยเจอปัญหา updating / freeing items ขึ้นใน table innodb ตอนแรกก็ไม่เอะใจนึกว่าเป็นที่ innodb แต่พอหลังๆกาง updating / freeing items นั้นเกิดขึ้นบ่อยแล้ว แล้วกินเวลา 2–3 วินาทีตลอด เลยทำให้ส่งสัยแล้วหาวิธีแก้ พอไปอ่านมามีคนบอกใน Stackoverflow ว่าให้ลองเปลี่ยน innodb_log_file_size สรุปหายครับ ! ผมเลยเอาวิธีเปลี่ยนมาบอกกับเพื่อนกันครับ

  1. ทำการ Backup Table ที่เป็น Innodb ครับแล้ว drop table ทิ้งไปหรือไม่ก็เปลี่ยนเป็น MyIsam ก่อน
  2. Stop MySQL
  3. เข้าไปแก้ไข 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
  4. เข้า SSH ไปที่ /var/lib/mysql/ (centos) จะเห็นไฟล์ที่ขึ้นต้นด้วย ib_logfile , ibdata ให้ backup ไว้ก่อนแล้วลบออกจาก directory นั้นทั้งหมด
  5. Start MySQL ถ้าทำถูกมันจะสามารถ start ได้ครับ
  6. เสร็จแล้ว import ข้อมูลกลับเข้ามาครับ หรือถ้าใครเปลี่ยนเป็น myisam ไว้ก็เปลี่ยนเป็น innodb ครับเป็นอันเสร็จ

จากประสบการณ์ตรงนั้นการเปลี่ยน innodb_log_file_size จาก default นั้นทำให้ปัญหา freeing items , updating , inserting หมดไปใน table ขนาด 13GB ครับผม

ปล. ผมปรับ innodb_flush_log_at_trx_commit = 0 แทน 2 ด้วยครับ


Originally published at dominixz.com.

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.