Como obter uma avaliação sobre o tamanho do despejo de tabela mysql

6

Oi a todos que alguém sabe como obter uma estimativa sobre o tamanho de uma tabela mysql? Quer dizer, eu estou planejando fazer um backup de toda a tabela do mysql em todo o meu servidor mas eu gostaria de saber o quão grande deve ser cada tabela de despejo sem fazer o despejo físico. Existe algum comando que permita fazer isso? Estou usando o mysql 5.1 no debian 6 Felicidades

    
por marcodv 27.07.2012 / 18:44

2 respostas

4

Como pode ser visto aqui , você pode executar essas consultas no seu banco de dados ( roubou de comentários na página, então tweaked).

  • Por banco de dados:

SELECT table_schema 'database', concat( round( sum( data_length + index_length ) / ( 1024 *1024 ) , 2 ) , 'M' ) size FROM information_schema.TABLES WHERE ENGINE=('MyISAM' || 'InnoDB' ) GROUP BY table_schema;

  • Por tabela:

SELECT concat( table_schema, '.', table_name ) table_name, concat( round( data_length / ( 1024 *1024 ) , 2 ) , 'M' ) data_length, concat( round( index_length / ( 1024 *1024 ) , 2 ) , 'M' ) index_length, concat( round( round( data_length + index_length ) / ( 1024 *1024 ) , 2 ) , 'M' ) total_size FROM information_schema.TABLES ORDER BY ( data_length + index_length ) DESC;

    
por 27.07.2012 / 20:02
1

Como um mysqldump é uma representação lógica do banco de dados, você encontrará apenas dados reais. Os índices nunca são armazenados em um mysqldump, mas a definição da tabela ditará como preencher os índices.

É difícil escolher um número exato para um mysqldump por causa do que está escrito em um mysqldump:

  • Comandos INSERT estendidos com dezenas, centenas ou milhares de linhas
    • dezenas ou centenas de parênteses e vírgulas por INSERT
  • Comandos de criação de tabelas
  • Diretivas para
    • Desabilitando Chaves Estrangeiras e Chaves Exclusivas para Duração do mysqldump
    • Gravando arquivo de log e posição do mysqldump
    • Desativando / Ativando Índices (somente MyISAM)
    • Bloqueando uma tabela inteira para gravações
    • Salvando / restaurando variáveis globais

O que você pode avaliar como um fator a ser seguido é apenas a soma dos data_lengths:

SELECT SUM(data_length)/POWER(1024,2) TotalDB_MB
FROM information_schema.tables;

Para ver a soma por banco de dados e total geral:

SELECT table_schema,SUM(data_length)/POWER(1024,2) DB_MB
FROM information_schema.tables
WHERE table_schema NOT IN ('information_schema','performance_schema','mysql')
GROUP BY table_schema
WITH ROLLUP;

Para ver todas as tabelas e bancos de dados com subtotificação:

SELECT table_schema,table_name,SUM(data_length)/POWER(1024,2) DB_MB
FROM information_schema.tables
WHERE table_schema NOT IN ('information_schema','performance_schema','mysql')
GROUP BY table_schema,table_name
WITH ROLLUP;

Você pode usar o seguinte

  • POWER(1024,1) relatórios em KB
  • POWER(1024,2) relatórios em MB
  • POWER(1024,3) relatórios em GB
  • POWER(1024,4) relatórios em TB
  • POWER(1024,5) relatórios em PB
    • Isso é PetaBytes
    • Se você tiver que usar este, cobro taxas razoáveis de consultoria

Você poderia usar essa fórmula

  • NOC = Número de colunas por tabela
  • NumCommas = NOC - 1
  • NumQuotes = NumCharacterColumnsInTable X 2
  • NumRows = Número de linhas por tabela
  • NumParens = NumRows X 2
  • CharactersForSQLPerTable = NumRows X (NumCommas + NumQuotes) + NumParens

Fórmula final para tamanho aproximado de um mysqldump

  • CharactersForSQLPerTable X NumberOfTables
  • + Characters for "INSERT INTO tblname VALUES "
  • + TotalDB_MB
por 27.07.2012 / 22:47

Tags