Skip to content

Profiler ed elenco processi

Due strumenti per la domanda «perché è lento?» — uno guarda la query, l'altro il server.

Profiler delle query

Clicca Profiler nella barra degli strumenti. Se una scheda dell'editor SQL è attiva, la sua query viene riportata — altrimenti scegli connessione e database e incollane una. NabuSQL esegue EXPLAIN (ANALYZE) FORMAT=JSON e disegna il piano come albero.

Ogni nodo mostra la tabella che tocca e il suo costo, e i nodi sono pesati rispetto al più costoso: così la parte della query che fa danno è visivamente evidente invece di essere sepolta in una tabella di numeri. Le condizioni collegate sono mostrate sul nodo a cui si applicano.

Costruito attorno al formato di piano di MySQL

Il profiler interpreta l'output di EXPLAIN FORMAT=JSON di MySQL. Su MySQL e MariaDB ottieni l'albero completo. Altri motori producono piani di forma diversa: lì usa F6 (Explain) nell' editor SQL, che mostra ciò che il server restituisce.

Leggere un piano

Vale la pena cercare:

  • Una scansione completa di una tabella grande dove ti aspettavi un accesso per indice.
  • Un costo concentrato in un solo nodo — è lì che si ottimizza per primo.
  • Un indice che esiste ma non viene usato, di solito perché la clausola WHERE avvolge la colonna in una funzione o la confronta con un tipo diverso.

Dopo aver aggiunto un indice in Tabelle e colonne, riesegui il profiler per confermare che il piano sia davvero cambiato. Un indice che il pianificatore ignora ti costa in scritture e non porta nulla.

Elenco processi

Clic destro su un database e Process List per vedere cosa sta facendo il server in questo momento: le sessioni collegate, le query in esecuzione e da quanto tempo girano.

Kill termina una sessione. È lo strumento per la query impazzita che tiene lock mentre il resto dell'applicazione aspetta.

Terminare una sessione comporta un rollback

Una transazione interrotta viene annullata dal server, e su una scrittura lunga questo può richiedere quanto l'istruzione stessa. Guarda cosa sta facendo la sessione prima di terminarla.

Un ordine pratico

  1. L'applicazione è lenta → Elenco processi: c'è una query che blocca tutto?
  2. Una query specifica è lenta → Profiler: dove si concentra il costo?
  3. Correzione — indice, WHERE riscritto, ordine dei join diverso.
  4. Riesegui il profiler e conferma che il piano è cambiato.