Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL:ottieni il costo dell'ultima query utilizzando SHOW STATUS COME "Last_Query_Cost"

Durante il recente webcast che ho fatto per Idera, ho avuto il piacere di mostrare molti nuovi trucchi e suggerimenti. Uno dei suggerimenti più apprezzati è stato su come ottenere Last Query Cost in MySQL usando il comando SHOW STATUS LIKE 'Last_Query_Cost'. Scopriamolo oggi.

Se si utilizza SQL Server, è molto facile ottenere il costo della query utilizzando un piano di esecuzione grafico, un piano di esecuzione XL o utilizzando DMV della cache dei piani. Tuttavia, se si utilizza MySQL, è molto difficile calcolare il costo dell'ultima query. Ho visto spesso durante il mio controllo completo dello stato delle prestazioni del database che i DBA vogliono ottimizzare le loro query MySQL ma non hanno idea di come misurare le prestazioni delle loro query.

Se stai usando MySQL o MariaDB, puoi sempre misurare le prestazioni della tua query in termini di costo eseguendo il comando seguente.

Mostra stato

SHOW STATUS LIKE 'Last_Query_Cost';

Ecco la documentazione ufficiale per il comando. Il costo totale dell'ultima query compilata calcolata da Query Optimizer. Ciò è utile per confrontare il costo di diversi piani di query per la stessa query. Il valore predefinito di 0 significa che non è stata ancora compilata alcuna query. Il valore predefinito è 0. Last_query_cost ha l'ambito della sessione.

Vediamo un semplice esempio di come funziona con l'aiuto del database di esempio Sakila per MySQL .

USE sakila;
SELECT *
FROM film f
INNER JOIN film_actor fa ON f.film_id = fa.film_id
INNER JOIN film_category fc ON fc.film_id = fa.film_id
WHERE f.film_id = 10;
SHOW STATUS LIKE 'Last_Query_Cost';

Ecco il risultato che ottieni quando esegui la query precedente:

Con l'aiuto dello stato, possiamo sapere qual è stato il costo coinvolto nell'esecuzione della query. Se avete altri suggerimenti fatemi sapere. Inoltre, se desideri monitorare in tempo reale l'azione correttiva e la risoluzione dei problemi, dovresti prendere in considerazione SQL Diagnostic Manager per MySQL e MariaDB .