8wired

とりあえずやってみるブログ

WordPressが重い症状が解決!原因はSNS Count Cacheでした

投稿日:

ここ1年くらいの懸案だったWordPress(別サイト)が重い症状が解決しました。

WordPressが重い原因は環境により様々だと思いますが、同じ原因でトラブルが発生している方がいるかもしれないので情報を残しておきます。

このページで紹介する対処方法は、下記2点に心当たりのある方に該当するかもしれません。

  • wp_optionsテーブルでGot a packet bigger than ‘max_allowed_packet’ bytesのエラーが発生したことのある方
  • SNS Count Cacheを使っている/使っていた方

対処方法

私の環境で対処した方法を説明します。

WP_OPTIONSテーブルの確認

WP_OPTIONSはアクセスの度に読み込まれるため、肥大化するとパフォーマンスが著しく低下します。

余計なレコードがあったり、不適切なレコードが格納されていないか確認してみてください。

wp_optionsテーブルデータサイズの確認

wp_optionsテーブルのデータサイズを確認します。

WordPressで使用しているテーブルのデータサイズは、WP-Optimizeなどのプラグインを使うと簡単に確認できます。私の環境では、wp_optionsテーブルのデータサイズは約110MBです。

レコードが貯まっていると1GBを超えることもよくあります。データサイズが大きい場合には対処が必要です。

レコードの確認

wp_optionsテーブルのデータサイズが大きい場合、不要なレコード、不適切なレコードがないか確認します。

> select option_name, char_length(option_value) as length from wp_options order by length;

コマンドを実行すると、option_name、option_valueの文字数の一覧が文字数の昇順に表示されます。

同じ文字列のレコードの確認

option_nameに同じ文字列から始まるものが沢山あれば、それは肥大化原因の可能性があります。適宜削除するなり対処してください。

文字数の多いレコードの確認

極端に文字数が多いレコードも問題があります。

私の環境では、いつからかMySQLがwp_optionsのクエリ処理中に下記のエラーを度々出力するようになっていました。

Got a packet bigger than ‘max_allowed_packet’ bytes

当初は疑問を持たず、MySQLのパラメータ「max_allowed_packet」の値を8M→32Mと増やしてエラーを解消させていましたが、今にして思えばこれが勘違い。wp_optionsに8Mを超える文字数が格納されていることを疑問視するべきでした。

問題のレコードは、option_name='cron'でした。

cronは、WordPressのcronジョブが格納されているレコードなのですが、これにSNS Count Cacheのジョブが数万件格納されており、option_valueが肥大化し、max_allowed_packetの上限値を超え、MySQLのエラー原因となったようです。

SNS Cout Cacheは、かなり前にカウントされなったので使わなくなっていたのですが、こんな爆弾を残していってくれたようです。

cronジョブの削除

cronジョブは、Advanced Cron Managerなどのプラグインを使えば個別に削除できます。

私は個別に削除するのが面倒だったのでcronレコード自体を削除してしまいました。削除後にwp_cron.phpを手動で実行したらcronレコードが作成され、cronジョブは実行されたみたいなんですが、真似はしないでください。

サーバ負荷状況

wp_optionsの不要なレコード、cronレコードの削除などをした結果、サーバ負荷はかなり改善しました。グラフを見れば一目瞭然です!

サクサクという程ではありませんが、管理サイトの重さを意識することはなくなりました。

まとめ

WordPressが重い原因は環境により様々だと思いますが、症状改善の一助になれば幸いです。

参考にしたサイト

ブログがまたも閲覧不可に!原因はWordPressプラグインとcronでした。対処方法をご紹介 | ラブグアバ
WordPressのデータベースwp_optionsテーブルが極度に肥大した際の対策。 | ぽちろぐ

-WordPress

Copyright© 8wired , 2019 All Rights Reserved Powered by STINGER.