Existe uma maneira rápida de determinar quanto espaço em disco uma tabela específica do MySQL está ocupando? A tabela pode ser MyISAM ou Innodb.
Existe uma maneira rápida de determinar quanto espaço em disco uma tabela específica do MySQL está ocupando? A tabela pode ser MyISAM ou Innodb.
Respostas:
Para uma tabela, mydb.mytable
execute isso para:
SELECT (data_length+index_length) tablesize
FROM information_schema.tables
WHERE table_schema='mydb' and table_name='mytable';
SELECT (data_length+index_length)/power(1024,1) tablesize_kb
FROM information_schema.tables
WHERE table_schema='mydb' and table_name='mytable';
SELECT (data_length+index_length)/power(1024,2) tablesize_mb
FROM information_schema.tables
WHERE table_schema='mydb' and table_name='mytable';
SELECT (data_length+index_length)/power(1024,3) tablesize_gb
FROM information_schema.tables
WHERE table_schema='mydb' and table_name='mytable';
Aqui está uma consulta genérica em que a exibição máxima da unidade é TB (TeraBytes)
SELECT
CONCAT(FORMAT(DAT/POWER(1024,pw1),2),' ',SUBSTR(units,pw1*2+1,2)) DATSIZE,
CONCAT(FORMAT(NDX/POWER(1024,pw2),2),' ',SUBSTR(units,pw2*2+1,2)) NDXSIZE,
CONCAT(FORMAT(TBL/POWER(1024,pw3),2),' ',SUBSTR(units,pw3*2+1,2)) TBLSIZE
FROM
(
SELECT DAT,NDX,TBL,IF(px>4,4,px) pw1,IF(py>4,4,py) pw2,IF(pz>4,4,pz) pw3
FROM
(
SELECT data_length DAT,index_length NDX,data_length+index_length TBL,
FLOOR(LOG(IF(data_length=0,1,data_length))/LOG(1024)) px,
FLOOR(LOG(IF(index_length=0,1,index_length))/LOG(1024)) py,
FLOOR(LOG(IF(data_length+index_length=0,1,data_length+index_length))/LOG(1024)) pz
FROM information_schema.tables
WHERE table_schema='mydb'
AND table_name='mytable'
) AA
) A,(SELECT 'B KBMBGBTB' units) B;
De uma chance !!!
SELECT (data_length+index_length)/power(1024,2) tablesize_mb, table_name FROM information_schema.tables WHERE table_schema='mydb' order by tablesize_mb;
para obter uma lista de todas as tabelas mydb
com nome e tamanho, ordenadas por tamanho.
Isso não será preciso para as tabelas do InnoDB. O tamanho do disco é realmente maior do que o relatado por meio de consulta.
Por favor, consulte este link da Percona para obter mais informações.
https://www.percona.com/blog/2008/12/16/how-much-space-does-empty-innodb-table-take/
No linux com o mysql instalado por padrão:
[you@yourbox]$ ls -lha /var/lib/mysql/<databasename>
baseado na localização mysql db do NIXCRAFT
Com base na resposta do RolandMySQLDBA, acho que podemos usar o acima para obter o tamanho de cada esquema em uma tabela:
SELECT table_schema, SUM((data_length+index_length)/power(1024,1)) tablesize_kb
FROM information_schema.tables GROUP BY table_schema;
Gostei muito!
Talvez você possa ver o tamanho dos arquivos ...
Cada tabela é armazenada em dois arquivos separados dentro de uma pasta com o nome que você chamou de banco de dados. Essas pastas são armazenadas no diretório de dados do mysql.
A partir daí, você pode fazer um 'du -sh. *' Para obter o tamanho da tabela em disco.
Retirado de Como verifico quanto espaço em disco meu banco de dados está usando?
Você pode verificar o tamanho da tabela MySQL olhando no
phpMyAdmin
seu painel de controle clicando no nome do banco de dados no quadro esquerdo e lendo o tamanho das tabelas no quadro direito.
A consulta abaixo também ajudará a obter as mesmas informações em bytes
select SUM(data_length) + SUM(index_length) as total_size
from information_schema.tables
where table_schema = 'db_name'
and table_name='table_name';
Eu usaria apenas a ferramenta ' mysqldiskusage ' da seguinte maneira
$ mysqldiskusage --server=user:password@localhost mydbname
# Source on localhost: ... connected.
# Database totals:
+------------+----------------+
| db_name | total |
+------------+----------------+
| mydbaname | 5,403,033,600 |
+------------+----------------+
Total database disk usage = 5,403,033,600 bytes or 5.03 GB