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.
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.
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?
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?
Respostas:
Quando isso pode ser um problema
Se você executar
show table status
uma tabela e oData_free
campo corresponder à grande maioriaibdata1
do 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 é .
Não se preocupe com um banco de dados de 15 GB.
fonte
InnoDB free: 7364608 kB
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ê:
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.
fonte