MySQLデータベースの実際のサイズを取得する方法?


144

MySQLホストがWebホストを選択するために使用するスペースの量を知りたいのですが。コマンドを見つけたSHOW TABLE STATUS LIKE 'table_name'ので、クエリを実行すると、次のようになります。

Name       | Rows | Avg. Row Length | Data_Length | Index Length
----------   ----   ---------------   -----------   ------------
table_name   400          55            362000        66560
  • 数値は丸められます。

それでは、このテーブルに362000 または400 * 362000 = 144800000バイトのデータがありますか?そして、インデックスの長さはどういう意味ですか?よろしくお願いします!


362000 + 66560があります。Data_Length+ Index Length
mandza


このページでは、正確な答えを与えるだろうrathishkumar.in/2017/12/...
Rathish

回答:


281

MySQLフォーラムで見つけたS. Prakashから:

SELECT table_schema "database name",
    sum( data_length + index_length ) / 1024 / 1024 "database size in MB",
    sum( data_free )/ 1024 / 1024 "free space in MB"
FROM information_schema.TABLES
GROUP BY table_schema; 

または、コピーと貼り付けを簡単にするために1行で:

SELECT table_schema "database name", sum( data_length + index_length ) / 1024 / 1024 "database size in MB", sum( data_free )/ 1024 / 1024 "free space in MB" FROM information_schema.TABLES GROUP BY table_schema; 

7
MBの空き領域とはどういう意味ですか?100 GBの空き容量がありますが、空き容量は1 GB未満と報告されています。
バース

1
あたりとして@Barth 文書は、それが「InnoDBテーブルのバイトの空き領域」を意味します。残念ながら、それが何意味するのか説明はありません:-\
ckujau

13
バイト単位の空き領域とは、まさにそれを意味します。つまり、テーブルを最適化したり、テーブルを最初から再構築したりすると、領域の量が回収される可能性があります。データベースがディスクに情報を格納するとき、データベースはそれをブロックに割り当てます。多くの場合、レコードを削除すると、使用されているブロック間のブロックが解放されます。他のすべてのブロックをシフトしてそのスペースを使用することは、「空き」としてマークされるため非常にコストがかかります。スペースは後でデータベースエンジン自体が使用OPTIMIZE TABLE fooするか、(MyISAM)を使用して再利用するか、InnoDBテーブルを再作成して分析することができます。
2015

92

Mysqlクライアントで次のコマンドを実行すると、Mysqlデータベースのサイズを取得できます

SELECT  sum(round(((data_length + index_length) / 1024 / 1024 / 1024), 2))  as "Size in GB"
FROM information_schema.TABLES
WHERE table_schema = "<database_name>"

30

phpMyAdminを使用している場合は、この情報がわかります。

「データベース」(上部のメニュー)に移動し、「統計を有効にする」をクリックするだけです。

次のようなものが表示されます。

phpMyAdminスクリーンショット

サイズが大きくなると、これはおそらくいくつかの精度を失いますが、それはあなたの目的には十分正確であるはずです。


私は現在000webhostを使用しています。phpMyAdminがありますが、「統計を有効にする」チェックボックスが見つかりませんでした。(おそらく)そのためのクエリはありますか?
marvin

1
@marvinええと、ウェブホストに古いバージョンのphpMyAdminがインストールされている可能性があります。この機能が導入されたバージョンはわかりません。
Radu Murzea 2013

サイドバーで、ホームページに移動する上部のホームアイコンをクリックします。右側のウィンドウで、[データベース]をクリックします。データベースの1列のテーブルが表示され、その下に「統計の有効化」と呼ばれるリンクがあります
VeeK

8

MBでそれを見つけたいならこれをしてください

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; 

この回答のSQLスニペットは、stackoverflow.com
Allon

3

基本的に2つの方法があります:クエリDB(データ長+インデックス長)またはチェックファイルサイズ。インデックスの長さは、インデックスに格納されているデータに関連しています。

すべてがここで説明されています:

http://www.mkyong.com/mysql/how-to-calculate-the-mysql-database-size/


さて、このページは私の質問のソースです。しかし、このクエリによると、私は0.5 MBを持っているため、かなり安全です。私はそれが真実であることを願っています:)ありがとう!
マーヴィン2013

0

回答には、オーバーヘッドサイズとテーブルのメタデータサイズは含まれていません。

これは、データベースによって割り当てられた「ディスク領域」のより正確な見積もりです。

SELECT ROUND((SUM(data_length+index_length+data_free) + (COUNT(*) * 300 * 1024))/1048576+150, 2) AS MegaBytes FROM information_schema.TABLES WHERE table_schema = 'DATABASE-NAME'

5
詳しく説明してもらえますか?特にあなたの定数300150
Melebius

どうか、詳しく説明してもらえますか?
Allan Andrade 2017年


0

OracleのMySQLユーティリティには、すべてのデータベースのディスク使用量を表示するmysqldiskusageというコマンドがあります。https://dev.mysql.com/doc/mysql-utilities/1.6/en/mysqldiskusage.html


0

MySql Workbenchを使用している場合、データベースサイズ、各テーブルサイズ、インデックスサイズなどのすべての詳細を取得するのは非常に簡単です。

  1. スキーマを右クリック
  2. 選択スキーマインスペクタのオプションを

    ここに画像の説明を入力してください

  3. スキーマサイズのすべての詳細を表示します

  4. [ テーブル]タブを選択して、各テーブルのサイズを確認します。

    ここに画像の説明を入力してください

  5. Data Lenght列に表示されるテーブルサイズ


0

このコマンドを使用して、すべてのMySQLデータベースのサイズを確認する場合は、それぞれのサイズをメガバイトで表示します。

SELECT table_schema "database", sum(data_length + index_length)/1024/1024 "size in MB" FROM information_schema.TABLES GROUP BY table_schema;

大規模なデータベースがある場合は、次のコマンドを使用して結果をギガバイト単位で表示できます。

SELECT table_schema "database", sum(data_length + index_length)/1024/1024/1024 "size in GB" FROM information_schema.TABLES GROUP BY table_schema;

たとえばYOUR_DATABASE_NAME、特定のデータベースのみのサイズを表示する場合は、次のクエリを使用できます。

SELECT table_schema "database", sum(data_length + index_length)/1024/1024/1024 "size in GB" FROM information_schema.TABLES WHERE table_schema='YOUR_DATABASE_NAME' GROUP BY table_schema;
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.