Trucuri utile pentru găsirea și remedierea interogărilor lente la baza de date WordPress

Publicat: 2019-04-17

Interogările SQL moderate pot afecta execuția site-ului de dezvoltare a aplicațiilor WordPress. Din când în când, interogările moderate sunt o consecință a unui SQL structurat inadecvat, care nu ar fi trebuit niciodată făcut în acest fel.

Mai mult decât atât, în unele cazuri, întrebările moderate au fost, în realitate, întrebări rapide la un moment dat – cu toate acestea, pe măsură ce site-ul a devenit mai experimentat, interogarea a devenit din ce în ce mai lentă, neputincioasă să rămână la curent cu extinderea bazei de date.

În ciuda modului în care SQL-ul a devenit moderat, ar trebui să investigați câteva abordări pentru a descoperi și a remedia întrebările problematice în dezvoltarea aplicației WordPress. Ici și colo s-ar putea să necesite o anumită aplicație web și s-ar putea să nu aibă suficientă energie, aptitudini sau plan de cheltuieli pentru a face îmbunătățiri personalizate. Crearea fără nicio pregătire poate fi răspunsul pentru unele probleme, dar poate dura mai mult decât începerea de la o bază de cod curentă. WordPress a fost inițial structurat ca o etapă de blogging și continuă să fie remarcabil pentru asta. Oricum ar fi, a avansat într-un sistem complet de gestionare a conținutului (CMS) și, pentru câteva scopuri, poate chiar să creeze o aplicație web puternică - rapid și cu un plan de cheltuieli fundamental mai mic decât îmbunătățirea personalizată. În timp ce WordPress oferă aplicații de dezvoltare încorporate, acesta poate fi folosit pentru aplicații web, pentru a-l face mai util. Structurile inerente ale paginii și ale postărilor pot fi utilizate pentru o mulțime de lucruri, dar în cazul în care cineva are nevoie de informații și câmpuri personalizate care să fie incluse, căutate sau chestionate, controlate și afișate, este nevoie de ceva muncă suplimentară.

Găsirea interogărilor lente

Găsirea originii întrebărilor moderate include două etape:

  1. Aflați care întrebări sunt cu adevărat cele moderate.
  2. Identificarea programului care le operează.

Ar trebui să aruncați o privire la două module și un SaaS care le poate permite să descopere întrebări moderate.

Monitor de interogare

Pentru a beneficia de informații despre pagina care rulează în prezent, acest modul poate fi utilizat. În ciuda unui întreg grup de date despre activitățile interne ale WordPress, acesta oferă o defalcare punct cu punct a:

  • Câte de multe întrebări au apărut la această cerere?
  • Ce întrebare de pe pagină a durat maxim?
  • Ce capacități au investit cea mai mare energie în întrebări SQL?
  • Indiferent dacă acele întrebări au provenit din module, subiecte sau din centrul WordPress

Ecranul de interogare recunoaște chiar și întrebările moderate cu conținut roșu deranjant, ceea ce face foarte simplă selectarea problemei SQL.

Bara de depanare

Un alt instrument fenomenal pentru găsirea unui SQL moderat moderat este modulul vechi, de încredere, Bara de depanare. Bara de depanare oferă o singură dată despre funcționarea interioară a WordPress atunci când o pagină este încărcată cu chestiuni precum:

  1. Parametrii WP_Query
  2. Solicitați date (coordonarea regulilor de renovare de numărare)
  3. Interogări SQL produse de pagina prezentă

Pentru a activa urmărirea SQL în Bara de depanare, utilizatorul ar trebui să facă un punct pentru a permite SAVEQUERIES undeva pe site - probabil în wp-config.php

Atenție: SAVEQUERIES afectează execuția pe site și, probabil, nu ar trebui să fie utilizate pe un server de generație. Cu toate acestea, poate fi folosit pe o mașină de avansare.

Găsirea unui SQL moderat nu este extrem de ușoară cu Debug Bar. De exemplu, nu oferă tabelele care pot fi sortate sau nu prezintă întrebări moderate pentru utilizator. Ceea ce oferă Debug Bar este o capacitate de urmărire care direcționează utilizatorul exact spre direcția de origine a unei întrebări.

