Z jakiegoś powodu wszystkie tabele InnoDB na moim serwerze MySQL są wyświetlane jako pofragmentowane, gdy uruchamiam mysqltuner. Serwer zainstalowałem dopiero kilka godzin temu (na OSX Lion) i ma w nim mnóstwo świeżych danych zaimportowanych z plików wsadowych.
Próbowałem przekonwertować wszystkie tabele w jednej bazie danych na MYISAM i na pewno zmniejszyła się liczba pofragmentowanych tabel. Dziwne jednak, gdy tylko przekonwertowałem te tabele z powrotem na InnoDB, fragmentaryczna liczba stolików ponownie wzrosła. Jest to sprzeczne z moimi dotychczasowymi badaniami, które sugerują, że bieganie ALTER TABLE table_name ENGINE=INNODB;
powinno naprawić fragmentację.
Po trochę Googlingu pobiegłem:
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
Który rzekomo zawiera listę wszystkich pofragmentowanych tabel (faktycznie zwraca taką samą liczbę wyników jak wyniki mysqltuner dla liczby pofragmentowanych tabel). Każdy pojedynczy wpis ma dokładnie ten sam numer w data_free_MB
kolumnie (obecnie 7.00000000).
Czy to rzeczywiście prawdziwy problem, czy coś, co mysqltuner robi źle? Jeśli to problem, jak to naprawić?
EDYTOWAĆ
Coraz bardziej podejrzewam, że jestem idiotą i że fragmentacja 7 MB dotyczy całego pliku, a nie każdej tabeli. Czy ktoś może potwierdzić, czy tak by było?
[!!] Total fragmented tables: 2314
co, jestem pewien, wskazuje na problem (z podwójnymi czerwonymi wykrzyknikami)