MySQLで次みたいな場面に遭遇。
- テーブルサイズを知りたい
- DB全体のサイズを知りたい
SSHとか使えるならコマンドで確認可能。
でも SQLクエリ から直に確認できる方法 もあるんですよね。
その方法が結構便利だったんで、
ここではMySQLかたテーブル・DBサイズを調べる方法をまとめます。
DB全体のサイズを調べるSQLの書き方
まずはDB全体のサイズを「●●MB」とか調べるやり方について。
それには information_schema テーブルを参照すれば分かります。
たとえば以下の2つのDBがあるとしましょう。
- my_app
- information_schema
自分で作ったのが my_app というデータベース。
一方の information_schema というDBについて。
これはメタ情報(テーブルとかプラグイン情報)を記録するDBみたいです。
これらのDBサイズを調べるSQLは以下の通り
▼ このSQLをそのままコピペでOK
1 |
SELECT table_schema, SUM((data_length+index_length)/1024/1024) AS MB FROM information_schema.tables GROUP BY 1; |
このSQLで大事なポイントは次の2つ
- SUMからデータ合計を計算
ここでは各DBサイズをの SUM((data_length+index_length)/1024/1024) でMB単位で計算している。もしGB単位で表示したいなら /1024/1024/1024 で割ればOK
- 同じDBに属するテーブルをグループ化
同じDBに属するテーブルは table_schema カラムの値がDB名になってて共通。そのため GROUP BY 1 することで同じDBに属するテーブルをまとめられる
テーブルのメタ情報を元に、DB全体のサイズを求められる訳です。
そして、このクエリを実行した結果がコチラ
table_scheme | MB |
---|---|
my_app | 0.27925396 |
information_scheme | 0.00976560 |
もし使用量が多いなら、GBとかで表示するほうが見やすいかも
ちなみに特定DBのみ表示したいなら・・・
次みたいにデータベース名で絞り込みすればOKです。
▼ my_appという名のDBだけサイズ計算
1 |
SELECT table_schema, SUM((data_length+index_length)/1024/1024) AS MB FROM information_schema.tables GROUP BY 1 HAVING table_schema = 'my_app' |
ただしグループ化だから、 HAVING のあとに条件を指定する必要あり
テーブルサイズ(容量)を計算するクエリの書き方
お次はテーブルサイズの調べ方について
コチラも information_schema から簡単に取得できます。
たとえば my_app というデータベースがある場合。
その中の各テーブルのサイズを調べるSQLがコチラ
1 |
SELECT table_name, round(((data_length + index_length) / 1024 / 1024), 2) AS MB FROM information_schema.TABLES WHERE table_schema = "my_app" |
ここでも MB単位 でサイズ表示する設定にしてます。
その結果は例えばこのような感じ
table_name | MB |
---|---|
sql.php?table=hoge | 0.01 |
sql.php?table=fuga | 0.24 |
sql.php?table=piyo | 0.08 |
なんか sql.php?table= みたいな表示が自分の環境では出ました。
そのあとがテーブル名なんですが、なんか見にくい(困)
まあサイズさえ分かれば結果オーライです。
ちなみにPHPからディスク使用量を調べるには
関連してるので、ついでに紹介
PHPによるディスク使用量の調べ方についてです。
▼ PHPでディスク使用量を調べる現実的な2つの方法
知りたい方は上記事をご覧ください。
2つの方法があって、それぞれ用途が違います。
ここまでのまとめ
ということで、次の2つのやり方の紹介でした。
知ってると意外と役に立つかもしれません。ではまた