O arquivo ibdata1
é o espaço de tabela do sistema para a infraestrutura do InnoDB.
Ele contém várias classes de informações vitais para o InnoDB
- Páginas de dados da tabela
- Páginas de índice da tabela
- Dicionário de dados
- Dados de controle do MVCC
- Desfazer espaço
- Segmentos de reversão
- Buffer de gravação dupla (páginas gravadas em segundo plano para evitar o cache do SO)
- Inserir buffer (alterações nos índices secundários)
Observe o lugar de ibdata1 no universo InnoDB (no lado direito)
Você pode separar as páginas de dados e de índice ibdata1
ativando innodb_file_per_table . Isso fará com que qualquer tabela InnoDB recém-criada armazene dados e páginas de índice em um .ibd
arquivo externo .
Exemplo
- datadir é / var / lib / mysql
CREATE TABLE mydb.mytable (...) ENGINE=InnoDB;
cria /var/lib/mysql/mydb/mytable.frm
- innodb_file_per_table ativado, páginas de dados / índice armazenadas em
/var/lib/mysql/mydb/mytable.ibd
- innodb_file_per_table desativado, páginas de dados / índice armazenadas no ibdata1
Não importa onde a tabela do InnoDB esteja armazenada, a funcionalidade do InnoDB exige a procura de metadados da tabela e o armazenamento e recuperação de informações do MVCC para dar suporte à conformidade com ACID e ao isolamento da transação .
Aqui estão meus artigos anteriores sobre a separação de dados e índices de tabela do ibdata1
O QUE FAZER A SEGUIR
Você pode continuar tendo o ibdata1 armazenado tudo, mas isso faz com que os instantâneos do LVM sejam uma verdadeira chatice (minha opinião pessoal).
Você precisa usar a postagem My StackOverflow e reduzir esse arquivo permanentemente.
Por favor, execute esta consulta:
SELECT
((POWER(1024,3)*94 - InnoDBDiskDataAndIndexes))/POWER(1024,3) SpaceToReclaim
FROM
(SELECT SUM(data_length+index_length) InnoDBDiskDataAndIndexes
FROM information_schema.tables WHERE engine='InnoDB') A;
Isso informará quanto espaço desperdiçado pode ser recuperado após a aplicação da Limpeza do InnoDB.