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.tablesdata_lengthindex_lengthdata_freeでテーブル別の詳細サイズとオーバーヘッドを分析、③wp_postswp_optionswp_postmetaの各テーブルで肥大化原因(リビジョン・autoload・メタデータ)を特定、④phpMyAdminの「オーバーヘッド」列で最適化が必要なテーブルを視覚的に確認、⑤wp_schedule_eventで週次サイズ記録と500MB超でのメール通知を設定します。

お気軽にご相談ください

お見積りへ お問い合わせへ