Czy istnieje szybki sposób określenia, ile miejsca na dysku zajmuje dana tabela MySQL? Tabelą może być MyISAM lub Innodb.
Czy istnieje szybki sposób określenia, ile miejsca na dysku zajmuje dana tabela MySQL? Tabelą może być MyISAM lub Innodb.
Odpowiedzi:
W przypadku tabeli mydb.mytableuruchom to dla:
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';
Oto ogólne zapytanie, w którym maksymalna wyświetlana jednostka to TB (terabajty)
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;
Spróbuj !!!
SELECT (data_length+index_length)/power(1024,2) tablesize_mb, table_name FROM information_schema.tables WHERE table_schema='mydb' order by tablesize_mb;aby uzyskać listę wszystkich tabel o mydbnazwie i rozmiarze, uporządkowaną według rozmiaru.
To nie będzie dokładne w przypadku tabel InnoDB. Rozmiar na dysku jest w rzeczywistości większy niż podany w zapytaniu.
Więcej informacji można znaleźć pod linkiem firmy Percona.
https://www.percona.com/blog/2008/12/16/how-much-space-does-empty-innodb-table-take/
W Linuksie z domyślnie zainstalowanym mysql:
[you@yourbox]$ ls -lha /var/lib/mysql/<databasename>
w oparciu o lokalizację bazy danych mysql firmy NIXCRAFT
Opierając się na odpowiedzi RolandMySQLDBA, myślę, że możemy wykorzystać powyższe, aby uzyskać rozmiar każdego schematu w tabeli:
SELECT table_schema, SUM((data_length+index_length)/power(1024,1)) tablesize_kb
FROM information_schema.tables GROUP BY table_schema;
Naprawdę mi się podobało!
Możesz przyjrzeć się rozmiarowi plików ...
Każda tabela jest przechowywana w kilku oddzielnych plikach w folderze o nazwie takiej, jaką nazwiesz w swojej bazie danych. Te foldery są przechowywane w katalogu danych mysql.
Stamtąd możesz wykonać 'du -sh. *', Aby uzyskać rozmiar tabeli na dysku.
Zaczerpnięte z Jak mogę sprawdzić, ile miejsca na dysku używa moja baza danych?
Możesz sprawdzić rozmiar tabeli MySQL, patrząc na
phpMyAdminpanel sterowania, klikając nazwę bazy danych w lewej ramce i odczytując rozmiar tabel w prawej ramce.
Poniższe zapytanie również pomoże uzyskać te same informacje 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';
Po prostu użyłbym narzędzia „ mysqldiskusage ” w następujący sposób
$ 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