Eu tenho um banco de dados com a maioria das tabelas sendo armazenadas no mecanismo InnoDB, porém um alerta surgiu outro dia mostrando que o arquivo ibdata1 estava crescendo exponencialmente.
Pelo que pesquisei até agora, não há como redimensionar ou reduzir esse arquivo, em vez de começar de novo e reconstruir todo o banco de dados.
No entanto, li que alguns dos casos em que esse arquivo aumenta muito rápido é quando há várias transações que podem não estar sendo confirmadas com rapidez suficiente para o banco de dados gerenciar o arquivo, mas deixá-lo crescer.
Existe uma maneira de ver o que está dentro desse arquivo para saber o que está ocupando mais espaço?
Além disso, existe uma maneira de colocar um limite neste arquivo para que possamos controlar quando sobe e quando não?
InnoDb ruby é uma ótima ferramenta que faz exatamente o que você deseja.
solucionar problemas
Se você não usar
innodb_file_per_table
isso também pode ser um crescimento normal de dados, então confirme isso primeiro.Se você usar
innodb_file_per_table
, provavelmente é o histórico de desfazer. Você pode confirmar isso executando:Você também pode verificar com innodb ruby:
Este comando fornecerá o número de páginas usadas pelo histórico de desfazer:
Qualquer um deles relatará apenas os dados atuais. A menos que você tenha uma carga alta consistente com muitas transações abertas longas, onde o encadeamento de limpeza não consegue acompanhar, você terá principalmente páginas gratuitas. Pode ser benéfico plotar isso ao longo do tempo para que você tenha uma compreensão do que seu servidor está fazendo.
Fixar
Não é possível reduzir o ibdata. A única coisa que você pode fazer é despejar e restaurar seus dados via mysqldump (ou qualquer outra ferramenta equivalente de sua escolha).
Outras considerações
Desde 5.6.3 também é possível separar seu tablespace undo do arquivo ibdata principal ( https://dev.mysql.com/doc/refman/5.6/en/innodb-undo-tablespace.html ). Pode haver alguma coisa interessante para você.
Na versão 5.7.5 , o parâmetro innodb_max_undo_log_size foi introduzido.