Eu configurei o servidor mysql com innodb per table
. Havia uma tabela watchdog
com aproximadamente 19 GB de watchdog.ibd
arquivo.
Eu trunquei a tabela agora ela tem registro zero. Mas watchdog.ibd
têm o mesmo tamanho.
Qual é o problema.? Não truncate
funciona para remover os dados do arquivo .ibd..?
Não quero largar a mesa porque preciso dessa mesa.
Lembre-se de que
TRUNCATE TABLE
é um comando DDL que informa ao mecanismo de armazenamento InnoDB para fingir que não há registros.De acordo com a documentação do MySQL em TRUNCATE TABLE :
No entanto, fazer
TRUNCATE TABLE
nada afeta o espaço já alocado.Para reduzir rapidamente o espaço para zero linhas, você pode fazer o seguinte:
Como
TRUNCATE TABLE
diz ao mysql que a tabela é considerada vazia, você pode fazer isso:Essas duas etapas se comportam da mesma maneira que
Algorithm 1
.Essas etapas também podem ser feitas com
Internamente, OPTIMIZE TABLE executaria
Algorithm 1
e depois executaria ANALYZE TABLE . Para InnoDB, aANALYZE TABLE
fase deOPTIMIZE TABLE
é ignorada. Na verdade, é desnecessário porque as estatísticas do índice são recalculadas em cada consulta executada em uma tabela InnoDB .O espaço normalmente não é removido dos arquivos InnoDB
Para recuperar espaço, você deve OPTIMIZE TABLE , que cria tabelas/arquivos temporários e os alterna. Ou então forçar este processo através de outra operação usando uma tabela temporária/
DROP
+CREATE
/CREATE TABLE..LIKE
etc