Kasulikud nipid aeglaste WordPressi andmebaasipäringute leidmiseks ja parandamiseks
Mõõdukad SQL-päringud võivad WordPressi rakenduste arendussaidi täitmist häirida. Aeg-ajalt on mõõdukad päringud ebaadekvaatselt struktureeritud SQL-i järelmõju, mida poleks kunagi tohtinud nii teha.
Veelgi enam, mõnel juhul olid mõõdukad päringud tegelikkuses teatud ajahetkel kiired küsimused – aga saidi küpsemaks muutudes muutus päring aina aeglasemaks, ilma et oleks võimalik laienevast andmebaasist kursis olla.
Vaatamata sellele, kuidas SQL sai mõõdukaks, tuleks WordPressi rakenduste arendamisel uurida mõnda lähenemisviisi probleemide avastamiseks ja lahendamiseks. Siin-seal võib vaja minna teatud veebirakendusi ning kohandatud täiustamiseks ei pruugi olla piisavalt energiat, sobivust või kuluplaani. Ilma ettevalmistuseta loomine võib olla vastus mõnele probleemile, kuid see võib võtta kauem aega kui praegusest koodibaasist alustamine. WordPress oli algselt üles ehitatud ajaveebipidamise etapina ja see on selle jaoks jätkuvalt silmapaistev. Olgu kuidas on, see on arenenud täiesti arenenud sisuhaldussüsteemiks (CMS) ja mõnel eesmärgil võib isegi luua tugeva veebirakenduse – kiiresti ja oluliselt väiksema kuluplaaniga kui kohandatud täiustamine. Kuigi WordPress pakub sisseehitatud arendusrakendusi, Seda saab kasutada veebirakenduste jaoks, et muuta see eriti kasulikuks. Omaseid lehe- ja postitusstruktuure saab kasutada paljude asjade jaoks, kuid juhuks, kui on vaja kohandatud teavet ja välju lisada, otsida või küsitleda, kontrollida ja näidata, tuleb teha lisatööd.
Aeglaste päringute leidmine
Mõõdukate küsimuste päritolu leidmine hõlmab kahte etappi:
- Uurige välja, millised küsimused on tegelikult mõõdukad.
- Neid käitava programmi tuvastamine.
Tuleks uurida kahte moodulit ja ühte SaaS-i, mis võimaldavad neil mõõdukaid päringuid avastada.
Päringu monitor
Praegu töötava lehe kohta teabe saamiseks saab seda moodulit kasutada. Vaatamata tervele andmekogumile WordPressi sisetegevuste kohta, annab see punkt-punkti jaotuse:
- Kui palju küsimusi selle nõudmise kohta tekkis?
- Milline päring lehel võttis maksimaalselt aega?
- Millised võimsused investeerisid SQL-küsimustesse kõige rohkem energiat?
- Olenemata sellest, kas need päringud pärinevad moodulitest, õppeainetest või WordPressi keskusest
Päringuekraan tuvastab isegi mõõdukad küsimused, mille sisu on häiriv punane, mis muudab probleemi SQL-i valimise väga lihtsaks.
Silumisriba
Teine fenomenaalne instrument härmas mõõduka SQL-i leidmiseks on vana, usaldusväärne silumisriba moodul. Silumisriba pakub andmeid WordPressi sisemise toimimise kohta, kui leht on laaditud selliste asjadega nagu:
- WP_Query parameetrid
- Taotle andmeid (arvestab uuendamise reeglite kooskõlastamist)
- SQL-päringud, mille toodab käesolev leht
SQL-i jälgimise lubamiseks silumisribal peaks kasutaja märkima, et lubada SAVEQUERIES kuskil saidil – tõenäoliselt failis wp-config.php
Hoiatus: SAVEQUERIES mõjutab täitmist saidil ja arvatavasti ei tohiks seda genereerimisserveris kasutada. Seda saab aga kasutada edasijõudnute masinas.
Mõõduka SQL-i leidmine ei ole silumisriba abil eriti lihtne. Näiteks ei paku see kasutajale sorteeritavaid tabeleid ega paku mõõdukaid päringuid. Silumisriba pakub suutlikkust jälgida, mis suunab kasutaja täpselt küsimuse päritolu suunas.
See on laaditud dokumentide ja täidetava päringu tulemuseks olevate mahtude kokkuvõte. Enamasti on inimene huvitatud absoluutsest jätkamise osast. see on koht, kus mõõdukas küsimus täideti ja kust tuleks jahti alustada. Iga selle küsimuse esitava võimsuse seadistamise mugav asi on see, et see võib anda ülevaate sellest, miks SQL igal juhul käivitati.
Uus reliikvia
NewRelic on administratsioon, mis mõõdab ja kontrollib veebirakenduste, sealhulgas WordPressi rakenduste arendamise täitmist. Administratsioon annab saidi täitmise kohta tonni andmeid. See on kõike muud kui raske kaotada igasugune suunataju teabes, mille NewRelic annab kasutajale iga minuti jooksul SQL-päringute jaoks üksikasju.
NewRelici ja moodulite vahel, millele me varem viitasime, on kaks tähelepanuväärset kontrasti:
- NewRelic annab palju parema ülevaate PHP täitmisest kuni iga funktsiooni jaoks kulutatud aja täpse arvutamiseni
- NewRelic jälgib iga saidi nõudlust, et saaksite sellele hiljem viidata mõõduka SQL-i avastamiseks. Moodulid annavad talle lihtsalt praeguse lehe.
On oluline, et NewRelicil oleks tasuta korraldustase, mis annab üldisi andmeid saidi täitmise kohta, kuid väljamõeldud koefitsientide ja otste jaoks tuleb liikuda tasulise korralduse poole, et kontrollida üksikuid nõudmisi ja leida mõõdukaid päringuid.
Aeglase päringu mõistmine EXPLAIN abil
Kuni selle hetkeni on seadmed mõõdukate küsimuste leidmiseks turvatud. Praegu peaks teadma, miks need päringud asju takistavad.
MySQL EXPLAIN märgusõna võib võimaldada toimuvat selgitada. EXPLAIN lisamine päringu algusesse näitab, kuidas MySQL küsimust täidab. Keeruliste päringute puhul aitab EXPLAIN eristada SQL-i mõõdukaid fookusi, näiteks mõõdukaid alampäringuid või raiskavaid tegevusi.
Aeglaste päringute parandamine
Kuna mõistetakse, et päringud on mõõdukad ja EXPLAIN on andnud kasutajale teada, miks see nii on, tuleks nende uimaste probleemide lahendamiseks mõelda paarile valikule.
1 võimalus: küsimuse keerutamine
Võib tekkida küsimus, mis muudab postituse redigeerimise ekraani väga aeglaseks. Päring oli osa kohandatud väljade metakastist.
SQL-i kindel osa on meta_keys loendi toomine tabelist ks29so_postmeta, mis suure tõenäosusega ei alga alakriipsuga. GROUP BY selgitus tähendab, et iga tulemus on eriline.
Kui käivitate seda päringut mitu korda, siis siin on aeg, mil määral see võib aega võtta.
1,7145 sek
1,7911 sek
1,8076 sek
1,7707 sek
1,8456 sek
Võib välja töötada päringu, mille tulemuseks on sarnased väljundid. See tuleb valida kui ainulaadne meta_keys. Erakordne on samaväärne sõna konkreetse jaoks, mis juhtub olema SQL-i seletus!
2 valik: indeksi lisamine
Sel ajal, kui kasutaja esitab määratud MySQL-i tabelis SQL-küsimust, peab ta uurima kogu tabelit, et mõista, millised read on konkreetse päringu jaoks olulised. Kui tabel muutub suureks, võtab see kontrollimine üsna kaua aega.
See on koht, kus MySQL-kirjed tulevad sisse. Loendid võtavad teabe tabelisse ja korraldavad selle nii, et teabe leidmine on palju vähem nõudlik. Teabe konkreetsel viisil sorteerimisel aitavad failid vähendada MySQL-i filtreerimise mõõdet iga päringu puhul.
Faile saab lisada üksikutele segmentidele või erinevatele jaotistele.
Faili meta_key puhul sarnaneb esimene SQL-i küsimuste aeg mõnevõrra järgmiselt:
0,0041 sek
0,0023 sek
0,0030 sek
0,0025 sek
0,0019 sek
See on äärmiselt tark.
Failide hoiatuse väljendus: iga kord, kui INSERT teeb veeru või kasutatakse UPDATE, määratakse loend uuesti, mis võib olla kulukas tegevus. Kirjed muudavad tabelist lugemise kiiremaks, kuid sinna kirjutamine on aeglasem. Kuigi õigesti paigutatud registriloend võib väga hästi toimida, ei tohiks sellest kinnisideeks jääda ilma loendi üldist mõju andmebaasile kontrollimata.
Valik 3: salvestage päringutulemused vahemällu
Kui saadakse aru, et on mõõdukas küsimus. Selle asemel, et küsimust muuta, võib olla stsenaarium, kus see lihtsalt kõrvaldab päringu järelmõjud. Nii saaks piirata päringu teostamise sagedust ja ta saaks sagedamini “tasuta pääsme”.
WordPress Transients API on üks päringute reserveerimise viise. Siirdeid kasutatakse kulukate ülesannete tagajärgede kõrvaldamiseks, näiteks
- Päringud välistele saitidele (nt jooksvate Facebooki postituste saamine)
- Aeglased käsitsemise tükid (näiteks tavapärase artikulatsiooniga tohutute nööride otsimine)
- Aeglased andmebaasipäringud!
Lähenemisviisi valimine
Välja on pakutud mitmeid alternatiive ja selle mõõduka küsitluse mõistmiseks on tõenäoliselt seitseteist erinevat lähenemisviisi. Millist lähenemist tuleks kasutada?
Valik 1 (küsimuse muutmine) andis suurepäraseid tulemusi. Siiski tuleks arvestada võimalusega, et muudetud päringul ei ole üldiselt sarnaseid tulemusi. Koodi võiks tahtmatult mõne kõrvalekalduva küsimusega vahele tõmmata.
Alternatiiv 2 (kaasa arvatud kirje) ei ole pidevalt mõeldav, sõltudes päringus kasutatud tabelist ja jaotistest. WordPressi rakenduste arenduskeskuse tabelite tõttu tuleks rõhutada kirjete muid mõjusid:
- Kas keskust värskendav rutiin ootab lisanimekirju?
- Kas faili kaasamine vähendab erinevaid päringuid, sarnaselt INSERT ja UPDATE?
Alternatiiv 3 (tulemuste reserveerimine kodutute abil) on ebaoluline – kasutaja ei pea esimest päringut muutma ja andmebaasi struktuuri pole vaja kohandada.
Tavaliselt valivad inimesed 3. variandi. Konkreetsel juhul võib ta valida mõne muu alternatiivi, tuginedes lahendatavale küsimusele või konkreetsele saidile, millel on SQL-probleemid. Kindlasti ei ole enamiku täitmisprobleemide puhul ühest meedet, mis sobib kõigile, nii et ühel on lubatud teiste otsustest erineda – või proovige hetkegi viivitamata kõiki kolmest!
Ajakohasena püsimine
See on siin visandanud tõelise probleemi. CSS-Tricksi kohandatud väljade kast oli tõesti mõne äärmiselt mõõduka andmebaasipäringu rikkuja. Samuti on see visandanud erinevaid võimalusi võimalike kokkulepete saavutamiseks.
Uhiuute ideede väljamõtlemine
Küsimuse täitmist saab proovida ja kiirendada mitmel erineval viisil, mis hõlmab rohkem tööd kui lihtsalt päringu kohandamine või loendi lisamine. Küsimuse üks aeglasemaid osi on töö, mis tehakse tabelite ühendamiseks, et minna kliendi ID-st üksuse ID-ni, ja seda tuleb teha iga kliendi jaoks.
Teabe saab denormaliseerida, koostades tabeli, mis salvestab loa teabe koos kõigi litsentside kliendi ID ja üksuse ID-ga, ning lihtsalt pärida selle kohta konkreetse kliendi jaoks. Litsentsitabelisse tuleks muuta tabelit, kasutades MySQL-i käivitajaid INSERT/UPDATE/DELETE (või teisi, mis sõltuvad sellest, kuidas teave võib muutuda), kuid see parandaks oluliselt selle teabe küsitlemist.
Seega, kui erinevad ühendused vähendavad küsimust MySQL-is, võib olla kiirem jagada päring vähemalt kaheks liigenduseks ja käivitada need PHP-s iseseisvalt ning seejärel koguda ja suunata tulemused koodi.