Aceasta este o rezumat a documentelor care sunt încărcate și a capacităților care rezultă în ancheta în curs de execuție. De cele mai multe ori, cineva este pasionat de secțiunea de continuitate absolută din rundown; acesta este locul în care a fost pusă întrebarea moderată și unde ar trebui să-și înceapă vânătoarea. Lucrul convenabil despre setarea fiecărei capacități care ridică această întrebare este că poate dezvălui o perspectivă asupra motivului pentru care SQL a fost executat în orice caz.

NewRelic

NewRelic este o administrație care măsoară și monitorizează execuția dezvoltării de aplicații web, inclusiv dezvoltarea de aplicații WordPress. Administrația oferă o tonă metrică de date despre execuția site-ului. Este orice altceva decât dificil să pierzi orice sens al direcției în informațiile pe care NewRelic le oferă utilizatorului detalii în fiecare minut pentru întrebările SQL.

Există două contraste demne de remarcat între NewRelic și modulele pe care le-am referit anterior:

  1. NewRelic oferă mult mai multe informații cu privire la execuția PHP, până la calculul exact al timpului petrecut în fiecare funcție
  2. NewRelic urmărește fiecare cerere către site fără a fi vizibile, astfel încât să se poată consulta mai târziu pentru a descoperi SQL moderat. Modulele îi oferă doar pagina prezentă.

Este important ca NewRelic să aibă un nivel de aranjament gratuit care oferă date generale despre execuția site-ului, totuși că va trebui să treacă la un aranjament plătit pentru șansele de lux și pentru a verifica cerințele singulare și pentru a găsi întrebări moderate.

Înțelegerea unei interogări lente cu EXPLAIN

Până în acest moment, dispozitivele au fost securizate pentru a găsi întrebări moderate. În prezent, ar trebui să se știe de ce acele anchete împiedică lucrurile.

Cuvântul de ordine MySQL EXPLAIN poate permite, eh, să clarifice ce se întâmplă. Adăugarea EXPLAIN la începutul unei interogări indică modul în care MySQL execută o întrebare. Pentru întrebări complicate, EXPLAIN poate ajuta la distingerea focalizărilor moderate în SQL-uri, de exemplu, subinterogări moderate sau activități risipitoare.

Remedierea interogărilor lente

Deoarece se realizează că interogările sunt moderate și EXPLAIN a dezvăluit utilizatorului de ce este, ar trebui luată o privire la câteva opțiuni pentru a remedia aceste probleme de somnolență.

Opțiunea 1: răsucirea întrebării

S-ar putea să existe o întrebare care pune ecranul Edit Post la un ritm foarte lent. Interogarea a fost o bucată din metaboxul Câmpurilor personalizate.

Piesa definită de SQL aduce o listă de meta_keys din tabelul ks29so_postmeta care, după toate probabilitățile, nu începe cu semnul de subliniere. Explicația GROUP BY implică că fiecare rezultat este special.

Rulând această anchetă de mai multe ori, iată timpul în ce măsură poate dura:

1,7145 sec

1,7911 sec

1,8076 sec

1,7707 sec

1,8456 sec

S-ar putea dezvolta o interogare care are ca rezultat rezultate similare. Trebuie să fie aleasă ca meta_keys unică. Excepțional este un cuvânt echivalent pentru particular, care se întâmplă să fie o explicație SQL!

Opțiunea 2: Adăugarea unui index

În timp ce utilizatorul rulează o întrebare SQL pe un tabel MySQL stabilit, trebuie să examineze întregul tabel pentru a înțelege care sunt liniile care sunt semnificative pentru interogarea particulară. În momentul în care masa devine uriașă, verificarea începe să dureze destul de mult.

Acesta este locul unde apar înregistrările MySQL. Listele preiau informațiile într-un tabel și le aranjează astfel încât informațiile să fie mult mai puțin solicitante de găsit. Prin sortarea informațiilor într-un mod specific, fișierele ajută la reducerea gradului de filtrare pe care MySQL îl realizează pentru fiecare interogare.

Fișierele pot fi adăugate la un singur segment sau peste diferite secțiuni.

Cu un fișier pe meta_key, primul timp de întrebare SQL seamănă oarecum cu acesta:

0,0041 sec

0,0023 sec

0,0030 sec

0,0025 sec

0,0019 sec

Acest lucru este extrem de inteligent.

