特定のMySQLテーブルが使用しているディスク容量をどのように判断できますか?


145

特定のMySQLテーブルが使用しているディスク容量をすばやく判別する方法はありますか?テーブルはMyISAMまたはInnodbです。


PHPMyAdminでは、テーブルをクリックするだけでスペースの使用状況を確認できます。
AR。

この質問に対する答えは、私の解決策を見つけるのに役立ちました。毎回同じクエリを実行せずにデータを取得するのに役立つツールを徹底的に検索すると、MONyogMySQL Enterprise MonitorPerconaツールキットを利用できました。それらすべてはディスク情報の詳細を提供しますが、より良いグラフィックチャートと簡単なGUIのためにMONyogを最終的に選択しました。
Mathew

回答:


285

テーブルの場合、mydb.mytableこれを実行します。

バイト

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

一般的な

以下は、最大単位表示がTB(テラバイト)である一般的なクエリです。

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;

試してみる !!!


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;mydbサイズ順に並べられた名前とサイズのすべてのテーブルのリストを取得します。
kqw

1
「DESC」をORDER BY句に追加して、より多くのディスク容量を最初に消費するテーブルを表示します。;)
mvsagar 2016

正確に言うと、バイナリプレフィックス(2のべき乗)を使用する場合、ki biバイト(KiB)、me biバイト(MiB)、gi biバイト(GiB)の単位を呼び出すことができます。それとも、あなたがユニットをKI(1000年のパワーとの乗算)進接頭辞を使用して、呼び出したいことがありLOバイト(KB)、私GAバイト(MB)とGI GAバイト(GB)。もっと参照:en.wikipedia.org/wiki/Binary_prefix
マートンのTamás

誰かがMSSQLで同じことをする方法を知っていますか?
Ivan Yurchenko、


15

SQLの簡単なビットで、上位20のテーブルを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;

それが誰かに役立つことを願っています!



2

mysqlがデフォルトでインストールされているLinuxの場合:

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

NIXCRAFTのmysql dbロケーションに基づく


問題は、特定のテーブルが占めるスペースを測定する方法を尋ねることです。
Flimm 2014年

@ShariqueAbdullahこれはデフォルトではないinnodb_file_per_tableを使用している場合に機能しますが、非常に一般的または推奨されていると思います(誰かがこれについて間違っていることを簡単に証明できますが、私の印象だけです)。
Seaux 14

@Seaux、そうかもしれませんが、これまでに経験した推奨サーバーセットアップで使用されていることはわかりません。だからあなたは正しいかもしれませんが、それはデフォルトではないので彼はそれを見つけないかもしれません。また、innodbの機能はMyISAMとはかなり異なると思います。そのため、ファイルサイズがあっても、MyISAMの場合ほど正確ではない可能性があります。しかし、あなたは正しいです。私は個人的には、ファイルサイズを測定するよりも、MySQLコマンドを使用してこの情報を取得することを好みます。
Sharique Abdullah 2014

2

RolandMySQLDBAの回答に基づいて、上記を使用してテーブル内の各スキーマのサイズを取得できると思います。

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

本当に気に入りました!


0

あなたはおそらくファイルのサイズを見ることができます...

各テーブルは、データベースと呼ばれる名前が付けられたフォルダー内のいくつかの個別のファイルに格納されます。これらのフォルダーは、mysqlデータディレクトリ内に格納されます。

そこから「du -sh。*」を実行して、ディスク上のテーブルのサイズを取得できます。


これはMyISAMデータベースでのみ機能します。OPは、InnoDBでも機能するソリューションを求めていました。
2013

0

データベースから使用されているディスク容量を確認するにどうすればよいですか?

MySQLのテーブルサイズを確認するにphpMyAdminは、コントロールパネルで左側のフレームのデータベース名をクリックし、右側のフレームでテーブルのサイズを確認します。

以下のクエリは、同じ情報を取得するのにも役立ちます 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';

これはphpMyAdminがインストールされていることを前提としています
thebigjc

-1

私は次のようにmysqldiskusageツールを使用するだけです

$ 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は、データベース全体ではなく、特定のMySQLテーブルのディスク領域を要求しました
machineaddict
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.