Optimizarea bazei de date WordPress pentru performanță

Optimizarea bazei de date WordPress pentru performanță

Optimizarea bazei de date WordPress pentru performanță este un aspect adesea neglijat care poate face diferența între un site rapid și unul lent. O bază de date neoptimizată acumulează date inutile care încetinesc fiecare interogare.

WordPress stochează totul în baza de date MySQL: articole, pagini, comentarii, setări ale pluginurilor, revizuiri și transients. Fără întreținere, dimensiunea crește exponențial.

Optimizarea bazei de date WordPress pentru performanță

O bază de date MySQL tipică pentru un site WordPress cu 500 de articole poate ajunge la sute de MB dacă nu este întreținută. Majoritatea acestor date sunt revizuiri vechi, transients expirate și date orfane ale pluginurilor dezinstalate.

Curățarea și optimizarea regulată pot reduce dimensiunea bazei de date cu 30-70% și pot îmbunătăți considerabil timpii de răspuns ai serverului.

Înțelegerea structurii bazei de date WordPress

WordPress folosește implicit 12 tabele, fiecare cu un rol specific:

  • wp_posts: articole, pagini, revizuiri, meniuri, media
  • wp_postmeta: metadate asociate fiecărui post (SEO, câmpuri custom)
  • wp_options: setările WordPress și ale pluginurilor
  • wp_comments: comentariile utilizatorilor
  • wp_commentmeta: metadatele comentariilor
  • wp_users și wp_usermeta: datele utilizatorilor
  • wp_terms, wp_termmeta, wp_term_taxonomy, wp_term_relationships: categorii, tag-uri, taxonomii
  • wp_links: blogroll (depreciat, dar încă prezent)

Pluginurile adaugă propriile tabele. Un site cu 30 de pluginuri poate avea peste 100 de tabele în baza de date.

Curățarea revizuirilor articolelor

Implicit, WordPress salvează fiecare modificare a unui articol ca revizuire separată. Un articol editat de 50 de ori are 50 de revizuiri în baza de date.

Verificați câte revizuiri există:

SELECT COUNT(*) FROM wp_posts WHERE post_type = 'revision';

Numărul poate fi surprinzător de mare, chiar și pe site-uri mici.

Ștergerea revizuirilor vechi

Folosiți WP-CLI pentru ștergere sigură:

# Afiseaza numarul de revizuiri
wp post list --post_type=revision --format=count

# Sterge toate revizuirile
wp post delete $(wp post list --post_type=revision --format=ids) --force

Limitarea revizuirilor viitoare

Adăugați în wp-config.php pentru a limita numărul de revizuiri pe articol:

define('WP_POST_REVISIONS', 3);

Valoarea 3 păstrează ultimele 3 revizuiri per articol, oferind un compromis între siguranță și dimensiunea bazei de date. Setați pe false pentru a dezactiva complet revizuirile.

Curățarea datelor transitoare (transients)

Transients sunt date cache temporare stocate de WordPress și pluginuri în tabela wp_options. Cele expirate rămân în baza de date până sunt șterse manual.

# Sterge transients expirate cu WP-CLI
wp transient delete --expired

# Numara toate transients
wp transient list --format=count

Pe site-uri cu multe pluginuri, transients-urile pot ocupa zeci de MB din tabela wp_options.

Optimizarea tabelei wp_options

Tabela wp_options este cea mai accesată tabelă din WordPress. Fiecare încărcare de pagină face zeci de interogări în această tabelă.

Problema autoload-ului

Opțiunile cu autoload='yes' sunt încărcate la fiecare cerere. Multe pluginuri setează opțiunile lor pe autoload chiar dacă nu sunt necesare pe fiecare pagină.

Verificați dimensiunea datelor autoload:

SELECT SUM(LENGTH(option_value)) as autoload_size
FROM wp_options
WHERE autoload = 'yes';

