Quão grande é grande demais para o arquivo ibdata?

8

Meu arquivo ibdata é muito grande, pelo menos parece ser muito grande. Isso é excessivo ou não tão ruim assim?

-rw-rw---- 1 mysql mysql  15G Apr 18 10:11 ibdata1
    
por nachito 18.04.2012 / 17:13

2 respostas

11

Quando isso pode ser um problema

Se você executar show table status em uma tabela e o campo Data_free for a grande maioria do tamanho do seu arquivo ibdata1 , talvez você tenha muito espaço desperdiçado. Uma grande quantidade de inserção / exclusão fará com que isso seja um problema. Se esse for o caso e inserções e exclusões transitórias comporem a maior parte dos seus dados, você terá um bom argumento para o arquivo por tabela.

Isso não é um "sim" automático, no entanto. Há muita conversa no mundo sobre a fragmentação interna dentro dos arquivos InnoDB, mas colocá-los em um sistema de arquivos como arquivo por tabela simplesmente move sua fragmentação para o nível do sistema de arquivos ao invés do nível do banco de dados.

Por que isso geralmente não é um problema

Pense no seu arquivo InnoDB como um sistema de arquivos em vez de um arquivo. Se você tiver muitos arquivos, precisará de um grande sistema de arquivos.

Na maior parte, os sistemas de arquivos se saem muito bem na escalabilidade para lidar com terabytes de dados e incontáveis números de arquivos. Às vezes, eles se deparam com problemas de indexação inadequada (por exemplo, limites para o número de arquivos em um diretório antes de um impacto no desempenho), mas na maioria das vezes o moderno sistema de arquivos pode se espalhar pelo intervalo de terabytes.

O InnoDB funciona da mesma maneira. O tamanho do seu arquivo de dados pode ser enorme ... e como grandes sistemas de arquivos, que podem apresentar problemas com o backup de seus dados. No entanto, assim como dividir seu sistema de arquivos em múltiplas partições não ajuda com este problema, nem tenta manipular o innodb. Embora você possa usar o innodb_file_per_table , raramente o recomendo.

Assim como seu sistema de arquivos, a melhor resposta é conhecer os limites internamente e trabalhar dentro dele. Entenda os índices e aplique-os adequadamente. Não tente dividir o InnoDB, não é para isso.

Desde que eu estou lutando para transmitir construtivamente o conceito, aqui está uma rápida leitura que palavras isso melhor do que eu posso: Terabytes não é big data, petabytes é .

I remember a really really old MySQL marketing slide where the customer was running a data warehouse with some terabytes. Many years ago. InnoDB or MyISAM, both would work. This is standard off the rack MySQL stuff.

Não se preocupe com um banco de dados de 15 GB.

    
por 18.04.2012 / 17:24
6

Os arquivos ibdata não diminuem - se você recentemente descartou algumas tabelas ou removeu muitas linhas - o innodb em sua configuração não liberará o espaço livre de volta ao sistema de arquivos. Eu sugiro que você:

  • backup de todos os seus dados, por exemplo, com o mysqldump
  • adicione a minha diretiva innodb_file_per_table my.cnf
  • reiniciar o mysql
  • descartar todos os bancos de dados usando o mecanismo innodb
  • para o mysql
  • remover o arquivo ibdata
  • rm ib_logfile [01]
  • inicie o mysql, verifique o syslog se tudo estiver ok
  • recarregue seu despejo

desta forma, você poderá recuperar o espaço sempre que você soltar os arquivos idb associados à tabela innodb / banco de dados será removido imediatamente.

    
por 18.04.2012 / 17:24

Tags