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
WHEREavvolge 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
- L'applicazione è lenta → Elenco processi: c'è una query che blocca tutto?
- Una query specifica è lenta → Profiler: dove si concentra il costo?
- Correzione — indice,
WHEREriscritto, ordine dei join diverso. - Riesegui il profiler e conferma che il piano è cambiato.
