Vì một số lý do, tất cả các bảng InnoDB trong máy chủ MySQL của tôi đang được liệt kê dưới dạng phân mảnh khi tôi chạy mysqltuner. Tôi chỉ cài đặt máy chủ vài giờ trước (trên OSX Lion) và nó có một loạt dữ liệu mới được nhập từ các tệp bó trong đó.
Tôi đã thử chuyển đổi tất cả các bảng trong một cơ sở dữ liệu sang MYISAM và chắc chắn số lượng các bảng bị phân mảnh đã giảm. Thật kỳ lạ, ngay sau khi tôi chuyển đổi các bảng đó trở lại InnoDB, số lượng bảng bị phân mảnh lại tăng trở lại. Điều này trái với nghiên cứu của tôi cho đến nay cho thấy rằng việc chạy ALTER TABLE table_name ENGINE=INNODB;
nên khắc phục sự phân mảnh.
Sau một chút googling tôi chạy:
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
Mà được cho là liệt kê tất cả các bảng bị phân mảnh (nó thực sự trả về cùng số lượng kết quả như đầu ra mysqltuner cho số lượng bảng bị phân mảnh). Mỗi mục nhập có chính xác cùng một số trong data_free_MB
cột (hiện tại là 7.00000000).
Đây thực sự là một vấn đề thực sự hay một cái gì đó mysqltuner đang làm sai? Nếu nó là một vấn đề, làm thế nào để tôi sửa chữa nó?
BIÊN TẬP
Tôi càng ngày càng nghi ngờ rằng tôi là một thằng ngốc và phân mảnh 7 MB là cho toàn bộ tệp, không phải cho mỗi bảng. Bất cứ ai có thể xác nhận nếu đó là trường hợp?
[!!] Total fragmented tables: 2314
, mà tôi khá chắc chắn chỉ ra một vấn đề (với dấu chấm than màu đỏ kép)