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 !


você tem 362000 + 66560. Data_Length + comprimento do índice
— mandza


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; 

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>"

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.


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; 

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/


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'

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 .



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


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;
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.