WordPressのwp_postmetaテーブルを掃除する

たとえば、この「がとらぼ」の様にのんびり手打ちで作るような個人ブログではあまり関係ありませんが、WordPressの管理画面は大量のデータを引っ張ってきてコンテンツをドバッと作るような操作は出来ないのでそれ用のスクリプトを作って行います。大規模なコンテンツサイトを構築する場合はカスタムフィールドにデータを突っ込むことになると思いますが、そこに適当に作ったスクリプトでデータを入れると「汚れる」ことがよくあります。(そんないいかげんなスクリプトを使ってはいけませんね)

汚れ方として多いのは「データの重複」。WordPressのカスタムフィールドはいくらでも重複データを置けてしまうのでうっかりバグったスクリプトでデータを流し込むとアホみたいに重複データが溜まります。で、無駄なデータが溜まり過ぎるとWordPressの記事表示が遅くなります。
これを綺麗にするにはMySQLでpw_postmetaテーブルを触って重複データを除いてやります。

wp_postmetaテーブル
meta_id post_id meta_key meta_value
ここは自動採番 コンテンツ番号 カスタムフィールド(名前) カスタムフィールド(値)

この内のpost_id, meta_key, meta_value(緑の部分)の全てが重複したものを対象とします。

SQLクエリ

DELETE wp_postmeta FROM wp_postmeta INNER JOIN (SELECT post_id, meta_key, meta_value, MIN(meta_id) AS min_id, COUNT(*) FROM wp_postmeta GROUP BY post_id, meta_key, meta_value HAVING COUNT(*) > 1) AS DUPLICATION ON wp_postmeta.post_id = DUPLICATION.post_id AND wp_postmeta.meta_key = DUPLICATION.meta_key AND wp_postmeta.meta_value = DUPLICATION.meta_value AND wp_postmeta.meta_id <> DUPLICATION.min_id;

データが数十万件程度なら数秒で重複したデータが綺麗に消えます。(重複したデータの内のmeta_idが最小のものが1件残ります。)

wp_postmetaテーブルのmeta_valueの値が重複するというのは正常な場合でもあることなので精査せずに全ての重複を嫌わないようご注意ください。

ルーターPC交換

年末年始にかけて家のネットワークが繋がったり繋がらなかったり遅かったりとグダグダに。調べたところ、L2SWのFlets網用VLANのポートの1つでCRCエラーが大量に検知されていた。
そのポートの対向は家庭用LANのルーター。この記事で紹介しているpfSenseの載った古いもの。既に5,6年使っているので老朽化でしょうかね。
お金は無いけどネットにまともに繋がらないのではどうしようもないので何とかするしかない。

今回の狙いはIntelのCeleron j1900を積んだマザーボード。j1900はCPU単品売りは無いので選択肢は少ない。TDP10W程度とかなりの省電力でありながらIntel Core2 Duo E8200やノートPC用のIntel Core i3 M 350, AMD Phenom 8450 Triple-Core辺りと同程度の性能。
これまで使ってきたVIA C7 1.5Gzに比べて性能は6.5倍、消費電力はPC全体としては寧ろ下がると良いことが多い。
ちなみにj1900とj1800は型番からするとそんなに差が無いように思えるが、j1900がクアッドコアj1800がデュアルコア、性能はj1900の方が1.8倍程度高くそれでいて消費電力は殆ど変わらず価格も大して違わない。j1800を選ぶ理由は特に無いかと。

数軒の店を廻ってみると意外と価格がバラバラ。テクノハウス東映でGIGABYTEのGA-J1900N-D3Vが他店平均より2,000円程度安く、商品のポップには最新のF3 BIOSに更新済みとの記載があった。
このマザーボード、NICが2つ付いているのでルーターにするのにボード追加が不要なので都合が良い。ただ、事前に調べていた中では評判はあまり芳しくない。特にF2 BIOSまではトラブル続出だったようだ。
pfSenseの掲示板ではネットワーク周りで問題有りの報告があったので少し躊躇したが、F3 BIOSで解決されていることを信じて購入。
メモリはSO DIMMで、DDR3 1333MHz低電圧タイプの2GBを1枚購入。前のシステムと同じくハードディスクは無し。

GIGABYTE GA-J1900N-D3V 1
GA-J1900N-D3Vのバックパネル側。NICが2つある。何故かシリアルポートも2つある。モニタ用の出力はD-sub15pinとDVI-D(Dual-Link)が1つずつ。HDMIは無し。USBポートも4つだけ。あまり家庭向けな感じではない。特定用途向けなら蟹NICでなくもっと信頼性の高いのを載っけてくれれば良いのに。

GIGABYTE GA-J1900N-D3V 2
最近は当然のように多くなっているオール固体コンデンサ。マザーボード中央(写真では左上の方)の大きな黒いのはCPU用のヒートシンク。このサイズだと熱を逃しきれなさそうなのでケースの冷却ファンでヒートシンク周りの空気を動かしてやる必要がありそう。手前の長くて黒いのは古いPCIバス。その右がMini PCI-E。SATAのポートは写っている2つだけ。マザーボード上のUSB増設用ピンコネクタも1つだけなので拡張性はあまり無い。

ボケて写っているが今回はメモリは1枚しかないのでスロットの1番(下側)に挿す。1枚で2番側に挿すのはダメな筈。

GIGABYTE GA-J1900N-D3V 3
前システムとは違うケースを利用して収めたところ。丁度ヒートシンクの上にケースの排気ファンがあるので都合が良かった。

BIOSの設定は掲示板の情報によると以下のもの(でないとpfSenseは動かない)。

Advanced -> CSM Configuration

CSM Support - Enabled
Boot Option filter - Legacy Only
Network - Do not launch
Storage - Legacy Only
Video - UEFI First
Other PCI devices - Legacy Only

Advanced -> USB Configuration

Legacy USB support - Enabled
USB3.0 support - Enabled
XHCI hand-off - Disabled
EHCI hand-off - Disabled
USB Mass storage device support - Enabled

Chipset -> South Bridge (I think? If I remembered correctly.)
Restore after AC power loss - Power On

pfSense LiveCDからのインストールはカーネルパニックが発生して全くダメでした。(情報どおり)
pfSenseのMemstickイメージをUSBメモリに焼いて起動。もう一枚のUSBメモリにインストールでOK。

おかげさまで無事にpfSenseが動きました。前のVIA C7より速いのでIPSecのVPNが少し快適に。圧倒的な性能差の割りには効果が微妙ですが。

関連記事:
Up