WordPress vso vsebino, nastavitve in veliko podatkov vtičnikov hrani v podatkovni bazi MySQL ali MariaDB in ob vsakem nalaganju strani v njej izvaja poizvedbe. V letih se v podatkovni bazi nabere veliko odvečnih podatkov: stare različice objav, neželeni komentarji, potekli začasni podatki, nastavitve izbrisanih vtičnikov. Zanemarjena podatkovna baza upočasni stran, zlasti skrbniški vmesnik in dinamične strani spletnih trgovin, varnostne kopije pa naredi večje in počasnejše.
V tem vodniku pokažemo, zakaj se podatkovna baza napihne, kako prepoznaš težavo, kako jo varno počistiš in optimiziraš z vtičnikom, phpMyAdminom in WP-CLI ter kako preprečiš, da bi se znova zanemarila.
Zakaj se podatkovna baza napihne?
- Različice objav (revizije): WordPress ob vsakem shranjevanju shrani prejšnjo različico objave. Veliko urejana stran ima lahko več deset revizij.
- Samodejni osnutki in koš: izbrisane objave in strani, ki so ostale v košu.
- Komentarji: neželeni, v koš premaknjeni in na odobritev čakajoči komentarji.
- Začasni podatki (transienti): podatki, ki jih vtičniki začasno shranijo; del poteklih se ne izbriše sam.
- Osiroteli podatki: metapodatki izbrisanih objav, uporabnikov ali izrazov.
- Ostanki izbrisanih vtičnikov: nastavitve v tabeli
wp_options, lastne tabele. - Dnevniki in statistika: nekateri varnostni, statistični in preusmeritveni vtičniki gradijo velike tabele dnevnikov.
- Spletna trgovina: seje WooCommerce, dnevniki opravil v ozadju (Action Scheduler) in stari podatki o naročilih.
Autoload in tabela wp_options
Tabela wp_options je še posebej pomembna. Del nastavitev, shranjenih tu, se samodejno naloži (autoload) ob vsakem nalaganju strani, tudi če jih ta stran ne potrebuje. Če se ta količina poveča (na primer zaradi velikih, pozabljenih nastavitev izbrisanega vtičnika), se upočasni vsaka stran. WordPress na strani Orodja › Zdravje spletnega mesta opozori, če je velikost samodejno naloženih podatkov prevelika. Kako jo izmeriš in varno zmanjšaš, prikazuje članek baze znanja o pregledu tabele wp_options in podatkov autoload; napihnjeno tabelo wp_postmeta obravnava ločen članek.
Znaki počasne podatkovne baze
- skrbniški vmesnik je počasen, zlasti seznami objav in naročil,
- stran Zdravje spletnega mesta opozarja na samodejno naložene nastavitve,
- varnostne kopije so vse večje in počasnejše,
- statistika virov gostovanja kaže visoko porabo CPU ali IO,
- vtičnik Query Monitor javlja počasne ali zelo številne poizvedbe.
Pred tem: varnostna kopija
Čiščenja podatkovne baze ni mogoče razveljaviti. Pred njim vedno naredi varnostno kopijo. V cPanelu z izvozom podatkovne baze v phpMyAdminu ali s prenosom podatkovne baze v točki menija Backup; na gostovanjih cPanel in WordPress pri aWh lahko obnoviš tudi iz dnevne varnostne kopije JetBackup. Korake varnostnega kopiranja in obnove opisuje članek o obnovi datotek in podatkovnih baz iz varnostne kopije.
Čiščenje z vtičnikom
Najpreprostejša pot je vtičnik, namenjen temu:
- WP-Optimize: brisanje revizij, osnutkov, neželenih komentarjev in poteklih transientov ter optimizacija tabel, tudi po urniku.
- Advanced Database Cleaner: dober tudi za odkrivanje osirotelih podatkov ter tabel in nastavitev, ki so jih pustili izbrisani vtičniki.
Priporočeni koraki:
- Zaženi brisanje revizij, samodejnih osnutkov, koša, neželenih komentarjev in poteklih transientov.
- Preglej osirotele nastavitve in tabele, vendar izbriši le tiste, za katere zagotovo veš, da pripadajo vtičniku, ki ga ne uporabljaš več.
- Optimiziraj tabele.
- Preveri stran in skrbniški vmesnik.
Po čiščenju lahko vtičnik izklopiš ali ga nastaviš na načrtovan, mesečni zagon.
Za napredne: phpMyAdmin in WP-CLI
phpMyAdmin (v cPanelu v skupini Databases):
- Ko odpreš podatkovno bazo, iz velikosti tabel in števila vrstic vidiš, kje je največ podatkov.
- Ko tabele označiš, jih lahko z ukazom »Optimize table« preurediš. Pri tabelah InnoDB to pomeni ponovno izgradnjo celotne tabele, kar pri veliki tabeli traja, tabela pa je lahko medtem zaklenjena, zato ga zaženi v obdobju z malo prometa.
- Brišeš lahko tudi neposredno s poizvedbami SQL (na primer revizije), vendar je to priporočljivo le, če natančno razumeš strukturo tabel WordPress. Predpona tabel ni vedno
wp_.
O osnovah phpMyAdmina govori ločen članek.
WP-CLI (če paket vključuje tudi SSH):
wp db size --tables # velikost tabel
wp transient delete --expired # brisanje poteklih prehodnih podatkov
wp post delete $(wp post list --post_type=revision --format=ids) --force # brisanje revizij
wp db optimize # optimizacija tabel
Pred tem z ukazom wp db export mentes.sql naredi varnostno kopijo. Na gostovanjih cPanel pri aWh se wp db export in wp db optimize ne izvedeta, ker je funkcija PHP proc_open iz varnostnih razlogov onemogočena; tam varnostno kopijo naredi z ukazom mysqldump, optimizacijo pa v phpMyAdminu. Korake opisuje članek baze znanja o uporabi WP-CLI.
Preprečevanje
Omejitev revizij. V datoteki wp-config.php lahko omejiš število revizij (zapiši pred vrstico »That’s all, stop editing!«):
define( 'WP_POST_REVISIONS', 10 );
Praznjenje koša. WordPress koš privzeto izprazni po 30 dneh; to lahko nastaviš tudi na krajši čas (define( 'EMPTY_TRASH_DAYS', 7 );).
Higiena vtičnikov. Obdrži le potrebne vtičnike in ko kakšnega izbrišeš, preveri, ali ima nastavitev »izbriši podatke ob odstranitvi«. O upravljanju vtičnikov govori naš vodnik o vtičnikih.
Omejitev dnevnikov. Pri varnostnih, statističnih in preusmeritvenih vtičnikih nastavi, da se stari vnosi v dnevnik čez nekaj časa izbrišejo.
Pri spletni trgovini. Vklopi visoko zmogljivo shranjevanje naročil WooCommerce (HPOS), ki naročila hrani v lastnih, optimiziranih tabelah, in nastavi, da se stara, dokončana opravila Action Scheduler izbrišejo.
Načrtovano vzdrževanje. Čiščenje zaženi enkrat na mesec (z vtičnikom po urniku ali z opravilom cron); o nastavitvi opravila cron v cPanelu govori ločen vodnik.
Predpomnilnik objektov. Na prometni strani ali v spletni trgovini trajni predpomnilnik objektov (na primer Redis) rezultate pogostih poizvedb hrani v pomnilniku, kar močno zmanjša obremenitev podatkovne baze. Za to običajno potrebuješ VPS.
Vloga gostovanja
Hitrost podatkovne baze je odvisna tudi od pomnilnika: stran WordPress izvaja ogromno majhnih operacij branja in pisanja, pri katerih je NVMe SSD večkrat hitrejši od običajnih pogonov SSD in trdih diskov. WordPress gostovanja in gostovanja cPanel aWh tečejo na NVMe SSD, z neomejenim številom podatkovnih baz. Če tvoja stran tudi po čiščenju redno dosega omejitve virov paketa, je lahko naslednji korak večji paket ali KVM VPS.
Povzetek
Vzdrževanje podatkovne baze je preprosto, če ga opravljaš redno: varnostna kopija, brisanje revizij, koša, neželenih komentarjev in poteklih začasnih podatkov, previdna odstranitev osirotelih podatkov vtičnikov, optimizacija tabel. Z omejitvijo revizij, higieno vtičnikov in mesečnim načrtovanim čiščenjem preprečiš, da bi se podatkovna baza spet napihnila.
Pogosta vprašanja
Je optimizacija podatkovne baze varna?
Da, če prej narediš varnostno kopijo in izbrišeš le tisto, za kar veš, kaj je. Brisanje revizij, neželenih komentarjev in poteklih transientov je varno; pri brisanju osirotelih tabel in nastavitev bodi previden.
Kako pogosto jo je treba čistiti?
Na povprečni strani zadošča enkrat na mesec ali četrtletje; pri spletni trgovini in veliko urejani strani je vredno pogosteje.
Lahko iz tabele wp_options brišem ročno?
Le če natančno veš, kateri vnos pripada kateremu (ne več uporabljenemu) vtičniku. Brisanje nastavitev WordPressa in delujočih vtičnikov povzroči napake. Prej vedno naredi varnostno kopijo.
Lahko optimizacija povzroči izpad?
Pri optimizaciji velikih tabel je lahko tabela za kratek čas zaklenjena, kar lahko povzroči upočasnitev. Zato jo zaženi v obdobju z malo prometa.
Kakšna je razlika med čiščenjem in optimizacijo?
Čiščenje izbriše odvečne podatke, optimizacija pa znova uredi notranjo strukturo tabel in sprosti prostor, ki je po brisanju ostal prazen.
Ali veliko revizij upočasni stran?
V majhni količini komaj, pri veliko urejani strani pa so lahko revizije pomemben del podatkovne baze in upočasnijo skrbniški vmesnik ter varnostne kopije. Njihovo število omeji v datoteki wp-config.php.
Ali potrebujem poseben vtičnik, če imam cPanel?
Ne nujno: s phpMyAdminom in WP-CLI to opraviš tudi brez vtičnika. Vtičnik je udobnejši, zlasti če želiš načrtovano čiščenje.