Esiste un modo rapido per determinare quanto spazio su disco occupa una determinata tabella MySQL? La tabella può essere MyISAM o Innodb.
Esiste un modo rapido per determinare quanto spazio su disco occupa una determinata tabella MySQL? La tabella può essere MyISAM o Innodb.
Risposte:
Per una tabella mydb.mytableesegui questo per:
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';
Ecco una query generica in cui la visualizzazione massima dell'unità è 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;
Provaci !!!
SELECT (data_length+index_length)/power(1024,2) tablesize_mb, table_name FROM information_schema.tables WHERE table_schema='mydb' order by tablesize_mb;per ottenere un elenco di tutte le tabelle di mydbcon nome e dimensione, ordinate per dimensione.
Questo non sarà accurato per le tabelle InnoDB. La dimensione sul disco è in realtà maggiore di quella riportata tramite query.
Si prega di consultare questo link da Percona per ulteriori informazioni.
https://www.percona.com/blog/2008/12/16/how-much-space-does-empty-innodb-table-take/
In Linux con mysql installato di default:
[you@yourbox]$ ls -lha /var/lib/mysql/<databasename>
basato sulla posizione mysql db di NIXCRAFT
Sulla base della risposta di RolandMySQLDBA penso che possiamo usare quanto sopra per ottenere le dimensioni di ogni schema in una tabella:
SELECT table_schema, SUM((data_length+index_length)/power(1024,1)) tablesize_kb
FROM information_schema.tables GROUP BY table_schema;
Mi è davvero piaciuto!
Potresti forse guardare la dimensione dei file ...
Ogni tabella è memorizzata in un paio di file separati all'interno di una cartella che prende il nome da qualunque cosa tu abbia chiamato il tuo database. Queste cartelle sono archiviate nella directory dei dati mysql.
Da lì puoi fare un 'du -sh. *' Per ottenere le dimensioni della tabella sul disco.
Tratto da Come controllo la quantità di spazio su disco utilizzata dal mio database?
Puoi controllare le dimensioni della tabella MySQL sia guardando
phpMyAdminnel pannello di controllo facendo clic sul nome del database nel frame sinistro che leggendo le dimensioni delle tabelle nel frame destro.
La query seguente aiuterà anche a ottenere le stesse informazioni 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';
Vorrei solo usare lo strumento ' mysqldiskusage ' come segue
$ 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