DB Maintenance
Cron実行時に選択したテーブルに対してデータベース最適化クエリ(MySQLではOPTIMIZE TABLE、PostgreSQLではVACUUM ANALYZE)を実行します。
db_maintenance
インストール
composer require 'drupal/db_maintenance:^2.0'
概要
DB Maintenanceは、選択したデータベーステーブルに対して最適化クエリを実行することでデータベースメンテナンス操作を行うDrupalモジュールです。MySQLデータベースでは、削除または分割された行を持つテーブルを修復し、テーブルインデックスをソートし、テーブル統計を更新するOPTIMIZE TABLEを実行します。PostgreSQLデータベースでは、削除されたタプルが占有するストレージを回収するためにVACUUM ANALYZEを実行します。
このモジュールは、Cacheテーブル、セッションテーブル、watchdogログなど、データの入れ替わりが激しいテーブルで使用するよう設計されています。Cronベースのスケジューリングをサポートしており、毎回のCron実行から隔月間隔まで頻度オプションを設定できます。さらに、時間間隔制限機能により、管理者は最適化を特定の時間帯に制限でき、低トラフィック時間帯にメンテナンスを実行するのに便利です。
重要な考慮事項:MySQLのOPTIMIZE TABLEコマンドは実行中にテーブルをロックするため、アクセスの多いサイトではサイトパフォーマンスに影響を与える可能性があります。PostgreSQLのVACUUM(FULL以外)操作は通常のデータベース操作と並行して実行できます。大規模なインストールでは、すべてのテーブルを最適化するのではなく、データの入れ替わりが激しいテーブルのみを選択することをお勧めします。
Features
- 選択したMySQL/MariaDBデータベーステーブルに対してOPTIMIZE TABLEクエリを実行し、削除または分割された行を持つテーブルのデフラグと修復を行う
- PostgreSQLテーブルに対してVACUUM ANALYZEを実行し、削除されたタプルからストレージを回収して統計を更新する
- 設定可能なCron実行頻度:毎回のCron実行、毎時、2時間ごと、毎日、2日ごと、毎週、2週間ごと、毎月、隔月
- 最適化を特定の時間帯(例:夜間の低トラフィック時間帯)に制限する時間間隔制限機能
- マルチデータベースDrupalインストールでの複数データベース接続のサポート
- すべてのテーブルを自動的に最適化するか、特定のテーブルを手動で選択するオプション
- 最適化操作のwatchdogログ記録(オプション)
- 管理インターフェースのリンクから手動で最適化をトリガー
- データベーステーブルプレフィックスを正しく処理
Use Cases
高トラフィックサイトでのCacheテーブルの最適化
トラフィックの多いサイトでは、Cacheテーブルで頻繁に行の挿入と削除が行われます。時間間隔機能を有効にして、DB Maintenanceがcache_*テーブルを低トラフィック時間帯(例:02:00〜04:00)に毎日最適化するよう設定します。これにより、ユーザーに影響を与えることなくデータベースパフォーマンスを維持できます。
watchdogテーブルサイズの維持
watchdogテーブルは、広範なログ記録を行うサイトでは著しく大きくなる可能性があります。watchdogテーブルを週次最適化の対象として選択し、削除されたログエントリからディスクスペースを回収し、ログレビュー時のクエリパフォーマンスを維持します。
マルチサイトデータベースメンテナンス
複数のデータベース接続を持つDrupalインストールでは、DB Maintenanceはすべての設定されたデータベースにわたってテーブルを最適化できます。各データベースは設定フォームで独自のテーブル選択リストとして表示されます。
スケジュールされた夜間メンテナンス
時間間隔を設定して、モジュールが午前1:30から2:30の間に最適化を実行するよう設定します。週次頻度と組み合わせることで、手動介入なしに最もトラフィックの少ない時間帯にメンテナンスが実行されることを保証します。
PostgreSQLのvacuumスケジューリング
PostgreSQLデータベースは定期的なVACUUM操作の恩恵を受けます。PostgreSQLにはautovacuumがありますが、DB MaintenanceはDrupal対応のスケジューリングを提供し、特定のテーブルをターゲットにしてDrupalのCronシステムと統合できます。
Tips
- すべてのテーブルを最適化するのではなく、データの入れ替わりが激しいテーブル(cache_*、sessions、watchdog)に焦点を当てる
- 時間間隔機能を使用してオフピーク時間帯に最適化をスケジュールし、ユーザーへの影響を最小限に抑える
- ログが有効な場合は定期的にwatchdogログを確認し、最適化が期待どおりに実行されていることを確認する
- MySQLの場合、phpMyAdminのOverhead列を監視して、最適化の恩恵を受けるテーブルを特定する
- このモジュールは時間間隔の深夜またぎをサポート(例:23:00から01:00)
- 大幅なデータベース変更後に手動で最適化をトリガーするには「今すぐ最適化」リンクを使用する
Technical Details
Admin Pages 1
/admin/config/system/db_maintenance
データベーステーブル最適化設定を構成します。最適化するテーブルの選択、最適化頻度の設定、および最適化を特定の時間間隔に制限するオプションを設定できます。
権限 1
Hooks 1
hook_cron
スケジュールされたデータベーステーブル最適化を実行します。最適化を実行する前に、最後の実行から設定された時間間隔が経過したか、および現在の時刻が設定された時間制限ウィンドウ内にあるかをチェックします。
Troubleshooting 4
DrupalのCronが期待される頻度で実行されていることを確認してください。このモジュールはCronが実行されたときにのみ実行できます。また、時間間隔制限が有効になっているかどうか確認し、現在のサーバー時刻が設定されたウィンドウ内にあることを確認してください。
テーブルが存在しないというログメッセージが表示される場合、テーブルが削除または名前変更された可能性があります。設定ページに移動し、存在しないテーブルへの参照を削除するようテーブル選択を更新してください。
MySQLはOPTIMIZE TABLE操作中にテーブルをロックします。時間間隔機能を使用して低トラフィック時間帯に最適化をスケジュールするか、一度に最適化されるテーブルの数を減らしてください。CacheやSessionsなど、データの入れ替わりが激しいテーブルのみを最適化することを検討してください。
「administer db maintenance」権限があることを確認してください。フォームが正しく表示されない場合は、DrupalのCacheをクリアしてください。
Security Notes 3
- 「administer db maintenance」権限はデータベース操作を許可するため、信頼できる管理者にのみ付与すべきです
- 手動最適化リンクは不正なトリガーを防ぐためCSRFトークンで保護されています
- データベース認証情報はモジュールインターフェースを通じて公開されることはありません