O expresie de alertă pe fișiere: De fiecare dată când INSERT face o coloană sau UPDATE este utilizat pe tabelul af, lista este redeterminată, ceea ce poate fi o activitate costisitoare. Înregistrările fac citirea de pe masă mai rapidă, dar scrierea pe acesta este mai lentă. În timp ce o listă de index plasată corect poate funcționa extrem de bine, nu ar trebui să fii obsedat de ea fără a verifica impactul general al listei asupra bazei de date.

Opțiunea 3: Memorați în cache rezultatele interogării

Odată ce se realizează că există o întrebare moderată. În loc să schimbe întrebarea, poate exista un scenariu în care doar elimină efectele secundare ale anchetei. În acest fel, s-ar limita cât de regulat a fost efectuată interogarea și ar primi un „permis gratuit” de cele mai multe ori.

API-ul WordPress Tranzitori este una dintre modalitățile de rezervare a interogărilor. Tranzitorii sunt utilizați pentru a elimina consecințele sarcinilor costisitoare, de exemplu,

  • Solicitări către site-uri externe (de exemplu, obținerea de postări în curs de desfășurare pe Facebook)
  • Bucuri lente de manipulare (de exemplu, căutarea de corzi enorme cu o articulație obișnuită)
  • Interogări lente în baza de date!
Alegerea unei abordări

Există o serie de alternative care au fost prezentate și, cel mai probabil, există șaptesprezece abordări diferite pentru a înțelege această anchetă moderată. Ce abordare ar trebui să adopte?

Alegerea 1 (schimbarea întrebării) a dat rezultate strălucitoare. Cu toate acestea, ar trebui luată în considerare posibilitatea ca ancheta modificată să nu aibă în general rezultate similare. S-ar putea înlătura fără să vrea codul cu o întrebare oarecum necorespunzătoare.

Alternativa 2 (inclusiv o înregistrare) nu este imaginabilă în mod constant, în funcție de tabelul și secțiunile utilizate de anchetă. Din cauza tabelelor centrului de dezvoltare a aplicațiilor WordPress, ar trebui să subliniem celelalte efecte ale înregistrărilor:

  • Rutina de reîmprospătare a centrului așteaptă liste suplimentare?
  • Includerea unui fișier va reduce diferite întrebări, similar cu INSERT și UPDATE?

Alternativa 3 (reservarea rezultatelor prin intermediul persoanelor fără adăpost) are un efect nesemnificativ - utilizatorul nu trebuie să modifice prima interogare și nu este nevoie să ajusteze structura bazei de date.

De obicei, oamenii optează pentru opțiunea 3. În cazul propriu, el poate alege o altă alternativă bazându-se pe întrebarea pe care o rezolvă sau pe site-ul specific care are probleme SQL. Cu siguranță nu există un răspuns cu o singură măsură pentru toate problemele de execuție, așa că unul are voie să fie diferit de decizia celuilalt – sau, încercați fiecare dintre cele trei fără o clipă de întârziere!

Rămâi la curent

Aici a schițat o problemă reală. Caseta Câmpuri personalizate de pe CSS-Tricks a fost cu adevărat o infracțiune pentru unele interogări extrem de moderate în baza de date. De asemenea, a schițat diverse căi către potențiale aranjamente.

Conceperea unor idei noi

Există diferite metodologii pe care le puteți utiliza pentru a încerca și a accelera execuția întrebărilor, care includ mai multă muncă decât simpla modificare a anchetei sau includerea unei liste. Una dintre cele mai lente părți ale întrebării este munca depusă pentru a uni tabelele pentru a trece de la ID-ul clientului la ID-ul articolului și trebuie să faceți acest lucru pentru fiecare client.

S-ar putea denormaliza informațiile făcând un tabel care stochează informațiile privind permisul, alături de id-ul clientului și id-ul articolului pentru toate licențele și pur și simplu o interogare față de aceasta pentru un anumit client. Ar trebui să modificați tabelul utilizând declanșatoarele MySQL pe INSERT/UPDATE/DELETE în tabelul de licențe (sau altele care se bazează pe modul în care informațiile s-ar putea schimba), dar acest lucru ar îmbunătăți semnificativ execuția interogării respectivelor informații.

Astfel, în cazul în care diverse îmbinări moderează întrebarea în MySQL, poate fi mai rapid să divizați interogarea în cel puțin două articulații și să le executați independent în PHP și apoi să colectați și să canalizați rezultatele în cod.