Como obter o tamanho real do banco de dados MySQL?

144

Gostaria de saber quanto espaço meu banco de dados MySQL usa para selecionar um host. Eu encontrei o comando SHOW TABLE STATUS LIKE 'table_name'e, quando faço a consulta, recebo algo como isto:

Name       | Rows | Avg. Row Length | Data_Length | Index Length
----------   ----   ---------------   -----------   ------------
table_name   400          55            362000        66560
  • números são arredondados.

Então, eu tenho 362000 ou 400 * 362000 = 144800000 bytes de dados para esta tabela? E o que significa Comprimento do Índice? Obrigado !

Marvin
fonte
você tem 362000 + 66560. Data_Length + comprimento do índice
mandza
Possível duplicata de Como obter tamanho do banco de dados mysql?
Mohammad
Esta página fornecerá a resposta exata rathishkumar.in/2017/12/…
Rathish

Respostas:

281

De S. Prakash, encontrado no fórum MySQL :

SELECT table_schema "database name",
    sum( data_length + index_length ) / 1024 / 1024 "database size in MB",
    sum( data_free )/ 1024 / 1024 "free space in MB"
FROM information_schema.TABLES
GROUP BY table_schema; 

Ou em uma única linha para facilitar a cópia e colar:

SELECT table_schema "database name", sum( data_length + index_length ) / 1024 / 1024 "database size in MB", sum( data_free )/ 1024 / 1024 "free space in MB" FROM information_schema.TABLES GROUP BY table_schema; 
ron_dobley
fonte
7
O que significa o Espaço Livre em MB? Tenho 100s de GB grátis, mas ele reporta menos de 1 GB de graça.
Barth
1
@Barth, de acordo com a documentação , significa "espaço livre em bytes para tabelas do InnoDB". Infelizmente não há explicação sobre o que isso significa: - \
ckujau
13
O espaço livre em bytes significa exatamente isso - significa que a quantidade de espaço pode ser recuperada se você OTIMIZAR a tabela ou reconstruí-la do zero. Quando os bancos de dados armazenam informações em discos, eles as alocam em blocos; a exclusão de um registro geralmente libera um bloco entre os blocos usados, e é muito caro mudar todos os outros blocos para usar esse espaço, para que seja marcado como "livre". O espaço pode ser usado posteriormente pelo próprio mecanismo de banco de dados ou pode ser recuperado usando OPTIMIZE TABLE foo(MyISAM) ou recriar + analisar para tabelas do InnoDB.
razzed
92

Você pode obter o tamanho do seu banco de dados Mysql executando o seguinte comando no cliente Mysql

SELECT  sum(round(((data_length + index_length) / 1024 / 1024 / 1024), 2))  as "Size in GB"
FROM information_schema.TABLES
WHERE table_schema = "<database_name>"
minhas23
fonte
30

Se você usa o phpMyAdmin, ele pode fornecer essas informações.

Basta ir em "Bancos de dados" (menu na parte superior) e clicar em "Ativar estatísticas".

Você verá algo assim:

Captura de tela do phpMyAdmin

Provavelmente, isso perderá alguma precisão à medida que os tamanhos aumentam, mas deve ser preciso o suficiente para seus propósitos.

Radu Murzea
fonte
Atualmente, estou usando 000webhost. Possui phpMyAdmin, mas não consegui encontrar uma caixa de seleção "ativar estatísticas". Existe (talvez) uma consulta para isso?
Marvin
1
@ marvin Bem, é possível que o host tenha uma versão mais antiga do phpMyAdmin instalada. Não sei em qual versão esse recurso foi introduzido.
Radu Murzea
Na barra lateral, clique no ícone Início na parte superior, que leva à página inicial. Lá na janela direita, clique em 'Bancos de dados'. Ele exibe uma tabela de bases de dados uma coluna, abaixo do que é um link chamado 'Habilitar Estatísticas'
Veek
8

se você quiser encontrá-lo em MB, faça isso

SELECT table_schema                                        "DB Name", 
   Round(Sum(data_length + index_length) / 1024 / 1024, 1) "DB Size in MB" 
FROM   information_schema.tables 
GROUP  BY table_schema; 
jakson
fonte
SQL deste resposta trecho parece ser uma cópia do stackoverflow.com/a/1733523/1200542
Ariel Allon
3

Basicamente, existem duas maneiras: consultar o banco de dados (comprimento dos dados + comprimento do índice) ou verificar o tamanho dos arquivos. O comprimento do índice está relacionado aos dados armazenados nos índices.

Tudo é descrito aqui:

http://www.mkyong.com/mysql/how-to-calculate-the-mysql-database-size/

MiGro
fonte
Bem, esta página é a fonte da minha pergunta. Mas, de acordo com esta consulta, tenho 0,5 MB, o que me deixa bastante seguro. Espero que seja verdade :) Obrigado!
Marvin
0

Nenhuma das respostas inclui o tamanho da sobrecarga e os tamanhos de metadados das tabelas.

Aqui está uma estimativa mais precisa do "espaço em disco" alocado por um banco de dados.

SELECT ROUND((SUM(data_length+index_length+data_free) + (COUNT(*) * 300 * 1024))/1048576+150, 2) AS MegaBytes FROM information_schema.TABLES WHERE table_schema = 'DATABASE-NAME'
Semra
fonte
5
Você poderia elaborar? Especialmente suas constantes 300e 150?
Melebius 17/05
Por favor, você poderia elaborar?
Allan Andrade
0

SUM(Data_free) pode ou não ser válido . Depende da história de innodb_file_per_table. Mais discussão é encontrada aqui .

Rick James
fonte
0

Se você estiver usando o MySql Workbench, é muito fácil obter todos os detalhes do tamanho do banco de dados, cada tamanho de tabela, tamanho do índice etc.

  1. Clique com o botão direito no esquema
  2. Selecione a opção Inspetor de esquema

    insira a descrição da imagem aqui

  3. Mostra todos os detalhes do tamanho do esquema

  4. Selecione a guia Tabelas para ver o tamanho de cada tabela.

    insira a descrição da imagem aqui

  5. Tamanho da tabela exibido na coluna Data Lenght

Viraj Dhamal
fonte
0

Se você deseja encontrar o tamanho de todos os bancos de dados MySQL, use este comando, ele mostrará seus respectivos tamanhos em megabytes;

SELECT table_schema "database", sum(data_length + index_length)/1024/1024 "size in MB" FROM information_schema.TABLES GROUP BY table_schema;

Se você tiver bancos de dados grandes, poderá usar o seguinte comando para mostrar o resultado em gigabytes;

SELECT table_schema "database", sum(data_length + index_length)/1024/1024/1024 "size in GB" FROM information_schema.TABLES GROUP BY table_schema;

Se você deseja mostrar o tamanho de apenas um banco de dados específico, por exemplo YOUR_DATABASE_NAME, você pode usar a seguinte consulta;

SELECT table_schema "database", sum(data_length + index_length)/1024/1024/1024 "size in GB" FROM information_schema.TABLES WHERE table_schema='YOUR_DATABASE_NAME' GROUP BY table_schema;
Arbab Nazar
fonte