プラグイン

カスタムフィールドをガシガシ使うとpostmetaが肥大してデータベースの取り回しに苦労する?

2017.10.25

複製

WordPressのカスタマイズに欠かせないカスタムフィールドなのですが使いすぎには注意が必要かもしれません。カスタムフィールドは投稿画面に入力項目を追加でき、イカした機能なのですが、長年運営しているとpostmetaが肥大してきて、データベースのバックアップや取り回しに不便が生じます。

先日WordPressで制作したサイトの改修を行うために現状のサイトを複製してテストサイトを作ろうとした時のことです。手順通りphpMyAdminでデータベースをエクスポートし、テストサイトのDBにインポート、ファイルのアップも完了し、いざ管理画面にアクセスするも管理画面にはいれません。

うん?パスワードまちがったかな?と何度調べても管理画面にはいれません。パスワードの再発行を行おうとしても、そんなメールアドレスは登録されてないよと返ってきます。なんでやねん!と突っ込みながらもエクスポートしたSQLファイルをとりあえず検索すると、確かにメールアドレスはありません。sqlファイルをよくよくみるとエクスポートが途中で途切れていました。

postmetaの肥大でエクスポート出来なかった

原因はpostmetaの肥大です。postmetaの行数が10万を超えていました。
そりゃエクスポート出来ないよ!てな訳で対策方法を考えます。

データベースのバックアップ方法

なにか対策を行うにしてもバックアップなしで行うのは怖すぎますので、まずバックアップを行います。10万行とかになっていると、テーブルだけに絞ってもエクスポート出来ませんので、phpMyAdminは諦めてSSHでdumpすることにします。

# mysqldump -u root -p データベース名 > dump.sql

コマンドを実行すると今いるディレクトリに生成されます。

とりあえずバックアップに不安はなくなったので、postmetaをシェイプアップしてやろうかと思います。

postmetaが肥大した原因

カスタムフィールドの多様がpostmetaの肥大に繋がったのは間違いありませんが直接的な原因はリリビジョンです。リビジョンは投稿のバージョンです。マメに保存するとびっくりするぐらいリビジョンが増えます。なのでリビジョンをなんとかしないことにはpostmetaのシェイプアップは図れません。

不要なリビジョンを削除する

postmetaでなかったならSQLからリビジョンを削除するのですが、postmetaは一括削除出来ませんので、一つ一つチェックするか、プラグインを利用します。普通にプラグインですよね!プラグインの候補は2つあります。

  • WP-Sweep
  • Optimize Database after Deleting Revisions

WP-Sweep

WP-Sweepはリビジョンやデータベースの不要な項目を削除するプラグインです。ただデータ量が多いと処理が実行しきれないかもしれません。データ量が少ない場合はこちらの方が特にセッティングとかもなく直感的に使えていいかもしれません。

Optimize Database after Deleting Revisions

Optimize Database after Deleting Revisionsもリビジョンを削除したりデータベースの最適化を行うプラグインです。設定項目が多いわりにシンプルにつかえます。データベースの容量が多くてもしっかり処理してくれました。

Optimize Database after Deleting Revisionsの設定項目

Delete revisions for the following (custom) post type(s):

ポストタイプのチョイスです。最適化を行うポストタイプにチェックを入れておきます。

Delete revisions older than

何日分のリビジョンをのこしておくか設定します。

Maximum number of – most recent – revisions
to keep per post / page

いくつリビジョンを残しておくか設定します。全部消すなら0です。

Delete trashed items

ゴミ箱のアイテムを消す場合はチェックです。

Delete trashed items

スパムの削除を行う場合はチェックです。

Delete unused tags

使用していないタグを削除するらしいのですが、タグどのタグなんだろう?よくわからなかったのでチェックしていません。

Delete transients

一時的に保存されるデータの削除を行うがどうかです。セレクトボックスの上から

  • 削除しない
  • 期限切れの一時的に保存されるデータを削除する
  • 全ての一時的に保存されるデータを削除する
Delete pingbacks and trackbacks

ピンバック・トラックバックを削除するかのチェック。

Optimize InnoDB tables too

InnoDB タイプのテーブルを最適化するかどうかのチェック。ストレージエンジンのことをよくわかってないので、チェックしていません。

Keep a log

最適化のログを残すかどうかです。

Scheduler

リビジョンの削除を自動で定期的に行うなら設定します。

Optimize Database after Deleting Revisionsの実行

セッティングが終わったらGo To Optimizerボタンをクリックして実行画面に遷移し、Start Optimizationボタンをクリックしてリビジョン削除を実行します。

データのスリム化

かなりのスリム化が実行できました。

リビジョンがたまらないようにする

定期的にDBのメンテナンスは行うとして、リビジョンが必要以上にたまらないようにリビジョン機能を制限します。wp-config.phpに下記のいずれかを記述します。

//リビジョンを停止する場合
define('WP_POST_REVISIONS',false);

//最大値を制限する以下は3で制限
define('WP_POST_REVISIONS',3);

WEBSITE DESIGN REQUEST

ホームページ制作依頼について

W・D・Sでホームページ制作をご希望の方はお気軽にご相談ください。
制作内容、ご予算、納期をお知らせいただくとスムーズです。

ホームページ制作を相談する