WordPressの各ページの読み込み、フォームの送信、プラグインの操作、ユーザーセッションはすべてデータベースクエリを含みます。時間が経つにつれて、データベースにはオーバーヘッドが蓄積されます:古い投稿のリビジョン、期限切れのトランジェント、孤立したメタデータ、スパムコメント、無効化されたプラグインからの未使用のテーブルなどです。この膨張はクエリを遅くし、バックアップサイズを増加させ、全体的なサイトのパフォーマンスを低下させます。このガイドでは、データベースの膨張を特定し、安全にクリーンアップし、再発を防ぐ方法について説明します。
WordPressがデータベースに保存するもの
データベースに何が保存されているかを理解することで、安全に削除できるものを特定できます。標準のWordPressインストールは12のコアテーブルを使用し、プラグインは必要に応じて独自のテーブルを追加します。
| テーブル | 保存内容 | 一般的な膨張の原因 |
|---|---|---|
| wp_posts | 投稿、ページ、リビジョン、添付ファイル、カスタム投稿タイプ | 投稿のリビジョン、自動ドラフト |
| wp_postmeta | 投稿のメタデータ(カスタムフィールド、プラグインデータ) | 削除された投稿からの孤立したメタデータ |
| wp_options | サイト設定、プラグイン設定、トランジェント | 期限切れのトランジェント、古いプラグイン設定 |
| wp_comments | コメントとトラックバック | スパムコメント、ごみ箱に入れたコメント |
| wp_commentmeta | コメントのメタデータ | 削除されたコメントのAkismetメタデータ |
| wp_usermeta | ユーザーメタデータ | セッショントークン、プラグインユーザーデータ |
| wp_termmeta | カテゴリとタグのメタデータ | 孤立したタームメタデータ |
データベース膨張の一般的な原因
投稿のリビジョン
WordPressは、投稿やページで「下書き保存」または「更新」をクリックするたびにリビジョンを保存します。50回編集された投稿は、wp_postsテーブルに50のリビジョンが保存され、それぞれ独自のpostmetaエントリを持ちます。数百の投稿があるサイトでは、リビジョンが数千の不要なデータベース行を占めることがあります。
トランジェント
トランジェントは、WordPressコアやプラグインによってwp_optionsテーブルに保存される一時的なデータです。期限が設定されていますが、WordPressは期限切れのトランジェントを自動的に削除しません。時間が経つにつれて蓄積し、特に多くのプラグインがあるサイトではoptionsテーブルを大幅に増加させることがあります。
孤立したデータ
投稿を削除すると、そのメタデータ(wp_postmetaエントリ)が削除されないことがあります。同様に、コメント、ユーザー、またはタームを削除すると、孤立したメタデータ行が残ることがあります。無効化されたプラグインや削除されたプラグインは、しばしばデータベーステーブルを残し、スペースを消費し、データベースを混乱させます。
スパムおよびごみ箱に入れたコンテンツ
スパムコメント、ごみ箱に入れた投稿、およびごみ箱に入れたコメントは、手動で空にされるまでデータベースに残ります。Akismetや他のスパムフィルターを使用しているサイトでは、定期的にクリーンアップが必要な数千のスパムコメントが蓄積されることがあります。
自動ドラフト
WordPressは、投稿エディターで「新規追加」をクリックすると、自動ドラフト投稿を作成します。たとえ公開しなくても、これらは時間とともに蓄積され、編集セッションが終了した後は目的を果たさなくなります。
SQLによる手動データベースクリーンアップ
SQLに慣れている方は、phpMyAdminやデータベースクライアントを使用して直接クリーンアップできます。クリーンアップクエリを実行する前に、必ずデータベースのバックアップを取ってください。
投稿のリビジョンを削除
-- すべての投稿リビジョンを削除
DELETE FROM wp_posts WHERE post_type = 'revision';
-- 孤立したpostmetaを削除(削除された投稿のメタデータ)
DELETE pm FROM wp_postmeta pm
LEFT JOIN wp_posts p ON pm.post_id = p.ID
WHERE p.ID IS NULL;
トランジェントのクリーンアップ
-- 期限切れのトランジェントを削除
DELETE FROM wp_options
WHERE option_name LIKE '%_transient_timeout_%'
AND option_value < UNIX_TIMESTAMP();
-- 期限切れのトランジェントのデータを削除
DELETE FROM wp_options
WHERE option_name LIKE '%_transient_%'
AND option_name NOT LIKE '%_transient_timeout_%';
スパムおよびゴミ箱のコメントを削除
-- スパムコメントを削除
DELETE FROM wp_comments WHERE comment_approved = 'spam';
-- ゴミ箱のコメントを削除
DELETE FROM wp_comments WHERE comment_approved = 'trash';
-- 孤立したコメントメタデータを削除
DELETE cm FROM wp_commentmeta cm
LEFT JOIN wp_comments c ON cm.comment_id = c.comment_ID
WHERE c.comment_ID IS NULL;
プラグインベースのデータベースクリーンアップ
GUIベースのアプローチを好む場合、スケジュール機能を持ついくつかのプラグインがデータベースの最適化を処理します:
WP-Optimize
WP-Optimizeは、リビジョン、ドラフト、スパム、トランジェント、孤立したデータをクリーンアップする無料のプラグインです。また、データベーステーブルを最適化し、スケジュールされたクリーンアップをサポートします。Proバージョンはマルチサイトサポートと高度なスケジューリングを追加します。
WP Rocketデータベース最適化
WP Rocketには、リビジョン、自動ドラフト、ゴミ箱の投稿、スパムコメント、トランジェント、テーブルの最適化を処理するデータベースタブがあります。WP Rocketは主にキャッシュプラグインであるため、パフォーマンスの最適化とともにデータベースのクリーンアップを1つのツールで行えます。
Advanced Database Cleaner
このプラグインは、無効化されたプラグインによって残されたテーブルや孤立したcronイベントを検出することで、より深く掘り下げます。テーブルをWordPressコア、プラグイン作成、または不明として分類し、削除しても安全なテーブルを特定するのに役立ちます。
| プラグイン | 無料版 | スケジュールされたクリーンアップ | テーブル検出 |
|---|---|---|---|
| WP-Optimize | はい | はい | 基本 |
| WP Rocket | いいえ(プレミアムのみ) | はい | いいえ |
| Advanced Database Cleaner | はい | Proのみ | はい(詳細) |
wp-config.phpの最適化
wp-config.phpファイルにこれらの定数を追加することで、データベースの膨張を防ぎます:
投稿リビジョンの制限
// 投稿ごとに5つのリビジョンのみ保持(推奨)
define( 'WP_POST_REVISIONS', 5 );
// リビジョンを完全に無効にする(ほとんどのサイトには推奨されません)
define( 'WP_POST_REVISIONS', false );
リビジョンを5に設定することで、間違いから回復するための十分な履歴を提供し、無制限のリビジョンの増加を防ぎます。頻繁に編集されるコンテンツが多いサイトには、10のリビジョンが合理的な代替案です。
ゴミ箱の自動空にする
// 7日ごとにゴミ箱を空にする(デフォルトは30日)
define( 'EMPTY_TRASH_DAYS', 7 );
// ゴミ箱を無効にする(アイテムは即座に削除 - 注意して使用)
define( 'EMPTY_TRASH_DAYS', 0 );
自動保存の間隔
// 自動保存の間隔を5分に増やす(デフォルトは60秒)
define( 'AUTOSAVE_INTERVAL', 300 );
データベーステーブルの最適化
行を削除した後、断片化されたスペースを回収するためにOPTIMIZE操作を実行します:
OPTIMIZE TABLE wp_posts, wp_postmeta, wp_options, wp_comments, wp_commentmeta;
これを毎月または大規模なクリーンアップ操作の後にスケジュールします。ほとんどのクリーンアッププラグインは、スケジュールされたタスクにテーブルの最適化を含んでいます。
自動クリーンアップのスケジューリング
自動スケジュールを設定します:週ごとのトランジェントとスパムのクリーンアップ、月ごとのリビジョン削除とテーブル最適化、四半期ごとの孤立したプラグインテーブルの監査。WP-OptimizeとWP Rocketはどちらもスケジュールされたクリーンアップをサポートしています。オフピーク時間に設定してください。
データベースサイズの監視
データベースのサイズを追跡して、膨張を早期に発見します。個々のテーブルサイズを確認するには、このクエリを実行してください:
SELECT table_name AS 'テーブル',
ROUND(data_length / 1024 / 1024, 2) AS 'データ (MB)',
table_rows AS '行数'
FROM information_schema.tables
WHERE table_schema = 'your_database_name'
ORDER BY (data_length + index_length) DESC
LIMIT 20;
wp_optionsが5 MBを超えるか、wp_postmetaが100 MBを超える場合は、クリーンアップの時期です。これらのテーブルは頻繁にクエリされるため、そのサイズはページの読み込み時間に直接影響します。
データベース最適化をキャッシング、画像最適化、サーバー構成と併せて行う包括的なパフォーマンス最適化アプローチについては、私たちのWordPressスピード最適化ガイドをお読みください。メンテナンスルーチンの一環として継続的なデータベースの健康を維持するためには、私たちのWordPressメンテナンスガイドをご覧ください。
詳細については、公式ドキュメントを参照してください: WordPress データベース API.
よくある質問
データベースから投稿のリビジョンを削除するのは安全ですか?
はい、投稿のリビジョンを削除することは安全で、公開されたコンテンツには影響しません。リビジョンはドラフト変更の履歴的スナップショットです。コンテンツが確定すると、リビジョンはほとんどのサイトにとって目的を果たさなくなります。ただし、クリーンアップを行う前には必ずデータベースのバックアップを取ってください。
データベースの最適化はサイトの速度を目に見えて改善しますか?
改善の程度は、データベースの膨張具合によります。50,000行以上の孤立した行や10 MBを超えるwp_optionsテーブルを持つサイトは、ページの読み込み時間や管理ダッシュボードの応答性に目に見える改善が見られます。小規模なサイトでは、わずかな改善が見られるかもしれません。データベースの最適化は、キャッシングや他のパフォーマンス対策と併せて行うことで、累積的な改善が得られます。
WordPressデータベースをどのくらいの頻度で最適化すべきですか?
定期的にコンテンツを更新するアクティブなサイトでは、月に一度の最適化が良い基準です。頻繁にコメントやWooCommerceの取引、フォームの送信がある高トラフィックサイトは、月ごとのテーブル最適化とともに週ごとのトランジェントとスパムのクリーンアップが有益です。
データベースクリーンアッププラグインはサイトを壊す可能性がありますか?
WP-OptimizeやWP Rocketのような信頼できるプラグインは、安全に設計されています。これらは既知の膨張カテゴリ(リビジョン、トランジェント、スパム)を対象としており、重要なデータには触れません。プラグイン固有のテーブルを手動で削除する際にはリスクが増します。テーブルが必要かどうかわからない場合は、そのままにしておき、まずその目的を調査してください。
OPTIMIZE TABLEと行を削除することの違いは何ですか?
行を削除することは、テーブルからデータを取り除きます。OPTIMIZE TABLEは、行が削除された後にテーブルの物理ストレージを再編成し、ディスクスペースを回収し、データファイルをデフラグします。これをファイルを削除すること(行を削除すること)とハードドライブをデフラグすること(テーブルを最適化すること)に例えることができます。
WordPressテーブルにはInnoDBとMyISAMのどちらを使用すべきですか?
WordPressはバージョン5.5以降、デフォルトでInnoDBを使用しており、推奨されるストレージエンジンです。InnoDBは行レベルのロック(同時ユーザーに適している)、トランザクション、およびクラッシュリカバリをサポートしています。MyISAMは読み取り重視の操作に対しては高速ですが、これらの信頼性機能が欠けています。データベースにMyISAMテーブルが見つかった場合、InnoDBに変換することが一般的に推奨されます。
無効化されたプラグインによって残されたテーブルをどのように特定しますか?
Advanced Database Cleanerプラグインは、非コアテーブルを検出して分類できます。あるいは、SQLクエリSHOW TABLESを実行し、テーブル名をWordPressコアテーブルおよび現在アクティブなプラグインと比較します。無効化されたプラグインと一致するプレフィックスを持つテーブルは削除候補です。
WooCommerceは大きなデータベースの膨張を引き起こしますか?
はい。WooCommerceは、注文データ、製品メタデータ、顧客セッション、アクティブなストアで大幅に増加するトランジェントを保存します。WooCommerce > ステータス > ツールを使用して、期限切れのトランジェントとセッションを定期的にクリアしてください。
あらゆる角度からパフォーマンスを最適化
WP Rocketは、キャッシング、データベースのクリーンアップ、パフォーマンスの最適化を1つのプラグインで処理し、サイトをスムーズに運営できます。
WP Rocketを探る →


