How to Get the Size of a Table in MySQL
On december 17, 2021 by adminA legtöbb relációs adatbázishoz hasonlóan a MySQL is hasznos metaadatokat biztosít magáról az adatbázisról. Míg a legtöbb más adatbázis catalog
-ként hivatkozik ezekre az információkra, a MySQL hivatalos dokumentációja tables
-ként hivatkozik a INFORMATION_SCHEMA
metaadatokra.
A névtől függetlenül, ami számít, az az ezen INFORMATION_SCHEMA
táblák által nyújtott információ. A INFORMATION_SCHEMA
-ban a views
-től és a user_privilieges
-tól a columns
-ig és a tables
-ig minden megtalálható. A mi céljaink szempontjából minket különösen a tables
metaadat érdekel, amelyet lekérdezhetünk, hogy ténylegesen kinyerjük a rendszerben lévő különböző táblák méretét.
List Table Sizes From a Single Database
Amint az a hivatalos dokumentációból kiderül, a INFORMATION_SCHEMA.TABLES
tábla körülbelül 20 oszlopot tartalmaz, de a táblák által használt lemezterület meghatározásához különösen két oszlopra fogunk koncentrálni: DATA_LENGTH
és INDEX_LENGTH
.
-
DATA_LENGTH
a táblázat összes adatának hossza (vagy mérete) (bytes
-ban). -
INDEX_LENGTH
a táblázat indexfájljának hossza (vagy mérete) (szinténbytes
-ban).
Ezen információk birtokában olyan lekérdezést tudunk végrehajtani, amely egy adott adatbázis összes tábláját felsorolja az egyes táblák lemezterületével (méretével) együtt. Még egy kicsit bonyolultabbá is válhatunk, és a bytes
normál méretértékeit átkonvertálhatjuk valami hasznosabbá és a legtöbb ember számára érthetőbbé, például megabytes
.
SELECT TABLE_NAME AS `Table`, ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024) AS `Size (MB)`FROM information_schema.TABLESWHERE TABLE_SCHEMA = "bookstore"ORDER BY (DATA_LENGTH + INDEX_LENGTH)DESC;
A bookstore
adatbázist használó példában a DATA_LENGTH
és INDEX_LENGTH
értékeket bytes
-ként kombináljuk, majd kétszer elosztjuk a 1024
értékkel, hogy kilobytes
-re, majd megabytes
-ra konvertáljuk. Az eredményhalmazunk valahogy így fog kinézni:
+----------------------------------+-----------+| Table | Size (MB) |+----------------------------------+-----------+| book | 267 || author | 39 || post | 27 || cache | 24 |...
Ha nem érdekli az adatbázis összes táblája, és csak egy adott tábla méretére kíváncsi, egyszerűen hozzáadhatja a WHERE
záradékhoz az AND TABLE_NAME = "your_table_name"
értéket. Itt csak a book
táblára vonatkozó információkra vagyunk kíváncsiak:
SELECT TABLE_NAME AS `Table`, ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024) AS `Size (MB)`FROM information_schema.TABLESWHERE TABLE_SCHEMA = "bookstore" AND TABLE_NAME = "book"ORDER BY (DATA_LENGTH + INDEX_LENGTH)DESC;
Az eredmény a várakozásoknak megfelelően a következő:
+-------+-----------+| Table | Size (MB) |+-------+-----------+| book | 267 |+-------+-----------+1 row in set (0.00 sec)
List All Table Sizes From ALL Databases
Ha olyan problémába ütközik, hogy az adatbázis mérete növekszik, de nem tudja, melyik tábla a bűnös, hasznos lehet, ha lekérdezi az egész rendszer összes adatbázisán belüli összes tábla méretét. Ez könnyen elvégezhető a következő lekérdezéssel:
SELECT TABLE_SCHEMA AS `Database`, TABLE_NAME AS `Table`, ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024) AS `Size (MB)`FROM information_schema.TABLESORDER BY (DATA_LENGTH + INDEX_LENGTH)DESC;
Ez nem csak a tábla méretét adja vissza, hanem a tábla nevét és a hozzá tartozó szülői adatbázist is.
Vélemény, hozzászólás?