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しても
容量が減ることはありませんので、そのことだけは、たしなみとして覚えておきましょう。
ではごきげんよう。
かねこ