Saya bisa menjalankan kueri ini untuk mendapatkan ukuran semua tabel di database MySQL:
show table status from myDatabaseName;
Saya ingin bantuan dalam memahami hasilnya. Saya mencari meja dengan ukuran terbesar.
Kolom mana yang harus saya lihat?
Saya bisa menjalankan kueri ini untuk mendapatkan ukuran semua tabel di database MySQL:
show table status from myDatabaseName;
Saya ingin bantuan dalam memahami hasilnya. Saya mencari meja dengan ukuran terbesar.
Kolom mana yang harus saya lihat?
Jawaban:
Anda dapat menggunakan kueri ini untuk menampilkan ukuran tabel (meskipun Anda harus mengganti variabel terlebih dahulu):
SELECT
table_name AS `Table`,
round(((data_length + index_length) / 1024 / 1024), 2) `Size in MB`
FROM information_schema.TABLES
WHERE table_schema = "$DB_NAME"
AND table_name = "$TABLE_NAME";
atau kueri ini untuk mencantumkan ukuran setiap tabel di setiap basis data, terbesar terlebih dahulu:
SELECT
table_schema as `Database`,
table_name AS `Table`,
round(((data_length + index_length) / 1024 / 1024), 2) `Size in MB`
FROM information_schema.TABLES
ORDER BY (data_length + index_length) DESC;
AND table_name IN ('table_1', 'table_2', 'table_3');
VARCHARdan BLOBmengetik?
SELECT TABLE_NAME AS "Table Name",
table_rows AS "Quant of Rows", ROUND( (
data_length + index_length
) /1024, 2 ) AS "Total Size Kb"
FROM information_schema.TABLES
WHERE information_schema.TABLES.table_schema = 'YOUR SCHEMA NAME/DATABASE NAME HERE'
LIMIT 0 , 30
Anda bisa mendapatkan nama skema dari " information_schema " -> tabel SCHEMATA -> kolom " SCHEMA_NAME "
Tambahan Anda bisa mendapatkan ukuran database mysql sebagai berikut.
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;
Hasil
DB Name | DB Size in MB
mydatabase_wrdp 39.1
information_schema 0.0
Anda bisa mendapatkan detail tambahan di sini.
Jika Anda ingin kueri menggunakan database yang saat ini dipilih. cukup salin tempelkan kueri ini. (Tidak perlu modifikasi)
SELECT table_name ,
round(((data_length + index_length) / 1024 / 1024), 2) as SIZE_MB
FROM information_schema.TABLES
WHERE table_schema = DATABASE() ORDER BY SIZE_MB DESC;
SIZE_MBFROM information_schema.TABLES WHERE table_schema = DATABASE () ORDER BY (data_length + index_length) ASC;
Ada cara mudah untuk mendapatkan banyak informasi menggunakan Workbench:
Klik kanan nama skema dan klik "Inspektur skema".
Di jendela yang dihasilkan Anda memiliki sejumlah tab. Tab pertama "Info" menunjukkan perkiraan kasar ukuran database dalam MB.
Tab kedua, "Tabel", menunjukkan Panjang data dan detail lainnya untuk setiap tabel.
Ukuran semua tabel:
Misalkan database atau TABLE_SCHEMAnama Anda adalah "news_alert". Maka permintaan ini akan menampilkan ukuran semua tabel dalam database.
SELECT
TABLE_NAME AS `Table`,
ROUND(((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024),2) AS `Size (MB)`
FROM
information_schema.TABLES
WHERE
TABLE_SCHEMA = "news_alert"
ORDER BY
(DATA_LENGTH + INDEX_LENGTH)
DESC;
Keluaran:
+---------+-----------+
| Table | Size (MB) |
+---------+-----------+
| news | 0.08 |
| keyword | 0.02 |
+---------+-----------+
2 rows in set (0.00 sec)Untuk tabel spesifik:
Misalkan Anda TABLE_NAMEadalah "berita" . Maka query SQL akan menjadi-
SELECT
TABLE_NAME AS `Table`,
ROUND(((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024),2) AS `Size (MB)`
FROM
information_schema.TABLES
WHERE
TABLE_SCHEMA = "news_alert"
AND
TABLE_NAME = "news"
ORDER BY
(DATA_LENGTH + INDEX_LENGTH)
DESC;
Keluaran:
+-------+-----------+
| Table | Size (MB) |
+-------+-----------+
| news | 0.08 |
+-------+-----------+
1 row in set (0.00 sec)Coba perintah shell berikut (ganti DB_NAMEdengan nama database Anda):
mysql -uroot <<<"SELECT table_name AS 'Tables', round(((data_length + index_length) / 1024 / 1024), 2) 'Size in MB' FROM information_schema.TABLES WHERE table_schema = \"DB_NAME\" ORDER BY (data_length + index_length) DESC;" | head
Untuk solusi Drupal / drush, periksa contoh skrip berikut yang akan menampilkan tabel terbesar yang digunakan:
#!/bin/sh
DB_NAME=$(drush status --fields=db-name --field-labels=0 | tr -d '\r\n ')
drush sqlq "SELECT table_name AS 'Tables', round(((data_length + index_length) / 1024 / 1024), 2) 'Size in MB' FROM information_schema.TABLES WHERE table_schema = \"${DB_NAME}\" ORDER BY (data_length + index_length) DESC;" | head -n20
Inilah cara lain untuk menyelesaikan hal ini dari menggunakan baris perintah bash.
for i in mysql -NB -e 'show databases'; do echo $i; mysql -e "SELECT table_name AS 'Tables', round(((data_length+index_length)/1024/1024),2) 'Size in MB' FROM information_schema.TABLES WHERE table_schema =\"$i\" ORDER BY (data_length + index_length) DESC" ; done
Diadaptasi dari jawaban ChapMic untuk menyesuaikan kebutuhan khusus saya.
Hanya tentukan nama basis data Anda, kemudian urutkan semua tabel dalam urutan menurun - dari tabel LARGEST ke SMALLEST di dalam basis data yang dipilih. Hanya perlu 1 variabel untuk diganti = nama basis data Anda.
SELECT
table_name AS `Table`,
round(((data_length + index_length) / 1024 / 1024), 2) AS `size`
FROM information_schema.TABLES
WHERE table_schema = "YOUR_DATABASE_NAME_HERE"
ORDER BY size DESC;
Jika Anda memiliki sshakses, Anda mungkin ingin mencoba du -hc /var/lib/mysql(atau berbeda datadir, seperti yang diatur dalam Anda my.cnf) juga.
Cara lain untuk menunjukkan jumlah baris dan ruang yang ditempati dan dipesan olehnya.
SELECT
table_schema as `Database`,
table_name AS `Table`,
table_rows AS "Quant of Rows",
round(((data_length + index_length) / 1024 / 1024/ 1024), 2) `Size in GB`
FROM information_schema.TABLES
WHERE table_schema = 'yourDatabaseName'
ORDER BY (data_length + index_length) DESC;
Satu-satunya string yang harus Anda ganti dalam kueri ini adalah "yourDatabaseName".
Saya menemukan jawaban yang ada sebenarnya tidak memberikan ukuran tabel pada disk, yang mana lebih membantu. Kueri ini memberikan perkiraan disk yang lebih akurat dibandingkan dengan ukuran tabel berdasarkan data_length & index. Saya harus menggunakan ini untuk instance AWS RDS di mana Anda tidak dapat secara fisik memeriksa disk dan memeriksa ukuran file.
select NAME as TABLENAME,FILE_SIZE/(1024*1024*1024) as ACTUAL_FILE_SIZE_GB
, round(((data_length + index_length) / 1024 / 1024/1024), 2) as REPORTED_TABLE_SIZE_GB
from INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES s
join INFORMATION_SCHEMA.TABLES t
on NAME = Concat(table_schema,'/',table_name)
order by FILE_SIZE desc
Hitung ukuran total database di akhir:
(SELECT
table_name AS `Table`,
round(((data_length + index_length) / 1024 / 1024), 2) `Size in MB`
FROM information_schema.TABLES
WHERE table_schema = "$DB_NAME"
)
UNION ALL
(SELECT
'TOTAL:',
SUM(round(((data_length + index_length) / 1024 / 1024), 2) )
FROM information_schema.TABLES
WHERE table_schema = "$DB_NAME"
)
Ini harus diuji dalam mysql, bukan postgresql:
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;