ด้วยเหตุผลบางอย่างตาราง InnoDB ทั้งหมดในเซิร์ฟเวอร์ MySQL ของฉันจะแสดงรายการแยกส่วนเมื่อฉันเรียกใช้ mysqltuner ฉันติดตั้งเซิร์ฟเวอร์เมื่อไม่กี่ชั่วโมงที่ผ่านมา (บน OSX Lion) และมีข้อมูลใหม่มากมายที่นำเข้าจากไฟล์แบตช์ในนั้น
ฉันพยายามแปลงตารางทั้งหมดในฐานข้อมูลเดียวเป็น MYISAM และจำนวนตารางที่กระจัดกระจายก็ลดลง แม้ว่าจะแปลกใจทันทีที่ฉันแปลงตารางเหล่านั้นกลับไปที่ InnoDB จำนวนตารางที่กระจัดกระจายก็ถูกยิงกลับมาอีกครั้ง นี่เป็นสิ่งที่ตรงกันข้ามกับงานวิจัยของฉันซึ่งแนะนำว่าการวิ่งALTER TABLE table_name ENGINE=INNODB;
ควรแก้ไขการกระจายตัว
หลังจาก Googling นิดหน่อยฉันก็วิ่งไป:
SELECT table_schema, table_name, data_free/1024/1024 AS data_free_MB
FROM information_schema.tables
WHERE engine LIKE 'InnoDB' AND data_free > 0
ซึ่งควรจะแสดงรายการตารางการแยกส่วนทั้งหมด (มันจะกลับจำนวนผลลัพธ์ที่แน่นอนเช่นเดียวกับ mysqltuner ผลลัพธ์สำหรับการนับตารางการแยกส่วน) ทุกรายการเดียวมีจำนวนเท่ากันในdata_free_MB
คอลัมน์ (ปัจจุบัน 7.00000000)
นี่เป็นปัญหาจริงหรือสิ่งที่ mysqltuner ทำผิดหรือเปล่า? หากเป็นปัญหาฉันจะแก้ไขได้อย่างไร
แก้ไข
ฉันสงสัยมากขึ้นเรื่อย ๆ ว่าฉันเป็นคนงี่เง่าและการแตกแฟรกเมนต์ขนาด 7MB สำหรับไฟล์ทั้งหมดไม่ใช่สำหรับแต่ละตาราง ทุกคนสามารถยืนยันได้หรือไม่ว่าเป็นเช่นนั้น
[!!] Total fragmented tables: 2314
ซึ่งผมค่อนข้างมั่นใจว่าระบุว่าเป็นปัญหา (มีคู่เครื่องหมายอัศเจรีย์สีแดง)