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

9

Meu arquivo ibdata é muito grande, pelo menos parece-me muito grande. Isso é excessivo ou ruim?

-rw-rw---- 1 mysql mysql  15G Apr 18 10:11 ibdata1
nachito
fonte
4
Seu arquivo ibdata é muito pequeno.
9138 Jeff Ferland
Dividir esse arquivo em pedaços menores (por exemplo, 4G) seria melhor ou pior para o desempenho?
Nachito 18/04

Respostas:

13

Quando isso pode ser um problema

Se você executar show table statusuma tabela e o Data_freecampo corresponder à grande maioria ibdata1do tamanho do seu arquivo, poderá ter muito espaço desperdiçado. Uma grande quantidade de inserção / exclusão tornará isso um problema. Se esse for o caso, as inserções e exclusões transitórias compõem a maior parte dos seus dados, você tem um bom argumento para o arquivo por tabela.

Isso não é um "sim" automático, no entanto. Há muita conversa no mundo sobre fragmentação interna dentro dos arquivos do InnoDB, mas colocá-los em um sistema de arquivos como arquivo por tabela apenas move sua fragmentação para o nível do sistema de arquivos em vez 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 e não como um arquivo. Se você possui muitos arquivos, precisará de um grande sistema de arquivos.

Na maioria das vezes, os sistemas de arquivos se saem muito bem ao escalar para lidar com terabytes de dados e números incontáveis ​​de arquivos. Às vezes, eles se deparam com problemas com pouca indexação (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 sistema de arquivos moderno pode atingir uma faixa 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 dos seus dados. No entanto, assim como dividir seu sistema de arquivos em várias partições não ajuda nesse problema, nem tentar manipular o innodb. Embora você possa usar innodb_file_per_table , eu raramente o recomendo.

Assim como o 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 tentar dividir o InnoDB, não é para isso.

Como estou lutando para transmitir o conceito de forma construtiva, aqui está uma rápida leitura das palavras, melhor do que eu: Terabytes não é big data, petabytes é .

Lembro-me de um slide de marketing do MySQL realmente muito antigo, em que o cliente estava executando um data warehouse com alguns terabytes. Há muitos anos. InnoDB ou MyISAM, ambos funcionariam. Isso é padrão no MySQL.

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

Jeff Ferland
fonte
Parece que estou com pouco menos de 50% de uso. InnoDB free: 7364608 kB
Nachito 18/04
@ nachito Parece que deve ficar bem. Se você sentir que precisa do espaço de volta para o sistema de arquivos, recupere-o. Se você está apenas preocupado com o desempenho, não. Além disso, para o desempenho, é melhor manter os arquivos do banco de dados em sua própria partição; portanto, se você estiver se concentrando no desempenho, não verá uma recuperação utilizável.
18712 Jeff Jeffland
6

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

  • faça backup de todos os seus dados, por exemplo, com mysqldump
  • adicione à diretiva my.cnf innodb_file_per_table
  • reinicie o mysql
  • elimine todos os bancos de dados usando o mecanismo innodb
  • pare o mysql
  • remover arquivo ibdata
  • rm ib_logfile [01]
  • inicie o mysql, verifique o syslog se tudo estiver ok
  • recarregar seu despejo

dessa maneira, você poderá recuperar o espaço sempre que soltar arquivos idb associados a tabelas / bancos de dados do innodb serão removidos imediatamente.

pQd
fonte
Eu entendo que ele nunca vai encolher sem despejar e recarregar as tabelas. No entanto, se eu tiver descartado os bancos de dados do InnoDB, ele usará esse espaço "livre" antes de começar a crescer novamente?
Nachito 18/04
1
@ nachito Sim, será.
18712 Jeff Jeffland
Sua resposta é apenas uma sugestão direta, sem obscurecer o problema, como minha resposta parece ter feito. +1 !!!
RolandoMySQLDBA
1
Bem, a resposta é uma solução para reduzir o espaço usado pelos arquivos de dados, mas não é uma discussão sobre o mérito relacionado a isso, e essa é a pergunta que eu li. Um arquivo ibdata de 15 GB é um grande problema?
Jeff Ferland