O que são tabelas fragmentadas?
Se houver inserções aleatórias em ou exclusões dos índices de uma tabela, os índices podem se tornar fragmentados.
A fragmentação significa que a ordem física das páginas de índice no disco não está próxima a ordem do índice dos registros nas páginas ou que há muitas páginas sem uso no bloco de 64 páginas que foram alocados para o índice.
Os sintomas de tabelas fragmentadas pode ser que a tabela pode ter mais espaço em disco do que o necessário ou os resultados pode retornar mais lento, com mais de disco I/O do que o necessário. Usuários INNODB precisa verificar a fragmentação muitas vezes, porque quando as marcas INNODB dados como excluído, ele nunca substitui os blocos com novos dados. Ele só os marca como inutilizável. Como resultado, o tamanho dos dados é artificialmente e recuperação de dados é retardado.
A fragmentação significa que a ordem física das páginas de índice no disco não está próxima a ordem do índice dos registros nas páginas ou que há muitas páginas sem uso no bloco de 64 páginas que foram alocados para o índice.
Os sintomas de tabelas fragmentadas pode ser que a tabela pode ter mais espaço em disco do que o necessário ou os resultados pode retornar mais lento, com mais de disco I/O do que o necessário. Usuários INNODB precisa verificar a fragmentação muitas vezes, porque quando as marcas INNODB dados como excluído, ele nunca substitui os blocos com novos dados. Ele só os marca como inutilizável. Como resultado, o tamanho dos dados é artificialmente e recuperação de dados é retardado.
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
É importante lembrar que quando de-fragmentam uma tabela, o processo irá bloquear a tabela, por isso certifique-se de que você pode fazer esse bloqueio.
Nenhum comentário:
Postar um comentário