WordPressは、DBの状態に結構影響を受ける。
なので「遅いかな? 調子悪いかな?」と思ったら、1回お掃除することをオススメする。
このお掃除、プラグインで最適化ツールを入れたら良いということは解っている。
しかしプラグインって、使っているとジワジワ増えません?
無効化するにしても、たまの1回のために置いておきたくないし、いっぱいあるし、後日使おうと思ったらプラグイン名忘れてるし。
あとね…SQLite使っているんですよ!
なので、プラグインを使うことなく、お掃除しようぜ!という情報集めです。
別のデータベースでも使える情報ではあるよ!
まずは事前準備!
データベースを直接いじるのであるから、もしものときがないとは限らない。
バックアップ
忘れちゃいけないバックアップ。
し忘れた場合、もしもの場合戻せない。大事!
めんどくさければ、プラグインを使うでもいいけど、それなら最適化も使おうよ。
メンテナンスモード
公開中の物を変更する場合、WordPressのインストールディレクトリに『.maintenance』置いて『メンテナンスモード』にしておくことをオススメする。
終了後はこのファイルを削除しないと、公開状態に戻せないので忘れずに消すこと!
めんどくさければ、プラグインを使えばいいけど、それなら最適化にも使って…
テーブルを掃除する
「使っていない情報を消していこう!」という発想の掃除対象。
消えても問題ない情報だけを出している…ハズ!
※自己責任ですよ! バックアップは必須ですよ!
wp_post
基本的には投稿データやカスタムメニューが保存される。
プラグインによっては別の内容が保存されることも。
個人的には消すより、『post_type=post』、『post_status=private』にして残す方をオススメする。
リビジョン
記事の修正する都度保存されるもの。個人的にはこの機能自体不要と思っている。(キリ
DELETE FROM wp_posts WHERE post_type = 'revision';
継承
リビジョンとほぼ同じ。基本的にリビションを消したら消えるかと。
DELETE FROM wp_posts WHERE post_status = 'inherit';
ゴミ箱
記事を『削除』してもゴミ箱に入っている。
DELETE FROM wp_posts WHERE post_status = 'trash';
自動下書き
プラグインで使っていることもあるから、直接テーブル見て、問題ないことを確認してから消すことをオススメする。
DELETE FROM wp_posts WHERE post_status = 'auto-draft';
wp_postmeta
『wp_post』に関連する内容が保存される。
例えば『wp_posts』にカスタムフィールドを追加すると『wp_postmeta』テーブルにデータが追加される。
スラッグ変更履歴
アクセスとか見ていて、やはりスラッグを変えようと思うこともある。
その履歴がこのデータ。
DELETE FROM wp_postmeta WHERE meta_key = '_wp_old_slug';
複数ユーザーの同時編集の防止用データ
自動的に出来るのだが、自動的に消えるかは怪しいとの噂。
DELETE FROM wp_postmeta WHERE meta_key = '_edit_lock'; DELETE FROM wp_postmeta WHERE meta_key = '_edit_last';
重複したデータ
WordPressのwp_postmetaテーブルを掃除する - がとらぼによると、post_id、meta_key、meta_value全て重複したデータが出来ることがあるらしい。
その場合、IDが最小のものだけ残して消す。
自分はなかったし、参照元に書いてあるのは、MySQLだけだから、ここにSQLは記載しない。ご容赦!
投稿をゴミ箱に入れた履歴
捨てた記録…要るかなぁ…と。
DELETE FROM wp_postmeta WHERE meta_key LIKE '%wp_trash_meta%';
カスタムメニュー消した後に残ったゴミ
もし『カスタムメニューを消したなら』、残しておいても無意味なので消す。
消してなければ、そのままに!
DELETE FROM wp_postmeta WHERE meta_key LIKE '%_menu_item_%';
meta_key=_oembed_XXXX、meta_value={{unknown}}
「oEmbed」機能で自動で作成されるデータ。
消してもアクセスしたら出来るから無駄だけど、重複しているのもあるし掃除のために消しても良い。
DELETE FROM wp_postmeta WHERE meta_value = '{{unknown}}';
重複したものだけ消したいなら
delete from wp_postmeta where meta_value = '{{unknown}}' and ( meta_id not in ( select min_id from ( select min(meta_id) as min_id from wp_postmeta where meta_value = '{{unknown}}' group by post_id ) ) );
だと思う…。
※自己責任
YoutubeやTwitterの自動埋め込みを使わないなら、切ってしまってもよいかと。
remove_filter( 'the_content', array( $GLOBALS['wp_embed'], 'autoembed' ), 8 );
wp_postmetaテーブルの「_oembed_ {{unknown}}」というデータは削除してもよいのか? – ブログ運営のためのブログカスタマイズ
wp_comments
記事に対するコメント。完全削除していれば基本的には気にしなくていい。
スパム
スパムを削除したら無くなるハズではある。
DELETE FROM wp_comments WHERE wp_comments.comment_approved = 'spam';
wp_commentmeta
コメントのメタデータ。
Akismetプラグイン関連
このプラグイン、データをモリモリ作るので、個人的には好きではない。
使っていなくて関連データ全てを消すなら
DELETE FROM wp_commentmeta WHERE meta_key LIKE '%akismet%';
使っている人でも『akismet_history(対応内容の記録)』は消していいと思う。
消したコメントのメタ情報
スパム等で消したコメントのメタが残っている場合消す。
基本的には消したら消える。
DELETE FROM wp_commentmeta WHERE comment_id NOT IN (SELECT comment_id FROM wp_comments);
コメントをゴミ箱に入れた履歴
捨てた記録…要るかな? スパム等ゴミ箱になど次々入れるっつの。
基本的にはゴミ箱から消したら消える。
DELETE FROM wp_commentmeta WHERE meta_key LIKE '%wp_trash_meta%';
wp_options
wordpressのオプション。
カスタムメニューの設定とかさ、こっちに書いてくれれば良くない?
postは違うだろよ~と思っている。
一時的なデータ
キャッシュデータを掃除する。
DELETE FROM wp_options WHERE option_name LIKE '%_transient_%';
番号を振り直す
次々データ作るから、数字は増えるし、番号も飛び飛び。
meta_idデータに紐付けられた情報は、通常ない。
同様にoption_idも紐付けが、通常はない。
だから番号を振り直しても、通常は問題ない。
消した後はsqlite_sequence (AUTOINCREMENT) を消す。
ただ、プラグインによってはわからないので、絶対は保証出来ない。
なのでスゴく自己責任です!
update wp_options set option_id = (SELECT COUNT(*) FROM wp_options temp2 WHERE wp_options.option_id >= temp2.option_id) where wp_options.option_id >= option_id; update wp_postmeta set meta_id = (SELECT COUNT(*) FROM wp_postmeta temp2 WHERE wp_postmeta.meta_id >= temp2.meta_id) where wp_postmeta.meta_id >= meta_id; update wp_commentmeta set meta_id = (SELECT COUNT(*) FROM wp_commentmeta temp2 WHERE wp_commentmeta.meta_id >= temp2.meta_id) where wp_commentmeta.meta_id >= meta_id; DELETE FROM sqlite_sequence;
sqlite_sequenceは個別に消す方が安全。
DELETE FROM sqlite_sequence WHERE name = 'wp_options';
不要なテーブルを消す
最低限、WordPressを動かすのに必要なテーブルは下記。
- wp_commentmeta
- wp_comments
- wp_links
- wp_options
- wp_postmeta
- wp_posts
- wp_registration_log
- wp_signups
- wp_site
- wp_sitemeta
- wp_term_relationships
- wp_term_taxonomy
- wp_termmeta
- wp_terms
- wp_usermeta
- wp_users
他はプラグインやテンプレートなど、必要に応じて作られたもの。
なので、使わなくなったら消してもいいのだ。
『wp_ktaisession』なんてあったけど、いつから使っていないのだろう…
データベースをデフラグ
データを削除することで断片化が進んでいるので、1回整える。
MySQLなら下記を実行すれば、断片化解消が出来る。
ALTER TABLE テーブル名 ENGINE=INNODB
SQLiteなら下記を参照に、デフラグしてください。
SQLiteファイルをデフラグする
あくまでテーブルの掃除終了後に、デフラグしないと意味がないぞ!
コメント