えっ!830MB!?WordPressのデータベースがめちゃくちゃ肥大していた件

何を隠そうこのサイト(taracohouse.com)でのお話です。

当サイトはWordPressで運営しており、BackWPupというプラグインで定期的なバックアップをとっています。バックアップは深夜自動的にFTP経由で他のサーバへと送られる全自動なので、エラーメールが届かないうちはずっと安心して放置していました。

本日、久々に「たまには自サイトのメンテでもするかあー」とデータベースの最適化を試みてビックリ。

ええっ!「データベースの合計サイズ:830.71MB」ってなんやねん!?

容量が1GBオーバーのバックアップデータはお客様の環境でしばしば見かけますが、通常はメディア(写真や動画など)で容量を消費しているパターンです。データベースだけで800MB越えとか初めて見ました。
まして現時点でページ数50ページにも満たないサイトなのにおかしい・・・明らかにおかしい。。

不自然に肥大したwp_postとwp_postmeta

バックアップデータをテスト環境に入れ、各テーブルを確認してみると不自然に容量が大きいテーブルが2つ。
wp_postレコード数117,803件273MB。
wp_postmetaレコード数2,117,117件414MB。

wp_postは投稿のデータだけど、wp_postmetaってなんだっけ・・・?
調べてみると「各投稿記事特有の情報を格納」だそう。

データの中身を覗いてもさほぞ重要そうなデータには思えなかったので、試しにエイヤッ!と削除してみる。すると各投稿ページのサムネイルが抜けてしまったり、グローバルメニューが欠落したりと、やはり不具合が。(そりゃそうだ)

プラグインを使った最適化やクリーンアップでは改善せず

有名どころの「WP-Optimize」や「WP-DBManager」など、データベースの最適化や不要なレコードのクリーンアップを実行するプラグインを試してみるも効果は微妙。若干は容量が少なくなるものの、たいした改善は見られませんでした。

やはりsshなりphpMyAdminなりを使い、SQLコマンドで不要なレコードの削除を実行しないと改善は見込めないようです。

どうやらFlamingoとAkismetの残骸らしい

wp_postの中を調べてみると、プラグインの「Flamingo」のキーらしきものを多数発見。同様にwp_postmetaの中はプラグイン「Akismet」のキーがいっぱい。

ネット検索では、このような記事が見つかりました。

要はFlamingoとAkismetとが干渉して、クリーンアップの機能が働いていなかったみたいです。

SQLコマンドを使ってクリーンアップしてみた

【注意】以下のコマンドを実行される場合、この2点に(絶対に!)ご注意下さい。
1.必ずデータベースのバックアップを取り、復旧できる環境でお試し下さい。
2.責任は一切持てません、実行は自己責任でお願いします。

※下記コマンドの接頭辞(wp_)の部分はご利用のWordPressに合わせて変更して下さい。


Flamingo関連のレコードを削除
DELETE FROM wp_posts WHERE post_status LIKE ‘flamingo_spam’

たぶん上記だけでOKのはずですが、一度すっきりとリセットもしたかったので↓も実行。
DELETE FROM wp_posts WHERE post_type LIKE ‘flamingo_inbound’
DELETE FROM wp_posts WHERE post_type LIKE ‘flamingo_contact’

これでwp_postのレコード数は117,803件から150件に、容量273MBから178KBと大幅に激減しました。

Akismet関連のレコードを削除
DELETE FROM wp_postmeta WHERE meta_key LIKE ‘_spam_meta_time’
DELETE FROM wp_postmeta WHERE meta_key LIKE ‘_submission_status’
DELETE FROM wp_postmeta WHERE meta_key LIKE ‘_subject’
DELETE FROM wp_postmeta WHERE meta_key LIKE ‘_from’
DELETE FROM wp_postmeta WHERE meta_key LIKE ‘_from_name’
DELETE FROM wp_postmeta WHERE meta_key LIKE ‘_from_email’
DELETE FROM wp_postmeta WHERE meta_key LIKE ‘_field_your-name’
DELETE FROM wp_postmeta WHERE meta_key LIKE ‘_field_your-email’
DELETE FROM wp_postmeta WHERE meta_key LIKE ‘_field_your-subject’
DELETE FROM wp_postmeta WHERE meta_key LIKE ‘_field_your-message’
DELETE FROM wp_postmeta WHERE meta_key LIKE ‘_field_submit’
DELETE FROM wp_postmeta WHERE meta_key LIKE ‘_fields’
DELETE FROM wp_postmeta WHERE meta_key LIKE ‘_meta’
DELETE FROM wp_postmeta WHERE meta_key LIKE ‘_akismet’
DELETE FROM wp_postmeta WHERE meta_key LIKE ‘_consent’

(↑SQLに詳しい人だと、これを1行で書いちゃうんだろうなあ。。)

ついでにreCAPTCHA関連のレコードも目についたので削除

DELETE FROM wp_postmeta WHERE meta_key LIKE ‘_spam_log’
DELETE FROM wp_postmeta WHERE meta_key LIKE ‘_field_recaptcha_response_field’
DELETE FROM wp_postmeta WHERE meta_key LIKE ‘_field_recaptcha_challenge_field’
DELETE FROM wp_postmeta WHERE meta_key LIKE ‘_hash’

何のキーだろう?自分の環境ではこれも削除して問題なしでした。
DELETE FROM wp_postmeta WHERE meta_key LIKE ‘_email’
DELETE FROM wp_postmeta WHERE meta_key LIKE ‘_name’
DELETE FROM wp_postmeta WHERE meta_key LIKE ‘_props’
DELETE FROM wp_postmeta WHERE meta_key LIKE ‘_last_contacted’

これでwp_postmetaはレコード数2,117,117件から1,194件に、容量は414MBから175KBと大幅に激減しました。

WordPressでのトラブルにお困りの方、ご相談下さい!

  • ログインできなくなった
  • サイトが表示されない、表示がおかしい
  • サーバの引越しをしたい
  • ハッキング(クラッキング)された、など

軽度の事案から重度の被害まで対応できますのでご相談下さい。