O arquivo ibdata1
é o espaço de tabela do sistema para a infra-estrutura do InnoDB.
Ele contém várias classes de informações vitais para o InnoDB
- Páginas de dados de tabela
- Índice de páginas de tabela
- Dicionário de dados
- Dados de controle do MVCC
- Desfazer espaço
- Rollback Segments
- Buffer de gravação dupla (páginas gravadas no plano de fundo para evitar o cache do sistema operacional)
- Inserir buffer (alterações nos índices secundários)
Por favor, note o lugar de ibdata1 no Universo InnoDB (no lado direito)
Vocêpodeseparardadosepáginasdeíndicedeibdata1
ativando.ibd
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, Data / Index Pages armazenadas em ibdata1
- innodb_file_per_table ativado, páginas de dados / índice armazenadas em
Não importa onde a tabela InnoDB esteja armazenada, a funcionalidade do InnoDB requer a procura de metadados da tabela, o armazenamento e a recuperação MVCC informações para apoiar conformidade com o ACID e Transaction Isolation .
Aqui estão meus artigos anteriores sobre a separação de dados e índices de tabelas do ibdata1
-
Oct 29, 2010
: Minha postagem original no StackOverflow -
Nov 26, 2011
: ERRO 1114 (HY000) na linha 6308 no arquivo & A tabela user_analysis está cheia -
Feb 03, 2012
: Otimização programada de tabelas no MySQL InnoDB -
Mar 25, 2012
: Por que a loja InnoDB todos os bancos de dados em um arquivo? -
Apr 01, 2012
: O innodb_file_per_table é aconselhável?
O QUE FAZER EM SEGUIDA
Você pode continuar tendo ibdata1 armazenado tudo, mas isso faz com que o LVM faça instantâneos reais (minha opinião pessoal).
Você precisa usar a postagem do My StackOverflow e encolher 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 vai dizer quanto espaço desperdiçado pode ser recuperado após aplicar a limpeza do InnoDB.