ハマログ

株式会社イーツー・インフォの社員ブログ

MySQLのデータベースの容量を調べる

こんにちは、かねこです。

ブログ更新当番の今日は、エンジニアっぽいエントリーを書こうと思います。
ちょうどMySQLのデータ容量を調べたところだったので、調べ方を記録しておこう。

まず、MySQLクライアントを起動します。

> mysql -u mysqluser -p
Enter password:

Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 999999999
Server version: 5.6.11 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

スキーマ全体のデータ容量をチェック

mysql> select round(sum(data_length)/1024/1024) as 'data_volume(MB)' from
information_schema.tables where table_schema = 'my_schema';
+-----------------+
| data_volume(MB) |
+-----------------+
| 3325            |
+-----------------+
1 row in set (0.13 sec)

続いてテーブル単位で表示してみる。

mysql> select table_name, round(data_length/1024/1024, 2) as 'data_size(MB)',
round(index_length/1024/1024, 2) as 'index_size(MB)' from information_schema.tables
where table_schema='my_schema';
+---------------------------+---------------+----------------+
| table_name | data_size(MB) | index_size(MB) |
+---------------------------+---------------+----------------+
| account | 1.52 | 0.00 |
| announce | 3.52 | 0.00 |
| log | 106.86 | 0.00 |
| news | 0.02 | 0.02 |
(略)

簡単だー♪

で、これは論理的なデータ使用量の話で、物理的な使用量はちょっと違います。

まずデータディレクトリを調べて、

mysql> show global variables like 'datadir';
+---------------+-----------------+
| Variable_name | Value |
+---------------+-----------------+
| datadir | /var/lib/mysql/ |
+---------------+-----------------+

確認。

# ls -l /var/lib/mysql/

-rw-rw---- 1 mysql mysql 5242880 5 23 23:05 ib_logfile0
-rw-rw---- 1 mysql mysql 5242880 5 23 18:21 ib_logfile1
-rw-rw---- 1 mysql mysql 5228199936 5 23 23:05 ibdata1
drwx------ 2 mysql mysql 4096 10 4 2011 mysql
srwxrwxrwx 1 mysql mysql 0 2 15 11:48 mysql.sock
drwx------ 2 mysql mysql 12288 10 30 2012 my_schema
drwx------ 2 mysql mysql 12288 5 9 15:54 my_schema_test

スキーマ名のディレクトリがあるので中身を見てみます。

# ls -l /var/lib/mysql/my_schema

-rw-rw---- 1 mysql mysql 9222 7 18 2012 account.frm
-rw-rw---- 1 mysql mysql 8602 10 12 2011 announce.frm
-rw-rw---- 1 mysql mysql 170 10 12 2011 log.MYD
-rw-rw---- 1 mysql mysql 2048 10 12 2011 log.MYI
-rw-rw---- 1 mysql mysql 13116 10 30 2012 log.frm
-rw-rw---- 1 mysql mysql 8724 10 30 2012 news.frm
(略)

frm: テーブルの構造を記録したファイル
MYD: テーブルのデータ
MYI: テーブルのインデックス情報

logテーブルのDBエンジンはMyISAMなので、データファイルとインデックスファイルが
それぞれ対になっています。わかりやすい。
その他のテーブルはInnoDBなので構造ファイルしかありません。

InnoDBのほうは、物理ファイル情報をチェックして、

mysql> show global variables like 'innodb_data_file_path';
+-----------------------+------------------------+
| Variable_name | Value |
+-----------------------+------------------------+
| innodb_data_file_path | ibdata1:10M:autoextend |
+-----------------------+------------------------+
1 row in set (0.00 sec)

実ファイルを見る

# ls -l /var/lib/mysql/

-rw-rw---- 1 mysql mysql 5242880 5 23 23:05 ib_logfile0
-rw-rw---- 1 mysql mysql 5242880 5 23 18:21 ib_logfile1
-rw-rw---- 1 mysql mysql 5228199936 5 23 23:05 ibdata1
↑これ

はい、物理ファイルの見方もわかりましたね(だいぶ端折ったけど)
めでたしめでたし。

ちなみに、一度拡張されたファイルは中身のテーブルをdelete/truncate/dropしても
容量が減ることはありませんので、そのことだけは、たしなみとして覚えておきましょう。

ではごきげんよう。

かねこ

DBInnoDBMyISAMmysqlデータベース

  kaneko tomo   2013年5月24日


関連記事

Laravel NotificationsでChatworkに通知する

Laravel5.3より、Notificationsという仕組みが備わったので、…

iOS7で利用できなくなったUDIDのおはなし

こんにちは、かねこです。 はじめに iOS7上で、デベロッパービルドでAdHoc…

CSR生成手順

最近やってること書きます。SSLの更新。 自分なりの手順書です。今回はCSR生成…


← 前の投稿

次の投稿 →