Zaudytuj autoloadowane dane: dwa zapytania
Wklej to w phpMyAdmin, Adminer albo wp db query — pierwsze daje łączny rozmiar autoloadu w KB, drugie listuje 25 opcji, które go robią. Zmień prefiks wp_, jeśli twój jest inny.
-- Total autoloaded data (KB) + row count
SELECT ROUND(SUM(LENGTH(option_value)) / 1024, 1) AS autoload_kb,
COUNT(*) AS autoload_count
FROM wp_options
WHERE autoload IN ('yes', 'on', 'auto', 'auto-on');
-- Top 25 offenders, biggest first
SELECT option_name,
ROUND(LENGTH(option_value) / 1024, 1) AS size_kb,
autoload
FROM wp_options
WHERE autoload IN ('yes', 'on', 'auto', 'auto-on')
ORDER BY LENGTH(option_value) DESC
LIMIT 25;
WordPress 6.6+ zapisuje 'auto' i 'auto-on' obok klasycznych 'yes' i 'on'. Każde zapytanie audytowe, które sprawdza tylko autoload = 'yes', zaniża prawdziwy rozmiar autoloadu — stąd tyle stron wygląda dobrze na papierze, a i tak ładuje rozdęty zestaw przy każdym żądaniu.
Autoloader WordPress kontra autoloadowane dane
„Autoloader” w WordPressie znaczy dwie niepowiązane rzeczy i wyszukiwanie zwraca obie. Warto trzydzieści sekund, żeby sprawdzić, która cię dotyczy.
| Jak to ludzie nazywają | Czym to naprawdę jest | Czy spowalnia stronę? |
|---|---|---|
| Autoloader klas PHP Composer, spl_autoload_register, PSR-4 |
Funkcja, która ładuje plik klasy PHP przy pierwszym użyciu, żebyś nie pisał require ręcznie. |
Prawie nigdy. To lookup w systemie plików, zwykle cache’owany przez OPcache. |
| Opcje autoloadowane Kolumna autoload w wp_options |
Wiersze, które WordPress wciąga do pamięci przy każdym żądaniu, zanim poleci twój kod. | Tak. To ten, który cię kosztuje, i o nim jest reszta tej strony. |
Jeśli trafiłeś tu, bo hosting oflagował „autoloaded data”, albo po alloptions w profilerze — chcesz ten drugi. Jeśli debugujesz fatal Class not found, chcesz pierwszy i ta strona nie pomoże: to problem Composer albo PSR-4.
Zwrot „plugin autoloader” jest niejednoznaczny tak samo. Wtyczka wozi autoloader Composer dla własnych klas i też zapisuje opcje autoloadowane. W zapytaniu poniżej widać tylko to drugie.
Czym są autoloadowane dane?
WordPress ma jedno zapytanie, które leci przy każdym załadowaniu strony, zanim wykona się kod motywu albo wtyczki:
SELECT option_name, option_value
FROM wp_options
WHERE autoload = 'yes'
To ładuje wszystkie opcje „autoloaded” do pamięci naraz. Rdzeń WordPress potrzebuje ok. 100KB tych danych. Problem w tym, że wtyczki to nadużywają.
Wyłączasz wtyczkę. Jej dane zostają w wp_options z autoload='yes'. Instalujesz 30 wtyczek przez 2 lata. Teraz ładujesz 5MB danych przy każdym żądaniu—w większości po wtyczkach, których już nie używasz.
W przeciwieństwie do wolnych zapytań, które skaczą TTFB od czasu do czasu, rozdęcie autoloadu to stały podatek. Dokłada latencję do każdego żądania—z cache’em albo bez, frontend czy admin, AJAX czy załadowanie strony.
Zdrowy rozmiar autoloadu: progi dla wp_options
Traktuj łączny rozmiar autoloadu jak budżet, nie metrykę do chwalenia się. Odpal powyższe zapytanie audytowe, potem porównaj swoją liczbę z tą tabelą.
| Rozmiar autoloadu | Werdykt | Co robić |
|---|---|---|
| Poniżej 300 KB | W porządku | Nic. Sam rdzeń WordPress potrzebuje ok. 100 KB — jesteś w normie. Sprawdź ponownie po dużych instalacjach wtyczek albo migracji. |
| 300–800 KB | Obserwuj | Odpal zapytanie top-25. Zobacz, które wtyczki trzymają największe wiersze, i wyłącz autoload na sierotach i starych cache’ach, zanim urosną. |
| 800 KB–1 MB | Działaj | Przekroczyłeś próg, który flaguje większość hostingów zarządzanych. Zaplanuj czyszczenie w tym tygodniu. Lepiej autoload='no' niż kasowanie wierszy. |
| Powyżej 1 MB | Pilne | WordPress cache’uje cały zestaw autoload jako jeden klucz alloptions. Wiele setupów Redis/Memcached ogranicza jedną wartość do ~1 MB, więc za duży zestaw może cicho nie wejść do cache — albo wyjść jako przerywane 502 pod obciążeniem. |
Strony z ponad 3MB autoloadowanych danych to norma. Widzieliśmy strony z 10MB+ —to 10MB z MySQL do PHP przy każdym żądaniu, zanim WordPress w ogóle zacznie budować stronę.
Ostrzeżenie WP Engine „Autoloaded Data”: co robić
WP Engine flaguje autoloadowane dane po przekroczeniu 800 KB i wszystko poniżej traktuje jako normę. To jeden z niewielu hostingów, które pokazują to jako ostrzeżenie w panelu, stąd większość ludzi spotyka problem u nich. Fizyka nie zależy od hosta — każde żądanie wciąga cały zestaw do PHP, u kogokolwiek jesteś.
Ostrzeżenie podaje liczbę i nic więcej. Oto co z nią zrobić.
-
Najpierw zmierz sam. Odpal zapytanie audytowe z góry tej strony. Panele hostingów próbkują według harmonogramu, więc liczba może mieć kilka godzin, a niektóre panele wciąż sprawdzają
autoload = 'yes', co zaniża wynik na WordPress 6.6+, bo rdzeń zapisuje też'on','auto'i'auto-on'. Panel mówiący „w normie” to nie dowód. -
Znajdź sprawców, nie sumę. Suma to objaw. Wypisz top 25 wierszy po
LENGTH(option_value)i zwykle znajdziesz trzy–cztery wiersze, które niosą większość wagi. - Każdą pozycję sprawdź z listą „nie ruszaj” niżej na stronie, zanim cokolwiek zmienisz. Część dużych opcji autoload ma prawo być duża.
-
Wyłącz autoload, nie kasuj.
wp option set-autoload OPTION_NAME offzostawia dane i da się cofnąć. Kasowanie wierszy to sposób, żeby zepsuć ustawienia wtyczki. - Zmierz ponownie i daj panelowi dogonić. Ostrzeżenie znika przy następnym sprawdzeniu WP Engine, nie od razu.
Jedno zastrzeżenie specyficzne dla hostingów zarządzanych na memcached: powyżej ok. 1 MB blob autoloadu może przekroczyć limit na klucz, więc cicho nie wejdzie do cache i każde żądanie wraca do bazy. To gorsze, niż sugeruje ostrzeżenie, i wychodzi jako losowe 502 w wp-admin, a nie jako wolna strona.
Zejście poniżej 800 KB ręcznie to parę godzin ostrożnej roboty. Autoloader Optimizer WP Multitool robi ten sam audyt, kategoryzuje każdy wiersz i odwraca bezpieczne z przywracaniem jednym kliknięciem.
Co powoduje rozdęcie autoloadu WordPress
1. Pozostałości po wyłączonych wtyczkach
Większość wtyczek nie sprząta po sobie. Dodają opcje przy aktywacji i zostawiają je na zawsze—nawet po wyłączeniu i usunięciu. Znajdź je:
SELECT option_name, LENGTH(option_value) AS size
FROM wp_options
WHERE autoload = 'yes'
ORDER BY size DESC
LIMIT 20;
Szukaj nazw opcji po wtyczkach, których już nie używasz. Te bezpiecznie ustawisz na autoload='no' albo skasujesz całkiem.
2. Serializowane tablice, które rosną
Część wtyczek trzyma rosnące dane w jednej opcji: logi, snapshoty analityki, harmonogramy cron. Jeden option_value to bywa 500KB+ serializowanego PHP.
3. Wygasłe transjenty
Transjenty to tymczasowe wartości cache w wp_options. Bez zewnętrznego object cache wygasłe transjenty się zbierają. WordPress czyści je leniwie—przy następnym odczycie. Te stare transjenty potrafią też wyjść jako wolne zapytania, gdy tabela urośnie.
SELECT COUNT(*) FROM wp_options
WHERE option_name LIKE '_transient_%'
AND autoload = 'yes';
4. Źle skonfigurowane wtyczki
Wtyczki, które trzymają ustawienia per użytkownik, duże JSON-y albo cache odpowiedzi API w opcjach autoload. Dane mogą być potrzebne, ale nie muszą ładować się przy każdym żądaniu.
Jak audytować autoloadowane dane w wp_options
- Sprawdź łączny rozmiar autoloadu — Odpal powyższe zapytanie SQL. Powyżej 1MB trzeba badać od razu.
-
Znajdź największych sprawców — Posortuj opcje autoload po
LENGTH(option_value). Top 10 zwykle to 80%+ rozdęcia. - Wykryj osierocone dane — Zestaw nazwy opcji z aktywnymi wtyczkami. Opcje po wyłączonych wtyczkach można ruszać.
-
Testuj przed zmianą — Ustaw
autoload='no'po jednej opcji. Sprawdź, czy strona działa. Część opcji naprawdę musi być w autoload (ustawienia rdzenia, aktywny motyw/wtyczki). - Wyczyść wygasłe transjenty — Usuń transjenty po timeoutcie. To zawsze bezpieczne.
Czego NIE wyłączać
Przełączenie autoload da się cofnąć. Kasowanie wierszy nie. Ale część opcji musi zostać w autoload, dopóki właściciel jest aktywny, inaczej WordPress i wtyczki padają wcześnie w bootstrapie — i nie będzie błędu, tylko cicha degradacja. Traktuj to jako checklistę przed zmianą hurtową.
| Zostaw w autoload (gdy w użyciu) | Zwykle bezpiecznie ustawić autoload='no' |
|---|---|
cron — cała mapa zdarzeń WP-Cron;active_plugins, template, stylesheet;siteurl, home, blogname, blogdescription;user_roles, permalink_structure, rewrite_rules;theme_mods_{active-theme} dla żyjącego motywu;ustawienia runtime aktywnych wtyczek — konfiguracja sklepu WooCommerce, Yoast wpseo_*, reguły firewalla
|
Osierocone wiersze po usuniętych wtyczkach (prefiks nie pasuje do niczego zainstalowanego); stare _transient_* i _site_transient_* — cache z definicji;pozostałości po sprawdzaniu aktualizacji: _site_transient_update_plugins, _site_transient_update_themes, _site_transient_update_core;księgowość kolejek i telemetrii: action_scheduler_*, wc_tracks_*;za duże bloby CSS/assetów page builderów ( _elementor_* i Divi regularnie w top-25)
|
Zasada: jeśli wtyczka jest aktywna, a opcja to konfiguracja czytana przy każdym żądaniu, zostaw autoload. Jeśli wtyczki nie ma, albo wartość to cache, log albo blob kolejki — najpierw wyłącz autoload i kasuj dopiero, gdy nic tego wiersza nie czyta.
Typowi sprawcy autoloadu: czy bezpiecznie wyłączyć?
Dwadzieścia prefiksów, które widuję w kółko, i co z każdym robię. „Ostrożnie” znaczy, że zależy, czy wtyczka jeszcze działa — to sprawdź najpierw.
| Opcja / prefiks | Źródło | Bezpiecznie wyłączyć autoload? |
|---|---|---|
_transient_* / _site_transient_* | Rdzeń WordPress + dowolna wtyczka (transjenty) | Tak — transjenty to cache z definicji; przy object cache nie powinny w ogóle siedzieć w wp_options. |
action_scheduler_* | Action Scheduler (WooCommerce i inne) | Tak — księgowość kolejki, ładowana na żądanie, gdy scheduler leci. |
wc_tracks_* | WooCommerce (telemetria) | Tak — eventy śledzenia użycia, nic po stronie użytkownika od nich nie zależy. |
woocommerce_* (settings) | Rdzeń WooCommerce | Nie — waluta, podatki i checkout, które Woo czyta przy każdym żądaniu. |
elementor_* | Elementor (ustawienia) | Ostrożnie — ustawienia runtime są potrzebne, gdy aktywny; bezpiecznie dopiero po wyłączeniu Elementor. |
_elementor_* | Elementor (dane wewnętrzne / cache) | Ostrożnie — część to cache CSS/assetów (bezpieczne), część stan runtime; audytuj wiersz po wierszu. |
jetpack_* / _jetpack_* | Jetpack | Ostrożnie — tokeny połączenia i stan sync; zły przełącznik może zerwać połączenie z WordPress.com. |
wpseo_* / wordpress_seo_* | Yoast SEO | Nie, gdy aktywny — tytuły, meta i ustawienia indexable ładują się przy każdym żądaniu frontu. Tak, jeśli Yoast został usunięty. |
aioseo_* | All in One SEO | Ostrożnie — ustawienia rdzenia zostają, gdy aktywny, ale AIOSEO słynie z za dużych opcji cache/logów, które można przełączyć. |
rank_math_* | Rank Math | Ostrożnie — ustawienia runtime Nie, bloby analityki/cache Tak; ten sam podział co AIOSEO. |
wpforms_* | WPForms | Ostrożnie — ustawienia są potrzebne, gdy aktywny; challenge, powiadomienia i logi są bezpieczne. |
wf* / wflogs | Wordfence | Ostrożnie — konfiguracja firewalla jest czytana przy każdym żądaniu, gdy aktywny; wiersze-logi i sieroty po usunięciu to twarde Tak. |
redirection_* | Redirection | Ostrożnie — wtyczka potrzebuje ustawień wcześnie, żeby robić przekierowania; przełączaj tylko, gdy wtyczki nie ma. |
et_* | Divi (Elegant Themes) | Ostrożnie — ustawienia aktywnego motywu Nie; jeśli odszedłeś od Divi, wszystko et_* to martwy ciężar — Tak. |
edd_* | Easy Digital Downloads | Ostrożnie — ustawienia sklepu potrzebne, gdy aktywny; pozostałości trackingu i sesji są bezpieczne. |
learndash_* | LearnDash | Ostrożnie — ustawienia kursów i runtime, gdy aktywny; bezpiecznie tylko po usunięciu LearnDash. |
tribe_events_* | The Events Calendar | Ostrożnie — znany z dużych wpisów cache w autoload (często bezpieczne), ale ustawienia rdzenia to runtime. |
fs_accounts | Freemius SDK (dołączany do wielu wtyczek) | Ostrożnie — jeden wiersz współdzielony przez każdą wtyczkę na Freemius; licencjonowanie pada, jeśli przełączysz, gdy któraś jest aktywna. |
rewrite_rules | Rdzeń WordPress | Ostrożnie — często największa pojedyncza opcja, ale WordPress potrzebuje jej do routingu URL. Nigdy nie kasuj; jeśli jest ogromna, znajdź wtyczkę, która ją rozdyma. |
cron | Rdzeń WordPress | Nie — tu mieszka cały harmonogram WP-Cron; wyłączenie autoload psuje zaplanowane zadania. |
Jak naprawić rozdęcie autoloadu w WordPress
Wyłącz autoload dla konkretnych opcji
UPDATE wp_options SET autoload = 'no'
WHERE option_name = 'old_plugin_settings';
Wyczyść wygasłe transjenty
DELETE FROM wp_options
WHERE option_name LIKE '_transient_timeout_%'
AND option_value < UNIX_TIMESTAMP();
Usuń osierocone dane wtyczek
-- Only after confirming the plugin is gone:
DELETE FROM wp_options
WHERE option_name LIKE 'removed_plugin_%';
Problem ręcznych poprawek: nie zostają poprawione. Wtyczki dalej dokładają dane. Transjenty wracają. Nowe wtyczki niosą nowe opcje autoload. Musiałbyś audytować co miesiąc, żeby to trzymać.
Dlaczego rozdęcie autoloadu wciąż rośnie
Rozdęcie autoloadu jest postępujące. Rośnie powoli, po 50KB, niewidoczne, aż strona jest wyraźnie wolniejsza i nie wiesz czemu.
- Nowa wtyczka zainstalowana → 200KB opcji konfiguracji w autoload
- Wtyczka wyłączona → dane zostają, dalej w autoload
- Pudło cache transjenta → nowy transjent zapisany z autoload
- Aktualizacja wtyczki → migracja dokłada nowe wiersze autoload
Jeśli widzisz też wolny kokpit administracyjny WordPress, rozdęcie autoloadu często jest ukrytą przyczyną. Potrzebujesz narzędzia, które ciągle monitoruje rozmiar autoloadu i mówi dokładnie które opcje marnują pamięć—zanim to stanie się problemem wydajności.
Zautomatyzuj czyszczenie autoloadu
Autoloader Optimizer WP Multitool monitoruje tabelę wp_options, znajduje rozdęte i osierocone dane autoload i pokazuje, co bezpiecznie posprzątać.