Belirli bir MySQL tablosunun ne kadar disk alanı kapladığını nasıl belirleyebilirsiniz?


145

Belirli bir MySQL tablosunun ne kadar disk alanı kapladığını belirlemenin hızlı bir yolu var mı? Tablo MyISAM veya Innodb olabilir.


PHPMyAdmin'de, tabloya tıklayarak alan kullanımını görebilirsiniz.
AR.

Bu sorunun cevapları çözümümü elde etmeme yardımcı oldu. Verileri almak için her seferinde aynı sorguyu yürütmeden bana yardımcı olabilecek bir araç için yapılan kapsamlı bir arama, MONyog , MySQL Enterprise Monitor , Percona araç setinden geçmeme neden oldu . Hepsi disk bilgisi hakkında ayrıntılar veriyor, ancak sonunda daha iyi grafik çizelgeleri ve kolay GUI için MONyog'u seçti.
Mathew

Yanıtlar:


285

Bir tablo için şunu mydb.mytableçalıştırın:

BYTES

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

KİLOBİTLER

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';

GENEL

Maksimum birim görüntüsünün TB (TeraBytes) olduğu genel bir sorgu.

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;

Bir şans ver !!!


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;mydbad ve boyuta sahip tüm tabloların boyuta göre sıralanmış bir listesini almak için .
kqw

1
Önce daha fazla disk alanı tüketen tabloları görmek için ORDER BY yan tümcesine "DESC" ekleyin. ;)
mvsagar

Kesin olarak, ikili önekleri (2'nin kuvveti ile çarpma) kullanırken birimleri ki bi bayt (KiB), me bi bayt (MiB) ve gi bi bayt (GiB) olarak adlandırmak isteyebilirsiniz . Veya, ondalık önekler kullanmak isteyebilirsiniz (1000 kuvvetiyle çarpma) ve sonra birimleri ki lo bayt (KB), me ga bayt (MB) ve gi ga bayt (GB) olarak adlandırabilirsiniz. Daha fazlasını görün: en.wikipedia.org/wiki/Binary_prefix
Márton Tamás

MSSQL'de aynısını nasıl yapacağını bilen var mı?
Ivan Yurchenko


15

MB cinsinden en büyük 20 tabloyu almak için hızlı SQL biti.

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;

Umarım bu birisi için yararlıdır!



2

Linux'ta varsayılan olarak mysql kurulu:

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

dayalı NIXCRAFT en MySQL db konumu


Soru, belirli bir masanın kapladığı alanın nasıl ölçüleceğini sormaktır .
Flimm

@ShariqueAbdullah bu, varsayılan olmayan innodb_file_per_table kullanıyorsanız işe yarayacaktır, ancak çok yaygın olduğunu ve / veya önerildiğini düşünüyorum (birisi bu konuda beni kolayca yanlış kanıtlayabilir, sadece izlenimim).
Seaux

@Seaux, olabilir, ancak bunun, yaşadığım herhangi bir önerilen sunucu kurulumunda kullanıldığını bulamadım. Yani haklı olabilirsiniz, ancak varsayılan olmadığı için bulamayabilir. Ayrıca, innodb'nin MyISAM'den oldukça farklı çalıştığını düşünüyorum. Dolayısıyla, dosya boyutuna sahip olsanız bile, MyISAM durumunda olduğu kadar doğru olmayabilir. Ama haklısın bu bir çözüm olabilir. Bu bilgiyi almak için dosya boyutlarını ölçmek yerine kişisel olarak MySQL komutlarını kullanmayı tercih ediyorum.
Sharique Abdullah

2

RolandMySQLDBA'nın cevabına dayanarak, bir tablodaki her şemanın boyutunu elde etmek için yukarıdakileri kullanabiliriz:

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

Gerçekten beğendim!


0

Dosyaların boyutuna bakabilirsiniz ...

Her tablo, veritabanınızı adlandırdığınız adı taşıyan bir klasörde birkaç ayrı dosyada saklanır. Bu klasörler mysql veri dizininde saklanır.

Oradan diskteki tablonun boyutunu almak için bir 'du -sh. *' Yapabilirsiniz.


Bu yalnızca MyISAM veritabanları için çalışır. OP, InnoDB ile de çalışan bir çözüm istedi.
Bgs

0

Alıntı: Veritabanımın ne kadar disk alanı kullandığını nasıl kontrol ederim?

MySQL tablo boyutunu phpMyAdmin, sol çerçevedeki veritabanı adına tıklayarak ve sağ çerçevede oradaki tabloların boyutunu okuyarak kontrol panelinizden kontrol edebilirsiniz.

Aşağıdaki sorgu da aynı bilgileri almanıza yardımcı olacaktır. 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';

Bu phpMyAdmin'in kurulu olduğunu varsayar
thebigjc

-1

Sadece ' mysqldiskusage ' aracını aşağıdaki gibi kullanırdım

$ 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

OP, tüm veritabanının değil, belirli MySQL tablosunun disk alanını istedi
machineaddict
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.