Ce sunt tabelele fragmentate?
Dacă există inserții sau ștergeți date aleatoare, indicii pot deveni fragmentați.
Fragmentarea înseamnă că ordonarea fizică a paginilor indexate de pe disc nu este aproape de ordonarea index al înregistrărilor de pe pagini sau că există multe pagini neutilizate din blocurile de pagini care au fost alocate la index.
Simptomele de tabele fragmentate pot fi : tabelă care poate ocupa mai mult spațiu pe disc decât este necesar sau rezultatele pot mai lente din cauza altului consum de disc I/O.
Utilizatorii InnoDB trbuie sa verifice fragmentarea de multe ori ,ca atunci când mărcile InnoDB de date ca șterse ele nu sunt suprascrie cu date noi. Ea doar le marchează ca inutilizabile. Ca urmare, dimensiunea datelor e umflata artificial și recuperare de date este încetinită.
SELECT
TABLE_SCHEMA, TABLE_NAME, CONCAT(ROUND(data_length / ( 1024 * 1024 ), 2), 'MB') DATA,
CONCAT(ROUND(data_free / ( 1024 * 1024 ), 2), 'MB')FREE
from information_schema.TABLES
where TABLE_SCHEMA
NOT IN ('information_schema','mysql') and Data_free < 0;
#!/bin/bash
MYSQL_LOGIN='-u<user name> --password=<passowrd>'
for db in $(echo "SHOW DATABASES;" | mysql $MYSQL_LOGIN | grep -v -e "Database" -e "information_schema")
do
TABLES=$(echo "USE $db; SHOW TABLES;" | mysql $MYSQL_LOGIN | grep -v Tables_in_)
echo "Switching to database $db"
for table in $TABLES
do
echo -n " * Optimizing table $table ... "
echo "USE $db; OPTIMIZE TABLE $table" | mysql $MYSQL_LOGIN >/dev/null
echo "done."
done
done