Bagaimana Anda bisa menentukan berapa banyak ruang disk yang digunakan tabel MySQL tertentu?

145

Apakah ada cara cepat untuk menentukan berapa banyak ruang disk yang digunakan tabel MySQL tertentu? Tabelnya mungkin MyISAM atau Innodb.

dan
sumber
Di PHPMyAdmin Anda dapat melihat penggunaan ruang hanya dengan mengklik pada tabel.
AR.
Jawaban untuk pertanyaan ini membantu saya mendapatkan solusi. Pencarian menyeluruh untuk alat yang dapat membantu saya tanpa mengeksekusi permintaan yang sama setiap kali untuk mendapatkan data membuat saya melalui MONyog , MySQL Enterprise Monitor , Percona toolkit . Semua dari mereka memang memberikan detail pada info disk, tetapi akhirnya memilih MONyog untuk grafik grafik yang lebih baik dan GUI yang mudah.
Mathew

Jawaban:

285

Untuk tabel, mydb.mytablejalankan ini untuk:

Byte

SELECT (data_length+index_length) tablesize
FROM information_schema.tables
WHERE table_schema='mydb' and table_name='mytable';

KILOBYTES

SELECT (data_length+index_length)/power(1024,1) tablesize_kb
FROM information_schema.tables
WHERE table_schema='mydb' and table_name='mytable';

MEGABYTES

SELECT (data_length+index_length)/power(1024,2) tablesize_mb
FROM information_schema.tables
WHERE table_schema='mydb' and table_name='mytable';

GIGABYTES

SELECT (data_length+index_length)/power(1024,3) tablesize_gb
FROM information_schema.tables
WHERE table_schema='mydb' and table_name='mytable';

UMUM

Berikut ini adalah permintaan umum di mana tampilan unit maksimum adalah 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;

Cobalah !!!

RolandoMySQLDBA
sumber
6
SELECT (data_length+index_length)/power(1024,2) tablesize_mb, table_name FROM information_schema.tables WHERE table_schema='mydb' order by tablesize_mb;untuk mendapatkan daftar semua tabel mydbdengan nama dan ukuran, dipesan berdasarkan ukuran.
kqw
1
Tambahkan "DESC" ke klausa ORDER BY untuk melihat tabel yang menggunakan lebih banyak ruang disk terlebih dahulu. ;)
mvsagar
Lebih tepatnya, Anda mungkin ingin memanggil satuan ki bi byte (KiB), saya bi byte (MiB) dan gi bi byte (GiB) saat menggunakan awalan biner (penggandaan dengan kekuatan 2). Atau, Anda mungkin ingin menggunakan awalan desimal (perkalian dengan kekuatan 1000) dan kemudian memanggil satuan ki lo byte (KB), saya ga byte (MB) dan gi ga byte (GB). Lihat lebih lanjut: en.wikipedia.org/wiki/Binary_prefix
Márton Tamás
Adakah yang tahu cara melakukan hal yang sama di MSSQL?
Ivan Yurchenko
@RolandoMySQLDBA, dapatkah Anda menyarankan pada stackoverflow.com/questions/47976837/…
davidb
15

Bit cepat SQL untuk mendapatkan 20 tabel terbesar di MB.

SELECT table_schema, table_name,
  ROUND((data_length+index_length)/POWER(1024,2),2) AS tablesize_mb
FROM information_schema.tables
ORDER BY tablesize_mb DESC LIMIT 20;

Semoga bermanfaat bagi seseorang!

Ben
sumber
2

Di linux dengan mysql diinstal secara default:

[you@yourbox]$ ls -lha /var/lib/mysql/<databasename>

berdasarkan lokasi mysql db NIXCRAFT

geekymartian
sumber
Pertanyaannya adalah bertanya bagaimana mengukur ruang yang diambil oleh tabel tertentu .
Flimm
@ShariqueAbdullah ini akan berfungsi jika Anda menggunakan innodb_file_per_table, yang tidak standar, tapi saya pikir ini sangat umum dan / atau disarankan (seseorang dapat dengan mudah membuktikan saya salah tentang hal ini, hanya kesan saya).
Seaux
@Seaux, Mungkin, tapi saya belum menemukannya digunakan dalam pengaturan server yang direkomendasikan yang saya lalui. Jadi Anda mungkin benar, tetapi karena ini bukan default, ia mungkin tidak menemukannya. Juga, saya pikir fungsi innodb sangat berbeda dibandingkan dengan MyISAM. Jadi, bahkan jika Anda memiliki ukuran file, itu mungkin tidak seakurat dalam kasus MyISAM. Tapi Anda benar yang mungkin menjadi salah satu solusi. Saya pribadi lebih suka menggunakan perintah MySQL untuk mendapatkan info ini daripada mengukur ukuran file.
Sharique Abdullah
2

Berdasarkan jawaban RolandMySQLDBA saya pikir kita bisa menggunakan di atas untuk mendapatkan ukuran setiap skema dalam sebuah tabel:

SELECT table_schema, SUM((data_length+index_length)/power(1024,1)) tablesize_kb 
    FROM information_schema.tables GROUP BY table_schema;

Sangat menyukainya!

Arthur Felipe
sumber
0

Anda mungkin dapat melihat ukuran file ...

Setiap tabel disimpan dalam beberapa file terpisah di dalam folder yang dinamai apa pun yang Anda sebut basis data Anda. Folder-folder ini disimpan dalam direktori data mysql.

Dari sana Anda dapat melakukan 'du -sh. *' Untuk mendapatkan ukuran tabel pada disk.

Luke Chadwick
sumber
Ini hanya berfungsi untuk database MyISAM. OP meminta solusi yang bekerja dengan InnoDB juga.
Bgs
0

Diambil dari Bagaimana cara memeriksa berapa banyak ruang disk yang digunakan database saya?

Anda dapat memeriksa ukuran tabel MySQL dengan melihat di phpMyAdminpanel kontrol Anda dengan mengklik nama database di bingkai kiri dan membaca ukuran tabel di sana di bingkai kanan.

Kueri di bawah ini juga akan membantu untuk mendapatkan informasi yang sama 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';
Rahul
sumber
Ini mengasumsikan phpMyAdmin diinstal
thebigjc
-1

Saya hanya akan menggunakan alat ' mysqldiskusage ' sebagai berikut

$ 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
Natouriano
sumber
OP meminta ruang disk dari tabel MySQL tertentu, bukan seluruh database
machineaddict