データベースサイズの概算

MySQLにおいて表題を知りたい。現在どれくらいのサイズになっているのかな?と疑問に思ったので。

■ 環境

  • MySQL 5.6.34

■ information_schema

MySQLに”root“で接続し、”information_schema“データベースを確認する。”TABLES“テーブルに情報がありそうである。

mysql> desc tables;
+-----------------+---------------------+------+-----+---------+-------+
| Field           | Type                | Null | Key | Default | Extra |
+-----------------+---------------------+------+-----+---------+-------+
| TABLE_CATALOG   | varchar(512)        | NO   |     |         |       |
| TABLE_SCHEMA    | varchar(64)         | NO   |     |         |       |
| TABLE_NAME      | varchar(64)         | NO   |     |         |       |
| TABLE_TYPE      | varchar(64)         | NO   |     |         |       |
| ENGINE          | varchar(64)         | YES  |     | NULL    |       |
| VERSION         | bigint(21) unsigned | YES  |     | NULL    |       |
| ROW_FORMAT      | varchar(10)         | YES  |     | NULL    |       |
| TABLE_ROWS      | bigint(21) unsigned | YES  |     | NULL    |       |
| AVG_ROW_LENGTH  | bigint(21) unsigned | YES  |     | NULL    |       |
| DATA_LENGTH     | bigint(21) unsigned | YES  |     | NULL    |       |
| MAX_DATA_LENGTH | bigint(21) unsigned | YES  |     | NULL    |       |
| INDEX_LENGTH    | bigint(21) unsigned | YES  |     | NULL    |       |
| DATA_FREE       | bigint(21) unsigned | YES  |     | NULL    |       |
| AUTO_INCREMENT  | bigint(21) unsigned | YES  |     | NULL    |       |
| CREATE_TIME     | datetime            | YES  |     | NULL    |       |
| UPDATE_TIME     | datetime            | YES  |     | NULL    |       |
| CHECK_TIME      | datetime            | YES  |     | NULL    |       |
| TABLE_COLLATION | varchar(32)         | YES  |     | NULL    |       |
| CHECKSUM        | bigint(21) unsigned | YES  |     | NULL    |       |
| CREATE_OPTIONS  | varchar(255)        | YES  |     | NULL    |       |
| TABLE_COMMENT   | varchar(2048)       | NO   |     |         |       |
+-----------------+---------------------+------+-----+---------+-------+
21 rows in set (0.01 sec)

mysql>

DATA_LENGTH“カラムで判明できそうである。SQLでテーブルごとに取得する。これでデータベースごとにサイズを概算する。

mysql> select table_schema, sum(data_length) from tables group by table_schema;
+-----------------------+------------------+
| table_schema          | sum(data_length) |
+-----------------------+------------------+
| example               |         66027520 |
| information_schema    |                0 |
  :
mysql>

INDEX_LENGTH“も合わせて計算した方が良いのだろうか?試してみる。

mysql> select table_schema, sum(data_length + index_length) from tables group by table_schema;
+-----------------------+---------------------------------+
| table_schema          | sum(data_length + index_length) |
+-----------------------+---------------------------------+
| example               |                        83951616 |
  :

byteでの表記なので1024で順次割っていく。

mysql&gt select table_schema, sum(data_length + index_length) / 1024 as KB from tables group by table_schema;
+-----------------------+--------------+
| table_schema          | KB           |
+-----------------------+--------------+
| example               |   81984.0000 |
  :
mysql&gt select table_schema, sum(data_length + index_length) / 1024 / 1024 as MB from tables group by table_schema;
+-----------------------+---------------+
| table_schema          | MB            |
+-----------------------+---------------+
| example               |   80.06250000 |
  :

欲しい情報としてはこんな感じで十分だ。

以上。