【入門編】wp_optionsテーブルのautoload設定がサイト全体のメモリ消費に与える影響 – WordPress 内部コア・データベース構造とパフォーマンス最適化解析バイブル

こんにちは。WordPressの深淵へようこそ。

WordPressを学び始めると、誰もが一度は「なぜかサイトが重い…」という壁にぶつかります。その原因の多くは、実はコアの心臓部である `wp_options` テーブルに隠されているのです。

今日は、WordPressを「ただ使う人」から「掌握するエンジニア」へとステップアップするための、最も重要で、かつ見落とされがちな「autoload」の仕組みについて解説します。

—

1. `wp_options` テーブルという「心臓部」の正体

WordPressの `wp_options` テーブルは、サイトの「設定」を司る場所です。テーマのオプション、プラグインの有効化状態、サイトのURLなどがここに格納されています。

このテーブルには `autoload` というカラムが存在し、値は `yes` か `no` のどちらかです。

なぜ `autoload` が重要なのか?

WordPressのコア(`wp-settings.php`)は、ページがリクエストされるたびに、`autoload = ‘yes’` となっている全てのデータを一度にメモリへ読み込みます。

— 内部で実行されているクエリのイメージ
SELECT option_name, option_value FROM wp_options WHERE autoload = ‘yes’;

もし、この設定が何千件とあり、データ容量が数MBに達していたらどうなるでしょう? ユーザーがトップページにアクセスするたびに、WordPressはその重いデータを毎回PHPのメモリ上に展開しているのです。これが「サイト全体の低速化」の真犯人です。

—

2. 肥大化のサインを見抜く

「自分のサイトの `wp_options` は大丈夫か?」と思ったとき、以下のコマンドをターミナル(MySQL)で打ってみてください。これで、autoloadが有効なデータの総容量を確認できます。

— autoloadが有効なデータの合計サイズをKB単位で表示
SELECT SUM(LENGTH(option_value)) / 1024 AS autoload_size_kb
FROM wp_options
WHERE autoload = ‘yes’;

目安: 1MBを超えていたら要注意です。特にプラグインが削除された後も設定データが残っている「ゴミ屋敷」状態は、WordPressのパフォーマンスを確実に蝕みます。

—

3. なぜ「ゴミ」が溜まるのか?(陥りやすい罠)

開発者がプラグインを作る際、`add_option()` を使うことがありますよね。実は、この関数はデフォルトで `autoload` が `yes` に設定されます。

// 例:プラグインの設定を保存するコード
// 第3引数が省略されると、デフォルトで ‘yes’ (autoloadされる)
add_option( ‘my_plugin_heavy_data’, $huge_array );

// こう書くのがプロの嗜みです
add_option( ‘my_plugin_heavy_data’, $huge_array, ”, ‘no’ );

多くのプラグイン開発者は、設定画面のデータなら `yes` で問題ないと考えますが、その設定値が巨大な配列やログデータである場合、それは autoload すべきではありません。 `no` に設定することで、必要な時だけ `get_option()` で呼び出すのが賢い設計です。

—

4. 現場で使える「診断・修正」の極意

もしサイトが重いと感じたら、以下の手順でクリーンアップを行いましょう。

手順①:autoloadが巨大なオプションを特定する

WP-CLI(WordPressのコマンドラインツール)がインストールされているなら、これが最強です。

autoloadされているオプションの中で、データサイズが大きい上位10件を表示
wp db query “SELECT option_name, length(option_value) AS size FROM wp_options WHERE autoload = ‘yes’ ORDER BY size DESC LIMIT 10;”

手順②:不要なものを除外する

もし、プラグインをアンインストールしたのに残っているデータや、本来読み込む必要のない巨大なデータを見つけたら、`autoload` を `no` に変更します。

// データベースを直接いじるのは怖いので、update_option を使うのが安全です
// 一度データを取得して、再保存することで autoload を ‘no’ に書き換えます
$value = get_option( ‘heavy_option_name’ );
update_option( ‘heavy_option_name’, $value, ‘no’ );

—

最後に:なぜこの知識が必要なのか

WordPressを単なるツールとして捉えるか、あるいは高度なアプリケーションフレームワークとして捉えるか。その分かれ道が、この「`autoload`」の理解にあります。

「画面が映ればいい」ではなく、「メモリをどれだけ節約し、データベースのI/Oをどれだけ減らせるか」。この視点を持てば、あなたはもう初心者ではありません。

ここをクリアしたあなたは、WordPressの裏側で何が起きているのかをイメージできるはずです。次はぜひ、WordPressのキャッシュオブジェクト(Transient API)についても深掘りしてみてください。

WordPressの掌握、一緒に頑張りましょう!応援しています。

タイトルとURLをコピーしました