Trucchi utili per trovare e correggere le query lente del database di WordPress
Pubblicato: 2019-04-17Richieste SQL moderate possono compromettere l'esecuzione del sito di sviluppo di applicazioni WordPress. Di tanto in tanto, le richieste moderate sono un effetto collaterale di un 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 quando il sito diventava più stagionato, l'indagine diventava sempre più lenta, impotente a rimanere a conoscenza dell'estensione del database.
Nonostante il modo in cui l'SQL sia diventato moderato, si dovrebbero studiare un paio di approcci per scoprire e risolvere i problemi nello sviluppo di applicazioni WordPress. Qua e là uno potrebbe richiedere determinate applicazioni web e potrebbe non avere energia, attitudine o piano di spesa sufficienti per apportare miglioramenti personalizzati. La creazione senza alcuna preparazione può essere la risposta ad alcuni problemi, ma può richiedere più tempo rispetto all'inizio da una base di codice corrente. WordPress era inizialmente strutturato come una fase di blogging e continua a essere eccezionale per questo. Comunque sia, è avanzato in un sistema di gestione dei contenuti (CMS) a tutti gli effetti 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, in modo da renderlo ancora più utile. La pagina intrinseca e le strutture dei post possono essere utilizzate per molte cose, ma nella remota possibilità che siano necessarie informazioni e campi personalizzati da includere, cercare o interrogare, controllare e mostrare, è necessario del lavoro extra.
Trovare query lente
Trovare l'origine delle domande moderate comprende due fasi:
- Scoprire quali domande sono davvero quelle moderate.
- Identificare il programma che li sta operando.
Si dovrebbe dare un'occhiata a due moduli e un SaaS che possono consentire loro di scoprire richieste moderate.
Monitoraggio delle query
Per usufruire delle informazioni sulla pagina attualmente in esecuzione, è possibile utilizzare questo modulo. Nonostante un intero gruppo di dati sulle attività interne di WordPress, fornisce una ripartizione punto per punto di:
- Quante domande sono sorte su questa domanda?
- Quale richiesta sulla pagina ha richiesto il tempo massimo?
- Quali capacità hanno investito più energia nelle domande SQL?
- Se tali richieste provenissero da moduli, argomenti o dal centro WordPress
La schermata di richiesta riconosce anche le domande moderate con un contenuto rosso snervante, il che rende molto semplice selezionare l'SQL del problema.
Barra di debug
Un altro strumento fenomenale per trovare un SQL gelido moderato è il vecchio e affidabile 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
- Richiedere i dati (coordinamento delle regole di rinnovamento del conteggio)
- Richieste SQL prodotte dalla presente pagina
Per abilitare SQL che segue nella barra di debug, l'utente dovrebbe fare un punto per 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 Debug Bar. Ad esempio, non fornisce le tabelle ordinabili o presenta richieste moderate per l'utente. Ciò che offre Debug Bar è una capacità di follow che indirizza l'utente precisamente verso la direzione dell'origine di una domanda.
Questo è un riassunto dei documenti caricati e delle capacità che risultano nell'esecuzione dell'indagine. Il più delle volte, uno è appassionato della sezione del continuo andare avanti nella carrellata; questo è il luogo in cui è stata eseguita la questione moderata e dove si dovrebbe iniziare la caccia. La cosa conveniente di avere l'impostazione di ogni capacità che richiede questa domanda è che può rivelare informazioni sul motivo per cui l'SQL è stato comunque eseguito.
Nuova reliquia
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 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 prima:
- NewRelic fornisce molte più informazioni sull'esecuzione del PHP, fino al calcolo esatto del tempo speso in ciascuna funzione
- NewRelic tiene traccia di ogni richiesta al sito in modo invisibile, in modo da poterla fare riferimento in seguito per scoprire un SQL moderato. I moduli gli danno solo la pagina attuale.
È importante che NewRelic abbia un livello di arrangiamento gratuito che fornisce dati generali sull'esecuzione del sito, tuttavia si dovrà passare a un arrangiamento a pagamento per le stravaganti probabilità e fini per controllare singole richieste e trovare richieste moderate.
Comprendere 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 quelle richieste 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 le richieste contorte, EXPLAIN può aiutare a distinguere i focus moderati negli SQL, ad esempio, subquery moderate o attività dispendiose.
Correzione di query lente
Poiché si è capito che le query sono moderate e EXPLAIN ha rivelato all'utente il motivo per cui lo è, è necessario dare un'occhiata a un paio di scelte per risolvere quei problemi di sonnolenza.
Opzione 1: distorcere la domanda
Potrebbe esserci una domanda che sta rallentando molto lo schermo di Modifica post. La richiesta era un pezzo del meta box di Custom Fields.
Il pezzo definitivo di SQL sta portando un elenco di 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ò essere necessario:
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 sembra essere 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 dare un senso a quali siano le righe significative per la particolare richiesta. Nel momento in cui il tavolo diventa enorme, il check inizia a richiedere un bel po' di tempo.
Questo è il punto in cui entrano i record MySQL. Gli elenchi prendono le informazioni in una tabella e le dispongono in modo tale da rendere le informazioni molto meno difficili 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 tempo di interrogazione SQL è in qualche modo simile 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, l'elenco viene rideterminato, il che può essere un'attività costosa. I record rendono più veloce la lettura dalla tabella, ma la scrittura su di essa è più lenta. Sebbene un elenco di indici posizionato correttamente possa funzionare molto bene, non bisogna esserne ossessionati senza controllare l'impatto generale dell'elenco sul database.
Opzione 3: memorizza nella cache i risultati della query
Una volta capito che c'è una domanda moderata. Invece di cambiare la domanda, può esserci uno scenario in cui si limitano a mettere da parte le conseguenze dell'indagine. In questo modo, si limiterebbe la frequenza con cui l'indagine è stata eseguita 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 eliminare le conseguenze di attività costose, ad esempio,
- Richieste a siti esterni (ad esempio ricevere post su Facebook in corso)
- Manipolazione lenta (per esempio alla ricerca di corde enormi con un'articolazione abituale)
- Richieste di database lente!
Scegliere un approccio
Ci sono un certo numero di alternative che sono state presentate e ci sono molto probabilmente diciassette diversi approcci per comprendere questa indagine moderata. Quale approccio si dovrebbe adottare?
La scelta 1 (cambiare la domanda) ha prodotto risultati brillanti. Tuttavia, si dovrebbe considerare la possibilità che l'indagine modificata non abbia generalmente esiti simili. Si potrebbe inconsapevolmente interrompere il codice con una domanda un po' off.
L'alternativa 2 (incluso un record) non è costantemente concepibile in base alla tabella e alle sezioni utilizzate dall'indagine. 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 per mezzo di persone senza fissa dimora) ha un effetto insignificante: l'utente non deve modificare la prima richiesta e non è necessario adattare 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 c'è certamente una risposta valida per tutti alla maggior parte dei problemi di esecuzione, quindi uno può differire con la decisione dell'altro o, prova ognuno dei tre senza un attimo di ritardo!
Rimani aggiornato
Ha abbozzato qui un vero problema. La casella Campi personalizzati su CSS-Tricks è stata davvero un delinquente per alcune richieste di database estremamente moderate. Allo stesso modo ha abbozzato vari modi verso potenziali accordi.
Ideazione di idee nuove di zecca
Esistono diverse metodologie che si possono adottare per tentare e accelerare l'esecuzione delle domande che includono più lavoro rispetto alla semplice modifica dell'indagine o all'inclusione di un elenco. Una delle parti più lente della domanda è il lavoro svolto per unire le tabelle per passare dall'ID client all'ID oggetto, e uno deve farlo per ciascun client.
Si potrebbe denormalizzare le informazioni creando una tabella che memorizza le informazioni sul permesso, insieme all'ID cliente e all'ID articolo per tutte le licenze e semplicemente interrogando quelle per un particolare cliente. Sarebbe necessario modificare la tabella utilizzando i trigger MySQL su INSERT/UPDATE/DELETE nella tabella delle licenze (o altri basandosi su come le informazioni potrebbero cambiare), tuttavia ciò migliorerebbe significativamente l'esecuzione della messa in discussione di tali informazioni.
Pertanto, se vari join moderano la domanda in MySQL, potrebbe essere più veloce suddividere l'indagine in almeno due articolazioni ed eseguirle indipendentemente in PHP e successivamente raccogliere e canalizzare i risultati nel codice.