Nyttige triks for å finne og fikse trege WordPress-databasespørringer
Moderate SQL-forespørsler kan slå ut til WordPress-applikasjonsutviklingsnettstedets utførelse. En gang i blant er moderate henvendelser en ettervirkning av utilstrekkelig strukturert SQL som aldri burde vært gjort på den måten.
Dessuten var moderate henvendelser i noen tilfeller i virkeligheten raske spørsmål på et visst tidspunkt – men etter hvert som siden ble mer erfaren, ble henvendelsen langsommere og tregere, maktesløs til å holde seg klar over den utvidede databasen.
Til tross for hvordan SQL ble moderat, bør man undersøke et par tilnærminger for å oppdage og fikse problemspørsmål i WordPress-applikasjonsutviklingen. Her og der kan man trenge visse nettapplikasjoner og kanskje ikke ha tilstrekkelig energi, evner eller forbruksplaner til å gjøre tilpassede forbedringer. Å lage uten noen forberedelse kan være svaret på noen problemer, men det kan ta lengre tid enn å begynne fra en gjeldende kodebase. WordPress ble opprinnelig strukturert som et bloggstadium, og det fortsetter å være enestående for det. Uansett, det har utviklet seg til et komplett innholdsstyringssystem (CMS) og kan for noen få formål til og med lage en sterk nettapplikasjon – raskt og til en fundamentalt lavere kostnadsplan enn tilpasset forbedring. Mens WordPress tilbyr innebygde utviklingsapplikasjoner, den kan brukes til webapplikasjoner, for å gjøre den ekstra nyttig. De iboende side- og innleggsstrukturene kan brukes til mange ting, men dersom man trenger tilpasset informasjon og felt som skal inkluderes, søkes eller stilles spørsmål, kontrolleres og vises, kreves det litt ekstra arbeid.
Finne sakte søk
Å finne opprinnelsen til moderate spørsmål inkluderer to stadier:
- Å finne ut hvilke spørsmål som egentlig er de moderate.
- Identifisere programmet som driver dem.
Man bør ta en titt på to moduler og én SaaS som kan gjøre dem i stand til å oppdage moderate henvendelser.
Spørremonitor
For å benytte informasjon om siden som kjøres for tiden, kan denne modulen brukes. Til tross for en hel klynge med data om de interne aktivitetene til WordPress, gir den en punkt for punkt oppdeling av:
- Hvor mange spørsmål oppsto på denne etterspørselen?
- Hvilken forespørsel på siden tok maksimalt tid?
- Hvilke kapasiteter investerte mest energi i SQL-spørsmål?
- Enten disse henvendelsene stammer fra moduler, fag eller WordPress-senteret
Forespørselsskjermen gjenkjenner til og med moderate spørsmål med nervepirrende rødt innhold, noe som gjør det veldig enkelt å velge problemet SQL.
Feilsøkingslinje
Et annet fenomenalt instrument for å finne frodig moderat SQL er den gamle, pålitelige Debug Bar-modulen. Debug Bar gir én data om den indre funksjonen til WordPress når en side er lastet med saker som:
- Parametere for WP_Query
- Forespørsel om data (koordinering av tellefornyelsesregler)
- SQL-forespørsler produsert av denne siden
For å aktivere SQL-følge i feilsøkingslinjen, bør brukeren gjøre et poeng å tillate SAVEQUERIES et sted på nettstedet – sannsynligvis i wp-config.php
Advarsel: SAVEQUERIES påvirker kjøringen på nettstedet, og bør antagelig ikke brukes på en generasjonsserver. Den kan imidlertid brukes på en avanseringsmaskin.
Å finne den moderate SQL-en er ikke ekstremt lett med Debug Bar. For eksempel gir den ikke de sorterbare tabellene eller har moderate forespørsler for brukeren. Det Debug Bar gir er en kapasitetsfølging som leder brukeren nøyaktig mot retningen til opprinnelsen til et spørsmål.
Dette er en oversikt over dokumentene som er lastet inn og kapasitetene som kommer ut i henvendelsen som blir utført. Oftere enn ikke, er man opptatt av den absolutte fortsett-delen på sammendraget; dette er stedet det moderate spørsmålet ble utført og hvor man bør starte sin jakt. Det praktiske med å ha innstillingen for hver kapasitet som stiller dette spørsmålet, er at det kan avsløre innsikt i hvorfor SQL-en i alle fall ble utført.
NewRelic
NewRelic er en administrasjon som måler og skjermer gjennomføringen av webapplikasjonsutvikling, inkludert WordPress applikasjonsutvikling. Administrasjonen gir massevis av data om utførelsen av nettstedet. Det er alt annet enn vanskelig å miste all følelse av retning i informasjonen NewRelic gir brukeren hvert minutt detaljer for SQL-henvendelser.
Det er to bemerkelsesverdige kontraster mellom NewRelic og modulene vi refererte til før:
- NewRelic gir mye mer innsikt angående utførelse av PHP, ned til den eksakte beregningen av tid brukt i hver funksjon
- NewRelic sporer hvert krav til nettstedet ute av syne, slik at man kan referere det senere for å oppdage moderat SQL. Modulene gir ham bare denne siden.
Det er viktig at NewRelic har et gratis arrangementsnivå som gir generelle data om gjennomføringen av siden, men at man må gå opp til en betalt ordning for de fancy oddsene for å sjekke enestående krav og finne moderate henvendelser.
Forstå et sakte søk med EXPLAIN
Frem til dette tidspunktet har enhetene vært sikret for å finne moderate spørsmål. For tiden bør det være kjent hvorfor disse henvendelsene hindrer ting.
MySQL EXPLAIN-stikkordet kan gjøre det mulig å klargjøre hva som skjer. Å legge til EXPLAIN i begynnelsen av en forespørsel indikerer hvordan MySQL utfører et spørsmål. For kronglete forespørsler kan EXPLAIN hjelpe med å skille moderate fokus i SQL-ene, for eksempel moderate underspørringer eller bortkastede aktiviteter.
Retting av trege spørsmål
Siden det er innsett at spørringene er moderate, og EXPLAIN har gitt brukeren avslørt hvorfor det er det, bør man ta et par valg for å fikse disse døsige problemene.
Alternativ 1: Vri på spørsmålet
Det kan være et spørsmål som setter skjermen til Rediger innlegg til en veldig lav hastighet. Henvendelsen var en del av metaboksen til Custom Fields.
Den bestemte delen av SQL bringer en meta_keys-liste fra ks29so_postmeta-tabellen som etter all sannsynlighet ikke begynner med tegnet understrek. GROUP BY-forklaringen antyder at hvert utfall er spesielt.
Når du kjører denne forespørselen flere ganger, her er tiden i hvilken grad det kan ta:
1,7145 sek
1,7911 sek
1,8076 sek
1,7707 sek
1,8456 sek
Man kan utvikle en spørring som resulterer i lignende utganger. Det må velges som unike meta_keys. Eksepsjonell er et ekvivalent ord for spesielt, som tilfeldigvis er en SQL-forklaring!
Alternativ 2: Legge til en indeks
Mens brukeren kjører et SQL-spørsmål på en satt MySQL-tabell, må den undersøke hele tabellen for å forstå hvilke linjene som er viktige for den aktuelle forespørselen. Når bordet blir stort, begynner sjekkingen å ta ganske lang tid.
Det er stedet MySQL-poster kommer inn. Lister tar informasjonen i en tabell og ordner den slik at det blir mye mindre krevende å finne informasjon. Ved å sortere ut informasjonen på en bestemt måte, hjelper filer med å redusere mengden filtrering som MySQL oppnår for hver forespørsel.
Filer kan legges til enkeltsegmenter eller over ulike seksjoner.
Med en fil på meta_key, ligner den aller første SQL-spørretiden noe på dette:
0,0041 sek
0,0023 sek
0,0030 sek
0,0025 sek
0,0019 sek
Dette er ekstremt smart.
Et uttrykk for varsling på filer: Hver gang INSERT lager en kolonne eller OPPDATERING brukes på en tabell, blir listen ombestemt, noe som kan være en kostbar aktivitet. Opptegnelser gjør det raskere å lese fra tabellen, men det går tregere å skrive til den. Selv om en riktig plassert indeksliste kan fungere ekstremt bra, bør man ikke være besatt av den uten å sjekke listens generelle innvirkning på databasen.
Alternativ 3: Bufre spørringsresultatene
Når det er innsett at det er et moderat spørsmål. I stedet for å endre spørsmålet, kan det være et scenario der det bare legger bort ettervirkningene av henvendelsen. På den måten ville man begrense hvor regelmessig henvendelsen ble utført, og han ville oftere enn ikke få «gratispass».
WordPress Transients API er en av måtene å reservere spørringene på. Transienter brukes for å fjerne konsekvensene av kostbare oppgaver, f.eks.
- Forespørsler til eksterne nettsteder (for eksempel å få pågående Facebook-innlegg)
- Langsomme håndteringsklumper (for eksempel på jakt etter enorme strenger med vanlig artikulasjon)
- Langsomme databaseforespørsler!
Velge en tilnærming
Det er en rekke alternativer som er lagt ut, og det er mest sannsynlig sytten ulike tilnærminger for å forstå denne moderate henvendelsen. Hvilken tilnærming bør man ta?
Valg 1 (endre spørsmålet) ga strålende resultater. Det bør imidlertid vurderes at den modifiserte henvendelsen generelt sett ikke har lignende utfall. Man kunne uforvarende borke koden med et noe avgjort spørsmål.
Alternativ 2 (inkludert en post) er ikke alltid tenkelig avhengig av tabellen og seksjonene som brukes av forespørselen. På grunn av WordPress applikasjonsutviklingssentertabeller, må man stresse over de andre effektene av postene:
- Forventer senterets oppfriskende rutine flere lister?
- Vil det å inkludere en fil moderere forskjellige henvendelser, som ligner på INSERT og UPDATE?
Alternativ 3 (reservering av utfall ved hjelp av hjemløse) har ubetydelig effekt – brukeren trenger ikke endre den første henvendelsen og det er ikke behov for å justere databasestrukturen.
Vanligvis velger folk alternativ 3. I ens spesifikke tilfelle kan han velge et annet alternativ basert på spørsmålet han fikser eller det spesifikke nettstedet har SQL-problemer. Det er absolutt ikke et svar som passer alle på de fleste utførelsesspørsmål, så man har lov til å avvike med andres avgjørelse – eller prøv hver og en av de tre uten et øyeblikks forsinkelse!
Holder seg oppdatert
Den har skissert et genuint problem her. Egendefinerte felt-boksen på CSS-Tricks var virkelig en lovbryter for noen ekstremt moderate databaseforespørsler. Den har også skissert ulike veier mot potensielle arrangementer.
Utvikling av helt nye ideer
Det er forskjellige metoder man kan bruke for å forsøke å akselerere utførelse av spørsmål som inkluderer mer arbeid enn bare å justere forespørselen eller inkludere en liste. En av de tregeste delene av spørsmålet er arbeidet som gjøres for å slå sammen tabellene for å gå fra klient-ID til element-ID, og man må gjøre dette for hver klient.
Man kan denormalisere informasjonen ved å lage en tabell som lagrer tillatelsesinformasjonen, sammen med klient-ID og vare-ID for alle lisenser og ganske enkelt spørre mot det for en bestemt klient. Man må endre tabellen ved å bruke MySQL-utløsere på INSERT/UPDATE/DELETE til lisenstabellen (eller andre som stoler på hvordan informasjonen kan endres), men dette vil betydelig forbedre utførelsen av å stille spørsmål ved den informasjonen.
Derfor, hvis ulike sammenføyninger modererer spørsmålet i MySQL, kan det være raskere å dele opp forespørselen i minst to artikulasjoner og utføre dem uavhengig i PHP og deretter samle og kanalisere resultatene i kode.