初めに #
MySQLにて「このデータベースのサイズってどれくらいかな?」と思ったことはありませんか?
インフラエンジニアにとってコンテンツ領域となるデータベースのサイズ(容量)は意識の外になりがちですが、実はシステム運用に欠かせない重要な情報のひとつとなっております。
特に以下のようなケースでは、データベース容量の確認はとても重要な情報となります。
- サーバーのディスク使用量が逼迫している
- 定期的なバックアップの対象を見直したい
- 負荷対策としてパフォーマンス改善を行いたい
MySQLに接続 #
初めにデータベースへのログインを行います。
サーバーへSSH接続を行ってください。
次に以下のコマンドを利用しデータベース(MySQL)へログインを行ってください。
mysql -u ユーザー名 -p
MB単位での計算 #
MySQLでは、データベースのメタ情報を管理する information_schema
というシステムデータベースが存在します。
この中の tables
テーブルを参照することで、サイズを取得することができます。
注意点として確認にはinformation_schema
に対する参照権限(SELECT権限)が必要となります。
MB(メガバイト)単位での計算する場合は以下のsqlにて確認可能となっております。
SELECT
table_schema,
SUM((data_length+index_length)/1024/1024) AS MB
FROM
information_schema.tables
GROUP BY
1;
このクエリは、各データベースの データ領域(data_length
)とインデックス領域(index_length
) を合計し、データベース単位での合計値をMB換算し出力しています。
MBでの出力例 #
以下はMBでの結果の例となります。
+--------------------------+------------+
| table_schema | MB |
+--------------------------+------------+
| information_schema | 0.65625000 |
| mysql | 2.32812500 |
| performance_schema | 0.00000000 |
| sample_database | 10.3437500 |
| another_database | 5.12500000 |
| test_database | 1.12500000 |
+--------------------------+------------+
上記の結果では「sample_database
」データベースは「10MB
」、「test_database
」データベースは「1MB
」となっていることが確認できます。
値の補足 #
- data_length:テーブルに格納されている実データのバイト数
- index_length:そのテーブルに定義されているインデックスのサイズ
GB単位での計算 #
ディスク使用量が数GBを超える大規模なデータベースでは、MB単位の表示は桁数が多く視認性が低下します。
そのような時は、GB単位でデータベース容量を計算し表示するのがオススメとなります。
先ほど紹介したsqlのSUM内で「/1024
」を追加することでGB単位での計算ができます。
SELECT
table_schema,
SUM((data_length+index_length)/1024/1024/1024) AS GB
FROM
information_schema.tables
GROUP BY
1;
GBでの出力例 #
以下はGBでの結果の例となります。
+--------------------------+---------------+
| table_schema | GB |
+--------------------------+---------------+
| information_schema | 0.00064373016 |
| mysql | 0.00227355957 |
| performance_schema | 0.00000000000 |
| sample_database | 0.00997161865 |
| another_database | 0.00498008728 |
| test_database | 0.00108718872 |
+--------------------------+---------------+
注意点 #
データベースの容量を確認する際には、いくつか注意しておくべきポイントがあります。
まず、容量の取得に利用している information_schema.tables
は、リアルタイムで完全に最新の情報を反映しているとは限りません。
MySQLのバージョンや設定によっては、情報の更新に遅延が発生することがあります。
また、情報を取得するためには、**MySQLユーザーに適切な権限(とくに SELECT 権限)**が付与されている必要があります。
さらに、performance_schema
や information_schema
といった特殊なデータベースについては、仕様上、容量がゼロとして表示される場合があります。