2026年9月1日
2026年9月1日
WordPressのデータベースサイズを確認する方法
はじめに
データベースのサイズ増加は表示速度の低下・バックアップ時間の増加・ホスティング容量不足の原因になります。定期的にサイズを確認し、肥大化しているテーブルを特定することで早期に対処できます。
症状・原因
- サイトの表示速度が徐々に低下している
- バックアップファイルが以前より大きくなっている
- ホスティングの容量アラートが届いた
- データベースがどのくらいの容量を使っているか把握できていない
解決手順
ステップ1:WP-CLI でサイズを素早く確認する
# データベース全体のサイズ
wp db size
# テーブル別サイズ(表形式)
wp db size --tables --format=table
# テーブル別サイズ(CSV形式でファイル保存)
wp db size --tables --format=csv > db_size_$(date +%Y%m%d).csv
# 特定テーブルのサイズ
wp db size --tables | grep wp_posts
wp db size --tables | grep wp_options
# バイト単位で確認
wp db size --size_format=b
# MySQL バージョン確認(診断用)
wp db query "SELECT VERSION();"
# DB の基本情報を一括確認
wp db query "SELECT
VERSION() AS mysql_version,
@@character_set_database AS charset,
@@collation_database AS collation,
@@innodb_buffer_pool_size / 1024 / 1024 AS buffer_pool_MB;"
ステップ2:SQL でテーブル別サイズを詳細分析する
-- テーブル別サイズ(データ・インデックス・オーバーヘッド)
SELECT
table_name,
table_rows,
ROUND(data_length / 1024 / 1024, 2) AS data_MB,
ROUND(index_length / 1024 / 1024, 2) AS index_MB,
ROUND(data_free / 1024 / 1024, 2) AS overhead_MB,
ROUND((data_length + index_length) / 1024 / 1024, 2) AS total_MB
FROM information_schema.tables
WHERE table_schema = DATABASE()
ORDER BY (data_length + index_length) DESC;
-- データベース合計サイズ
SELECT
ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS total_MB,
ROUND(SUM(data_free) / 1024 / 1024, 2) AS overhead_MB,
COUNT(*) AS table_count
FROM information_schema.tables
WHERE table_schema = DATABASE();
-- オーバーヘッドが大きいテーブルを特定
SELECT table_name,
ROUND(data_free / 1024 / 1024, 2) AS overhead_MB
FROM information_schema.tables
WHERE table_schema = DATABASE()
AND data_free > 10485760 -- 10MB以上のオーバーヘッド
ORDER BY data_free DESC;
ステップ3:肥大化の原因を特定する
-- wp_posts の投稿タイプ別件数・サイズ
SELECT
post_type,
post_status,
COUNT(*) AS count,
ROUND(SUM(LENGTH(post_content)) / 1024 / 1024, 2) AS content_MB
FROM wp_posts
GROUP BY post_type, post_status
ORDER BY content_MB DESC
LIMIT 20;
-- wp_options の autoload 別サイズ
SELECT
autoload,
COUNT(*) AS count,
ROUND(SUM(LENGTH(option_value)) / 1024, 1) AS size_kb
FROM wp_options
GROUP BY autoload;
-- wp_postmeta の肥大化確認
SELECT
meta_key,
COUNT(*) AS count,
ROUND(SUM(LENGTH(meta_value)) / 1024 / 1024, 2) AS size_MB
FROM wp_postmeta
GROUP BY meta_key
ORDER BY size_MB DESC
LIMIT 10;
-- wp_comments のステータス別件数
SELECT comment_approved, COUNT(*) AS count
FROM wp_comments
GROUP BY comment_approved;
ステップ4:phpMyAdmin でサイズを視覚的に確認する
phpMyAdmin でのサイズ確認手順:
1. phpMyAdmin にログイン
2. 左ペインでデータベースを選択
3. テーブル一覧の「使用中」列でサイズを確認
→ 各テーブルのデータサイズ・インデックスサイズが表示される
4. 「オーバーヘッド」列に数値があるテーブルは最適化が必要
→ チェックを入れて「テーブルを最適化する」を実行
5. 詳細分析:
テーブルを選択 → 「操作」タブ → テーブルの情報セクション
→ 行数・データ長・インデックス長・断片化情報を確認
6. データベース全体のサイズ:
データベース名の右側に表示される容量合計を確認
ステップ5:サイズ推移を定期監視する
// functions.php: DBサイズを定期的に記録・アラート通知
add_action('weekly_db_size_check', 'check_and_alert_db_size');
function check_and_alert_db_size(): void {
global $wpdb;
$size_mb = (float) $wpdb->get_var(
"SELECT ROUND(SUM(data_length + index_length) / 1024 / 1024, 2)
FROM information_schema.tables
WHERE table_schema = DATABASE()"
);
// サイズ履歴を保存
$history = get_option('db_size_history', []);
$history[] = [
'date' => current_time('Y-m-d'),
'size_mb' => $size_mb,
];
// 最新30件のみ保持
$history = array_slice($history, -30);
update_option('db_size_history', $history, false);
// 500MB超えたらアラート
if ($size_mb > 500) {
wp_mail(
get_option('admin_email'),
'[WP] DBサイズ警告: ' . $size_mb . 'MB',
"データベースサイズが {$size_mb}MB に達しました。\n" .
"サイト: " . home_url() . "\n" .
"最適化を実施してください。"
);
}
}
if (!wp_next_scheduled('weekly_db_size_check')) {
wp_schedule_event(time(), 'weekly', 'weekly_db_size_check');
}
注意事項
information_schemaのサイズ情報はMySQL内部の統計情報から取得するため、実際のサイズと若干異なる場合があります。正確なサイズはANALYZE TABLEで統計を更新してから確認してくださいwp db sizeコマンドはWordPressのテーブルプレフィックス(wp_)が付くテーブルのみを集計します。同じデータベースに他のWordPressや別アプリのテーブルがある場合は含まれません- オーバーヘッドが大きい場合は
OPTIMIZE TABLEを実行しますが、InnoDBテーブルでは大量のI/Oが発生するためアクセスの少ない時間帯に実施してください
まとめ
DBサイズ確認は①wp db size --tables --format=tableでWP-CLI一覧表示、②information_schema.tablesのdata_length・index_length・data_freeでテーブル別の詳細サイズとオーバーヘッドを分析、③wp_posts・wp_options・wp_postmetaの各テーブルで肥大化原因(リビジョン・autoload・メタデータ)を特定、④phpMyAdminの「オーバーヘッド」列で最適化が必要なテーブルを視覚的に確認、⑤wp_schedule_eventで週次サイズ記録と500MB超でのメール通知を設定します。