Calculando o uso do espaço em disco por banco de dados MySQL
28
Atualmente, estou usando information_schema.TABLES para calcular o uso total do espaço em disco agrupado pelo nome do banco de dados, mas está executando muito lentamente. Em servidores com centenas de bancos de dados, pode levar alguns minutos para calcular.
Qual é o método mais rápido de calcular o uso do espaço em disco pelo banco de dados? Devo apenas estar olhando para o sistema de arquivos? Existe um método para acelerar o information_schema?
Se você estiver usando o MyISAM, é mais fácil olhar o sistema de arquivos e usá-lo du -sh /var/lib/mysql/database.
Se você estiver usando o InnoDB com innodb_file_per_table definido, poderá obter uma resposta aproximada usando du -sh. É aproximado, porque ainda existem alguns dados armazenados no arquivo ibdata1, portanto você ficará um pouco no lado inferior. Esta técnica também funciona com innodb_file_per_tablebancos de dados MyISAM / InnoDB ( ) misturados .
Se você estiver usando o InnoDB sem innodb_file_per_table set, precisará dar uma olhada em INFORMATION_SCHEMA.
Em qualquer um dos casos acima, você pode executar a seguinte consulta para obter as informações que está procurando.
mysql>select table_schema, sum((data_length+index_length)/1024/1024)AS MB from information_schema.tables groupby1;+--------------------+-----------------+| table_schema | MB |+--------------------+-----------------+| prod |298025.72448921|| information_schema |0.00781248|| maatkit |70.77330779|| mysql |0.66873168|| test |4752.31449127|+--------------------+-----------------+5rowsinset(0.01 sec)
Se você tiver um número muito grande de tabelas, pode ser lento, como você já descobriu.
Vi em outro lugar que a opção 3 não leva em consideração os tamanhos do VARCHAR.
Joe
3
Você pode usar este comando para obter informações em GB:
mysql>select table_schema "DB name (table_schema)",
sum((data_length+index_length)/1024/1024/1024)AS"DB size in GB"from
information_schema.tables groupby table_schema;+-------------------------------------+-----------------+| table_schema DB name (table_schema)| DB size in GB |+-------------------------------------+-----------------+| prod |29.72448921|| information_schema |0.00781248|| miscDB |0.77330779|| mysql |0.66873168|| test |47.31449127|+-------------------------------------+-----------------+5rowsinset(0.01 sec)
mysql>SELECT table_schema "database name",
sum( data_length + index_length )/1024/1024"database size in MB",
sum( data_free )/1024/1024"free reclaimable space in MB"FROM information_schema.TABLES
GROUPBY table_schema;+--------------------+---------------+------------------------------+| DB name | DB size in GB | free/reclaimable space in GB |+--------------------+---------------+------------------------------+| prod |1.26|0.03|| information_schema |38.77|3.75|| miscDB |0.00|0.00|| mysql |0.00|0.00|| test |0.00|0.00|+--------------------+---------------+------------------------------+
Para que eu veja onde o espaço em disco está sendo usado (independentemente de estar em uma tabela mysql ou não), eu uso o meu confiável comando "du". Aqui está um exemplo de como descobrir de onde todo o espaço está sendo consumido.
Você pode ver que a maior parte do espaço está sendo usada por esta pasta. / mysql
Essa pasta contém tabelas de dados. Para ver quais tabelas estão ocupando todo o espaço, você pode continuar assim usando a opção "human" ou "-h". Eu gosto de fazer o gerenciamento de espaço em disco dessa maneira, porque às vezes você não pode nem entrar no mysql porque não conhece a senha ou o usuário.
Eu procuraria o tamanho do arquivo no seu arquivo de dados. É instantâneo e preciso.
Aviso : de acordo com o mecanismo de armazenamento, os índices são armazenados no arquivo principal ou em outro arquivo, não se esqueça de resumir, se necessário.
Você pode usar este comando para obter informações em GB:
Adaptou a resposta de Aaron Brown para fornecer o tamanho em GB. Veja a resposta de Aaron Brown para mais detalhes.
OU para incluir espaço livre / recuperável, use:
O espaço pode ser recuperado usando o comando OPTIMIZE TABLE para as tabelas InnoDB, MyISAM e ARCHIVE.
Veja também Como obter o tamanho real do banco de dados MySQL? para mais detalhes.
fonte
Para obter informações sobre o nome da tabela e o número de registros que ela possui, a consulta abaixo pode ser usada,
Para obter informações sobre bancos de dados nos servidores com seus respectivos tamanhos, a consulta abaixo pode ser usada,
fonte
Para que eu veja onde o espaço em disco está sendo usado (independentemente de estar em uma tabela mysql ou não), eu uso o meu confiável comando "du". Aqui está um exemplo de como descobrir de onde todo o espaço está sendo consumido.
Você pode ver que a maior parte do espaço está sendo usada por esta pasta. / mysql
Essa pasta contém tabelas de dados. Para ver quais tabelas estão ocupando todo o espaço, você pode continuar assim usando a opção "human" ou "-h". Eu gosto de fazer o gerenciamento de espaço em disco dessa maneira, porque às vezes você não pode nem entrar no mysql porque não conhece a senha ou o usuário.
Você pode ver que todo o espaço está sendo ocupado por algumas tabelas contendo muitos GiGs de dados. Espero que isto ajude.
fonte
Eu procuraria o tamanho do arquivo no seu arquivo de dados. É instantâneo e preciso.
Aviso : de acordo com o mecanismo de armazenamento, os índices são armazenados no arquivo principal ou em outro arquivo, não se esqueça de resumir, se necessário.
fonte
Eu sei que isso é antigo, mas alguém pode achar isso relevante.
No MySQL eu uso:
Como meu DB é o InnoDB, isso é apenas uma estimativa.
Eu comparo essa saída com:
Espero que isso ajude você
fonte
Melhor (depois de fazer
apt-get install ncdu
):para obter todo o tamanho total dos bancos de dados Mysql no seu VPS.
fonte