Dacă valoarea depășește 1 MB, trebuie să optimizați. Identificați opțiunile mari:

SELECT option_name, LENGTH(option_value) as size
FROM wp_options
WHERE autoload = 'yes'
ORDER BY size DESC
LIMIT 20;

Curățarea opțiunilor orfane

Pluginurile dezinstalate lasă adesea date în wp_options. Identificați-le după prefix și ștergeți-le manual prin phpMyAdmin sau prin interogări SQL.

Optimizarea tabelelor MySQL

Operațiunile de inserare, actualizare și ștergere fragmentează tabelele MySQL în timp. Comanda OPTIMIZE defragmentează tabelele și recuperează spațiul nefolosit.

-- Optimizare tabele individuale
OPTIMIZE TABLE wp_posts;
OPTIMIZE TABLE wp_postmeta;
OPTIMIZE TABLE wp_options;
OPTIMIZE TABLE wp_comments;

Prin WP-CLI:

wp db optimize

Programați această operațiune lunar prin cron job în cPanel.

Indexarea corectă a tabelelor

Indecșii accelerează interogările, permițând MySQL să găsească datele fără a scana întreaga tabelă. WordPress creează indecșii necesari la instalare, dar unii pot lipsi.

Verificarea indecșilor existenți

SHOW INDEX FROM wp_postmeta;
SHOW INDEX FROM wp_options;

Adăugarea indecșilor lipsă

Un index frecvent lipsă este pe coloana autoload din wp_options:

ALTER TABLE wp_options ADD INDEX autoload_idx (autoload);

Pentru wp_postmeta, adăugarea unui index compus poate accelera interogările complexe:

ALTER TABLE wp_postmeta ADD INDEX meta_value_idx (meta_key(191), meta_value(100));

Atenție: nu adăugați indecși fără a testa impactul. Prea mulți indecși încetinesc operațiunile de scriere.

Curățarea comentariilor spam și a metadatelor orfane

# Sterge comentariile spam
wp comment delete $(wp comment list --status=spam --format=ids) --force

# Sterge comentariile din cos
wp comment delete $(wp comment list --status=trash --format=ids) --force

Metadatele orfane sunt înregistrări din wp_postmeta care referă posturi inexistente:

DELETE pm FROM wp_postmeta pm
LEFT JOIN wp_posts p ON p.ID = pm.post_id
WHERE p.ID IS NULL;

Similar pentru wp_commentmeta:

DELETE cm FROM wp_commentmeta cm
LEFT JOIN wp_comments c ON c.comment_ID = cm.comment_id
WHERE c.comment_ID IS NULL;

Instrumente și pluginuri pentru optimizare

WP-Optimize

Plugin gratuit care permite curățarea revizuirilor, transients, comentariilor spam și optimizarea tabelelor dintr-o singură interfață. Poate fi programat să ruleze automat.

Advanced Database Cleaner

Identifică tabelele orfane lăsate de pluginurile dezinstalate și opțiunile inutile din wp_options. Util pentru curățări profunde.

Query Monitor

Afișează toate interogările SQL executate pe fiecare pagină, timpul de execuție și originea lor. Esențial pentru identificarea interogărilor lente generate de pluginuri.

Monitorizarea performanței bazei de date

Activați slow query log în MySQL pentru a identifica interogările care durează mai mult de 1 secundă:

SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 1;

Verificați periodic dimensiunea bazei de date și numărul de înregistrări din tabelele principale. O creștere neașteptată poate indica o problemă cu un plugin sau o infecție malware.

Concluzii

Optimizarea bazei de date este o componentă esențială a optimizării vitezei site-ului. Programați curățarea și optimizarea lunar pentru a menține performanța în parametri optimi.

Pentru un audit detaliat al performanței site-ului sau pentru optimizare WordPress profesională, echipa SEODNS vă stă la dispoziție. Contactați-ne pentru o evaluare gratuită.