Wordpressのrevision機能でDBアクセスが遅くなったら
Wordpress 2.6以降では、postをセーブするたびにそのリビジョンがデータベースに書き込まれ保存されるすばらしい機能があります。しかし、毎回「Save Draft」や「Publish」をクリックするたびに強制保存されるので、油断してる間に膨大な数のリビジョンが保存されています。
何かおかしいと気づくのは、サイトや管理画面のアクセスが極端に遅くなった時。私は安い洋物共用サーバを使っているのでパフォーマンスの低下が半端じゃありません。何が原因かと思ってたらどうもリビジョンじゃないか?と思ってググったら一発でした。
しなければならないことは二つ。
- リビジョン機能の停止
- 今までにたまったリビジョンのクリーンアップ
リビジョン機能の停止
今後リビジョンが作られないように、Wordpressのインストールディレクトリにあるwp-settings.phpのphpの領域(までの間)に以下の一文を書き込みます。
define('WP_POST_REVISIONS', false);
2つ目の引数をfalseにすると、今後リビジョンが全く作られません。
falseの部分を1にすると、各postに1つだけ過去のリビジョンが保持されます。
また、同様に鬱陶しい場合があるAutosaveの間隔を変えるには同じくwp-settings.phpの
define('AUTOSAVE_INTERVAL', 60);
の60の部分を変更して対応します。
ここは秒数指定です。
今までにたまったリビジョンのクリーンアップ
flyingmango.jpが2.6以降にアップデートしてからというものの、post番号が急激に増えてるのでそのうちなんか起こるかなと思ってましたが。。。100件もアップデートしてないのに1200ものリビジョンが作られてました。
この1200ものリビジョンを下記のSQLで消すとあら不思議、管理画面が嘘のように軽くなりました。
DELETE FROM wp_posts WHERE post_type="revision";
wp-config.phpのDBプレフィックス設定で「wp_」から変更している方はテーブル名称にご注意。DELETEの前にSELECTで中身を見ておいたほうが安心できるかもしれません。
SQLの使用には十分注意してください!バックアップを忘れずに!
おまけ:DBがつぶれてました
普通はないと思うのですが、revisionを消す作業中に、MyPHPAdminでコマンドを実行すると「Incorrect key file for table: ‘…’. Try to repair it.」というエラーが出てきて消したいものが消せず。以下のコマンドのお世話になりました。(以下はMySQL4.1です。5は多少違うかも。)
- MySQLリファレンス:7.1.3.1. MyISAM テーブルが破損した場合 (MySQL 5.1はこちら)
- 4.5.4. CHECK TABLE 構文 (MySQL 5.1はこちら)
- 4.5.5. REPAIR TABLE 構文(MySQL 5.1はこちら)
現時点のWordpressのバージョンは2.7ですが「将来revision機能をUIで設定できるようにすべき」と本家本元のサイトのマニュアル(執筆途中)に書かれているので、今開発中の2.8のフィーチャーリストに入ってるかもしれません。



