Trucchi utili per trovare e correggere le query lente del database di WordPress
Richieste SQL moderate possono ostacolare l’esecuzione del sito di sviluppo di applicazioni WordPress. Di tanto in tanto, richieste moderate sono un effetto collaterale di SQL strutturato in modo inadeguato che non avrebbe mai dovuto essere fatto in quel modo.
Inoltre, in alcuni casi, le richieste moderate erano, in realtà, domande rapide a un certo punto, ma man mano che il sito diventava più esperto, la richiesta diventava sempre più lenta, impotente a stare al corrente del database in espansione.
Nonostante il modo in cui l’SQL è diventato moderato, è necessario esaminare un paio di approcci per scoprire e risolvere i problemi nello sviluppo dell’applicazione WordPress. Qua e là si potrebbe richiedere una determinata applicazione web e potrebbe non avere sufficiente energia, attitudine o piano di spesa per apportare miglioramenti personalizzati. Creare senza alcuna preparazione può essere la risposta ad alcuni problemi, tuttavia può richiedere più tempo che iniziare da una base di codice corrente. WordPress è stato inizialmente strutturato come una fase di blogging e continua ad essere eccezionale per questo. Comunque sia, è diventato un sistema di gestione dei contenuti (CMS) completo e, per alcuni scopi, può persino creare un’applicazione Web potente, rapidamente e con un piano di spesa fondamentalmente inferiore rispetto al miglioramento personalizzato. Sebbene WordPress offra applicazioni di sviluppo integrate, può essere utilizzato per applicazioni web, al fine di renderlo più utile. Le strutture intrinseche della pagina e dei post possono essere utilizzate per molte cose, ma nella remota possibilità che si desideri includere informazioni e campi personalizzati, ricercati o interrogati, controllati e mostrati, è necessario un lavoro extra.
Trovare query lente
Trovare l’origine delle domande moderate comprende due fasi:
- Scoprire quali sono davvero le domande moderate.
- Identificare il programma che li sta eseguendo.
Si dovrebbe dare un’occhiata a due moduli e un SaaS che possono consentire loro di scoprire richieste moderate.
Controllo query
Per usufruire delle informazioni sulla pagina attualmente in esecuzione, è possibile utilizzare questo modulo. Nonostante un intero cluster di dati sulle attività interne di WordPress, fornisce una ripartizione punto per punto di:
- Quante domande si sono verificate su questa richiesta?
- Quale richiesta sulla pagina ha richiesto il tempo massimo?
- Quali capacità hanno investito più energia nelle domande SQL?
- Indipendentemente dal fatto che tali richieste provengano da moduli, argomenti o dal centro WordPress
La schermata di richiesta riconosce anche domande moderate con contenuto rosso snervante, il che rende molto semplice selezionare il problema SQL.
Barra di debug
Un altro strumento fenomenale per trovare SQL gelidamente moderato è il vecchio e fidato modulo Debug Bar. La barra di debug fornisce un dato sul funzionamento interno di WordPress quando una pagina viene caricata con argomenti come:
- Parametri di WP_Query
- Dati della richiesta (conteggio del coordinamento delle regole di rinnovamento)
- Interrogazioni SQL prodotte dalla presente pagina
Per abilitare SQL following nella barra di debug, l’utente dovrebbe fare in modo di consentire SAVEQUERIES da qualche parte sul sito, probabilmente in wp-config.php
Attenzione: SAVEQUERIES influisce sull’esecuzione sul sito e presumibilmente non dovrebbe essere utilizzato su un server di generazione. Tuttavia, può essere utilizzato su una macchina di avanzamento.
Trovare l’SQL moderato non è estremamente facile con la barra di debug. Ad esempio, non fornisce le tabelle ordinabili o presenta richieste moderate per l’utente. Ciò che fornisce Debug Bar è una capacità di seguire che indirizza l’utente precisamente verso la direzione dell’origine di una domanda.
Questa è una carrellata dei documenti che vengono caricati e delle capacità che risultano nell’esecuzione dell’inchiesta. Il più delle volte, si è entusiasti della sezione continua assoluta del riepilogo; questo è il luogo in cui è stata eseguita la domanda moderata e dove si dovrebbe iniziare la sua caccia. La cosa comoda di avere l’impostazione di ogni capacità che richiede questa domanda è che può rivelare informazioni sul motivo per cui l’SQL è stato eseguito in ogni caso.
NewRelic
NewRelic è un’amministrazione che misura e controlla l’esecuzione dello sviluppo di applicazioni Web, incluso lo sviluppo di applicazioni WordPress. L’amministrazione fornisce una tonnellata metrica di dati sull’esecuzione del sito. È tutt’altro che difficile perdere il senso dell’orientamento nelle informazioni che NewRelic fornisce all’utente ogni minimo dettaglio per le richieste SQL.
Ci sono due contrasti degni di nota tra NewRelic e i moduli a cui abbiamo fatto riferimento in precedenza:
- NewRelic fornisce molte più informazioni sull’esecuzione del PHP, fino al calcolo esatto del tempo trascorso in ciascuna funzione
- NewRelic tiene traccia di ogni richiesta al sito lontano dalla vista, quindi è possibile fare riferimento in seguito per scoprire SQL moderato. I moduli gli danno solo la pagina presente.
È importante che NewRelic abbia un livello di arrangiamento gratuito che fornisca dati generali sull’esecuzione del sito, tuttavia si dovrà passare a un arrangiamento a pagamento per le cianfrusaglie fantasiose per controllare le richieste singolari e trovare richieste moderate.
Comprensione di una query lenta con EXPLAIN
Fino a questo punto, i dispositivi sono stati protetti per trovare domande moderate. Al momento dovrebbe essere noto il motivo per cui tali indagini stanno ostacolando le cose.
La parola d’ordine MySQL EXPLAIN può consentire, ehm, di chiarire cosa sta succedendo. L’aggiunta di EXPLAIN all’inizio di una richiesta indica come MySQL esegue una domanda. Per richieste contorte, EXPLAIN può aiutare a distinguere focus moderati negli SQL, ad esempio sottoquery moderate o attività dispendiose.
Correzione delle query lente
Poiché si è capito che le query sono moderate e EXPLAIN ha rivelato all’utente il motivo per cui lo è, si dovrebbe dare un’occhiata a un paio di scelte per risolvere quei problemi sonnolenti.
Opzione 1: girare la domanda
Potrebbe esserci una domanda che rallenta molto la schermata di Modifica post. La richiesta era un pezzo del meta box di Custom Fields.
Il pezzo definitivo di SQL sta portando un elenco meta_keys dalla tabella ks29so_postmeta che con ogni probabilità non inizia con il segno di sottolineatura. La spiegazione GROUP BY implica che ogni risultato è speciale.
Eseguendo questa richiesta più volte, ecco il tempo fino a che punto può richiedere:
1,7145 sec
1,7911 sec
1,8076 sec
1,7707 sec
1,8456 sec
Si potrebbe sviluppare una query che si traduce in output simili. Deve essere scelto come meta_keys unico nel suo genere. Eccezionale è una parola equivalente per particolare, che guarda caso è una spiegazione SQL!
Opzione 2: aggiunta di un indice
Mentre l’utente esegue una domanda SQL su una tabella MySQL impostata, deve esaminare l’intera tabella per capire quali sono le righe significative per la particolare richiesta. Nel momento in cui il tavolo diventa enorme, quel check inizia a richiedere un po’ di tempo.
È qui che entrano in gioco i record MySQL. Gli elenchi prendono le informazioni in una tabella e le organizzano in modo tale da rendere le informazioni molto meno impegnative da trovare. Ordinando le informazioni in un modo specifico, i file aiutano a ridurre la misura del filtraggio che MySQL compie per ogni richiesta.
I file possono essere aggiunti a singoli segmenti o su varie sezioni.
Con un file su meta_key, il primo question time SQL assomiglia in qualche modo a questo:
0,0041 sec
0,0023 sec
0,0030 sec
0,0025 sec
0,0019 sec
Questo è estremamente intelligente.
Un’espressione di avviso sui file: ogni volta che INSERT crea una colonna o UPDATE viene utilizzato su una tabella af, l’elenco viene rideterminato, il che può essere un’attività costosa. I record rendono più veloce la consultazione della tabella, ma la scrittura su di essa è più lenta. Sebbene un elenco di indici correttamente posizionato possa funzionare molto bene, non bisogna esserne ossessionati senza controllare l’impatto generale dell’elenco sul database.
Opzione 3: memorizzare nella cache i risultati della query
Una volta capito che c’è una domanda moderata. Piuttosto che cambiare la domanda, può esserci uno scenario in cui si limitano a mettere da parte i postumi dell’indagine. In questo modo, si limiterebbe la regolarità con cui viene eseguita l’indagine e si otterrebbe un “pass gratuito” il più delle volte.
L’API Transient di WordPress è uno dei modi per prenotare le query. I transitori vengono utilizzati per mettere da parte le conseguenze di attività costose, ad esempio,
- Richieste a siti esterni (ad esempio ottenere post su Facebook in corso)
- Grumi lenti di maneggevolezza (ad esempio alla ricerca di corde enormi con un’articolazione abituale)
- Richieste di database lente!
Scegliere un approccio
Ci sono una serie di alternative che sono state presentate, e molto probabilmente ci sono diciassette approcci diversi per comprendere questa indagine moderata. Quale approccio si dovrebbe adottare?
La scelta 1 (cambiare la domanda) ha prodotto risultati brillanti. Tuttavia, va considerata la possibilità che l’indagine modificata non abbia generalmente esiti simili. Si potrebbe inconsapevolmente bordare il codice con una domanda un po’ fuori luogo.
L’alternativa 2 (incluso un record) non è sempre concepibile a seconda della tabella e delle sezioni utilizzate dall’inchiesta. A causa delle tabelle del centro di sviluppo di applicazioni WordPress, si dovrebbe sottolineare gli altri effetti dei record:
- La routine di aggiornamento del centro prevede elenchi aggiuntivi?
- L’inclusione di un file modererà richieste diverse, simili a INSERT e UPDATE?
L’alternativa 3 (riservare i risultati tramite i senzatetto) ha un effetto insignificante: l’utente non deve modificare la prima richiesta e non è necessario modificare la struttura del database.
Di solito, le persone optano per l’opzione 3. Nel proprio caso specifico, può scegliere un’altra alternativa basandosi sulla domanda che sta risolvendo o sul sito specifico che ha problemi con SQL. Non esiste certamente una risposta valida per tutti alla maggior parte dei problemi di esecuzione, quindi uno può differire dalla decisione dell’altro, oppure tentare ognuno dei tre senza un attimo di ritardo!
Rimanere aggiornato
Ha abbozzato un vero problema qui. La casella Campi personalizzati su CSS-Tricks era davvero un trasgressore per alcune richieste di database estremamente moderate. Allo stesso modo ha delineato vari modi verso potenziali accordi.
Ideazione di nuove idee
Esistono diverse metodologie che si possono adottare per tentare e accelerare l’esecuzione delle domande che includono più lavoro rispetto alla semplice modifica della richiesta o all’inclusione di un elenco. Una delle parti più lente della domanda è il lavoro svolto per unire le tabelle per passare dall’ID cliente all’ID oggetto, e bisogna farlo per ogni cliente.
Si potrebbe denormalizzare le informazioni creando una tabella che memorizzi le informazioni sul permesso, accanto all’ID client e all’ID articolo per tutte le licenze e semplicemente facendo una richiesta per un particolare cliente. Sarebbe necessario modificare la tabella utilizzando i trigger MySQL su INSERT/UPDATE/DELETE nella tabella delle licenze (o altri in base a come le informazioni potrebbero cambiare), tuttavia ciò migliorerebbe in modo significativo l’esecuzione della messa in discussione di tali informazioni.
Pertanto, se vari join moderano la domanda in MySQL, potrebbe essere più veloce suddividere la domanda in almeno due articolazioni ed eseguirle indipendentemente in PHP e successivamente raccogliere e incanalare i risultati nel codice.