Come misurare accuratamente il tempo di esecuzione delle query SQL

Per ottimizzare le prestazioni delle query SQL, è importante misurare accuratamente il tempo di esecuzione. Conoscendo il tempo di esecuzione di una query, è possibile identificare quali parti sono colli di bottiglia e adottare misure efficaci per migliorarle. Questo articolo spiega come misurare il tempo di esecuzione delle query SQL, dai metodi di base all’uso di strumenti specifici.

Indice

Ottenere e analizzare i piani di esecuzione

Per comprendere le prestazioni delle query SQL, è importante innanzitutto ottenere e analizzare il piano di esecuzione. Il piano di esecuzione mostra come viene eseguita una query e aiuta a identificare i colli di bottiglia. Di seguito sono riportati i metodi per ottenere i piani di esecuzione nei principali sistemi di database.

Ottenere i piani di esecuzione in MySQL

In MySQL, è possibile ottenere un piano di esecuzione utilizzando la parola chiave EXPLAIN. Ad esempio, è possibile utilizzarla come segue:

EXPLAIN SELECT * FROM users WHERE age > 30;

Questo visualizzerà informazioni dettagliate come quale indice la query sta utilizzando e come viene scansionata la tabella.

Ottenere i piani di esecuzione in PostgreSQL

In PostgreSQL, è possibile ottenere i piani di esecuzione utilizzando EXPLAIN o EXPLAIN ANALYZE.

EXPLAIN ANALYZE SELECT * FROM users WHERE age > 30;

EXPLAIN ANALYZE visualizza anche il tempo di esecuzione effettivo, consentendo un’analisi delle prestazioni più dettagliata.

Ottenere i piani di esecuzione in SQL Server

In SQL Server, è possibile ottenere i piani di esecuzione utilizzando SET STATISTICS PROFILE ON o SET STATISTICS XML ON.

SET STATISTICS PROFILE ON;
SELECT * FROM users WHERE age > 30;
SET STATISTICS PROFILE OFF;

Questo fornirà informazioni dettagliate sul piano di esecuzione quando la query viene eseguita.

Ottenere i piani di esecuzione in Oracle

In Oracle, è possibile ottenere un piano di esecuzione utilizzando EXPLAIN PLAN FOR.

EXPLAIN PLAN FOR SELECT * FROM users WHERE age > 30;
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);

Questo visualizzerà il piano di esecuzione della query in formato tabella.

Una volta ottenuto il piano di esecuzione, controllare il costo, il conteggio delle righe e gli indici utilizzati per ciascun passaggio per identificare i colli di bottiglia delle prestazioni.

Metodi per misurare il tempo di esecuzione delle query SQL

Esistono diversi metodi per misurare il tempo di esecuzione delle query SQL. Qui, introduciamo i metodi rappresentativi, dalla misurazione manuale agli strumenti automatizzati.

Misurazione manuale del tempo di esecuzione

Per misurare manualmente il tempo di esecuzione delle query SQL, utilizzare un client di database. Ad esempio, in MySQL, è possibile misurare il tempo di esecuzione come segue:

SELECT * FROM users WHERE age > 30;

Controllare il tempo di esecuzione visualizzato dal client dopo aver eseguito la query. I client comuni visualizzano il tempo di esecuzione insieme ai risultati della query.

Utilizzo delle funzioni di misurazione

Molti sistemi di database forniscono funzioni per misurare il tempo di esecuzione delle query. Ad esempio, in PostgreSQL, è possibile utilizzare l’estensione pg_stat_statements.

CREATE EXTENSION pg_stat_statements;
SELECT query, total_time FROM pg_stat_statements WHERE query LIKE '%SELECT * FROM users WHERE age > 30%';

Questo metodo consente di ottenere il tempo di esecuzione cumulativo di una query specifica.

Utilizzo dei comandi specifici del database

In MySQL, è possibile utilizzare il comando SHOW PROFILES per ottenere il tempo di esecuzione delle query recenti.

SET profiling = 1;
SELECT * FROM users WHERE age > 30;
SHOW PROFILES;

Eseguendo SHOW PROFILES verrà visualizzato un elenco dei tempi di esecuzione per ogni query.

Misurazione automatizzata utilizzando strumenti

Esistono molti strumenti disponibili per misurare automaticamente il tempo di esecuzione delle query SQL. Ad esempio, i seguenti strumenti:

  • MySQL Workbench: Visualizza il tempo di esecuzione con i risultati della query.
  • pgAdmin: Uno strumento di gestione per PostgreSQL che mostra tempi di esecuzione dettagliati delle query.
  • SQL Server Management Studio (SSMS): Visualizza statistiche dettagliate, incluso il tempo di esecuzione delle query.

Misurazione utilizzando script

È anche possibile misurare il tempo di esecuzione delle query utilizzando script. Ad esempio, è possibile misurare il tempo di esecuzione di una query MySQL utilizzando uno script Python.

import time
import MySQLdb

db = MySQLdb.connect("localhost", "user", "password", "database")
cursor = db.cursor()

start_time = time.time()
cursor.execute("SELECT * FROM users WHERE age > 30")
end_time = time.time()

print(f"Query execution time: {end_time - start_time} seconds")

Questo script misura il tempo prima e dopo l’esecuzione della query e visualizza la differenza come tempo di esecuzione.

Utilizzando questi metodi, è possibile misurare accuratamente il tempo di esecuzione delle query SQL e utilizzarlo per migliorare le prestazioni.

Punti per misurare il tempo di esecuzione per ciascun database

Quando si misura il tempo di esecuzione delle query SQL, è importante scegliere il metodo appropriato in base al sistema di database utilizzato. Qui spieghiamo le differenze e i punti per i metodi di misurazione per i principali sistemi di database (MySQL, PostgreSQL, SQL Server, Oracle).

MySQL

In MySQL, si misura il tempo di esecuzione utilizzando SHOW PROFILES o EXPLAIN. È anche possibile abilitare performance_schema per ottenere dati dettagliati sulle prestazioni.

SET profiling = 1;
SELECT * FROM users WHERE age > 30;
SHOW PROFILES;

Utilizzando il comando SHOW PROFILES, è possibile verificare il tempo di esecuzione di ciascuna query in un elenco.

PostgreSQL

In PostgreSQL, è possibile ottenere il tempo di esecuzione accurato insieme al piano di esecuzione utilizzando EXPLAIN ANALYZE. È anche possibile utilizzare l’estensione pg_stat_statements per un’analisi dettagliata delle prestazioni delle query.

EXPLAIN ANALYZE SELECT * FROM users WHERE age > 30;

EXPLAIN ANALYZE visualizza il tempo di esecuzione effettivo, che aiuta nell’analisi delle prestazioni delle query.

SQL Server

In SQL Server, si misura il tempo di esecuzione delle query utilizzando SET STATISTICS TIME ON. SQL Server Management Studio (SSMS) visualizza anche il tempo di esecuzione insieme ai risultati della query.

SET STATISTICS TIME ON;
SELECT * FROM users WHERE age > 30;
SET STATISTICS TIME OFF;

Questo comando visualizza il tempo di esecuzione nella scheda messaggi.

Oracle

Nei database Oracle, è possibile misurare il tempo di esecuzione delle query utilizzando la funzione DBMS_UTILITY.GET_TIME. È anche possibile ottenere piani di esecuzione e statistiche utilizzando la funzione AUTOTRACE.

SET AUTOTRACE ON;
SELECT * FROM users WHERE age > 30;
SET AUTOTRACE OFF;

Utilizzando AUTOTRACE, il piano di esecuzione e il tempo di esecuzione vengono visualizzati dopo aver eseguito la query.

Ogni sistema di database ha i propri metodi di misurazione specifici e punti da considerare. Comprendere questi metodi e utilizzarli in modo appropriato consente di misurare accuratamente il tempo di esecuzione delle query SQL e di ottimizzare le prestazioni.

Registrazione e confronto dei risultati dei tempi di esecuzione

Dopo aver misurato accuratamente il tempo di esecuzione delle query SQL, è importante registrare i risultati e confrontarli tra diverse query o diverse versioni della stessa query. Questo consente di valutare gli effetti dell’ottimizzazione e identificare ulteriori miglioramenti.

Metodi per registrare i risultati

Per registrare sistematicamente i risultati delle misurazioni dei tempi di esecuzione, è possibile utilizzare i seguenti metodi.

Utilizzo dei fogli di calcolo

Utilizzare un software di fogli di calcolo (ad esempio, Microsoft Excel, Google Sheets) per registrare il tempo di esecuzione di ciascuna query, la data, lo stato del database, ecc. Ad esempio, creare una tabella come la seguente:

QueryTempo di esecuzione (secondi)DataCommenti
SELECT * FROM users WHERE age > 302.52024-05-23Indice non utilizzato
SELECT * FROM users WHERE age > 301.22024-05-24Indice utilizzato

Registrazione nel database

Creare una tabella dedicata per registrare i tempi di esecuzione. Ad esempio, in MySQL, creare una tabella come segue:

CREATE TABLE query_performance (
    id INT AUTO_INCREMENT PRIMARY KEY,
    query_text TEXT,
    execution_time FLOAT,
    execution_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    comments TEXT
);

Inserire i risultati in questa tabella dopo aver eseguito la query.

INSERT INTO query_performance (query_text, execution_time, comments)
VALUES ('SELECT * FROM users WHERE age > 30', 2.5, 'Index not used');

Metodi per confrontare i risultati delle misurazioni

Quando si confrontano i risultati delle misurazioni, prestare attenzione ai seguenti punti.

Confronto tra versioni

Confrontare i tempi di esecuzione tra diverse versioni della stessa query. Ad esempio, confrontare i tempi di esecuzione prima e dopo l’aggiunta di un indice per confermare l’effetto del miglioramento delle prestazioni.

Confronto tra più query

Confrontare i tempi di esecuzione tra diverse query per identificare le query particolarmente lente o quelle con margini di miglioramento delle prestazioni.

Visualizzazione tramite grafici

Utilizzare un software di fogli di calcolo o strumenti di visualizzazione dei dati (ad esempio, Tableau, Power BI) per creare grafici dei cambiamenti nei tempi di esecuzione. Questo rende facile visualizzare le tendenze delle prestazioni a colpo d’occhio.

Utilizzo di strumenti di automazione

Per automatizzare la registrazione e il confronto dei tempi di esecuzione, utilizzare i seguenti strumenti.

Grafana

Uno strumento specializzato nella visualizzazione dei dati temporali, monitora in tempo reale le prestazioni del database e visualizza i cambiamenti nei tempi di esecuzione su un grafico.

Prometheus

Uno strumento per la raccolta e il monitoraggio delle metriche, raccoglie e registra periodicamente il tempo di esecuzione delle query SQL. Combinato con Grafana, può costruire un potente sistema di monitoraggio delle prestazioni.

Utilizzando questi metodi per registrare e confrontare accuratamente i tempi di esecuzione delle query SQL, è possibile valutare facilmente gli effetti dell’ottimizzazione delle prestazioni.

Metodi per migliorare il tempo di esecuzione per l’ottimizzazione delle query

Questa sezione introduce metodi specifici per ridurre il tempo di esecuzione delle query SQL e come misurare l’effetto di ciascun metodo. Qui spieghiamo i metodi di ottimizzazione comuni e come rimisurare il tempo di esecuzione dopo aver implementato ciascun metodo.

Aggiunta di indici

Aggiungere indici appropriati alle tabelle può ridurre significativamente il tempo di esecuzione delle query. In particolare, aggiungere indici alle colonne utilizzate nelle clausole WHERE o nelle condizioni JOIN è efficace.

CREATE INDEX idx_users_age ON users(age);

Dopo aver aggiunto l’indice, rieseguire la query e verificare il cambiamento nel tempo di esecuzione.

Rifattorizzazione delle query

Evitare subquery ridondanti e join inefficienti, e rifattorizzare le query per essere più efficienti. Ad esempio, sostituire le subquery ridondanti con JOIN.

-- Prima
SELECT * FROM users WHERE age IN (SELECT age FROM other_table);

-- Dopo
SELECT users.* FROM users JOIN other_table ON users.age = other_table.age;

Eseguire la query rifattorizzata e misurare il tempo di esecuzione.

Regolazione delle impostazioni del database

Regolare le impostazioni del database può migliorare le prestazioni delle query. Ad esempio, aumentare l’impostazione work_mem in PostgreSQL può ridurre il tempo di esecuzione delle query complesse.

SET work_mem = '64MB';

Dopo aver modificato le impostazioni, eseguire la query e verificare il tempo di esecuzione.

Utilizzo dell’elaborazione batch

Quando si elabora una grande quantità di dati, utilizzare l’elaborazione batch anziché elaborare tutti i dati contemporaneamente per migliorare le prestazioni. Ad esempio, elaborare i dati in batch di 1000 righe alla volta.

-- Pseudocodice per l'elaborazione batch
FOR each batch of 1000 rows
    PROCESS batch
END FOR

Misurare il tempo di esecuzione dopo l’elaborazione batch e valutare le prestazioni complessive.

Utilizzo della cache delle query

Alcuni sistemi di database hanno una funzione per memorizzare nella cache i risultati delle query. Abilitare la cache può ridurre il tempo necessario per rieseguire la stessa query. MySQL utilizza query_cache, ma è deprecato nelle versioni attuali, quindi è consigliato l’utilizzo della cache a livello di applicazione.

Utilizzo del partizionamento

Il partizionamento delle tabelle grandi può ridurre il tempo di esecuzione delle query limitando i dati mirati dalla query.

CREATE TABLE users_partitioned (
    id INT,
    age INT,
    name VARCHAR(100)
)
PARTITION BY RANGE (age) (
    PARTITION p0 VALUES LESS THAN (20),
    PARTITION p1 VALUES LESS THAN (40),
    PARTITION p2 VALUES LESS THAN (60),
    PARTITION p3 VALUES LESS THAN (80)
);

Dopo il partizionamento, eseguire la query e confrontare il tempo di esecuzione.

Misurare l’effetto dei miglioramenti del tempo di esecuzione

Dopo aver implementato ciascun metodo di ottimizzazione, rimisurare il tempo di esecuzione della query e confrontare i risultati prima e dopo l’ottimizzazione. Ad esempio, creare una tabella come la seguente per confermare visivamente gli effetti.

MetodoTempo di esecuzione prima dell’ottimizzazione (secondi)Tempo di esecuzione dopo l’ottimizzazione (secondi)Tasso di miglioramento (%)
Aggiunta di indici2.50.868%
Rifattorizzazione delle query1.51.033%
Regolazione delle impostazioni3.02.033%

Combinando questi metodi, è possibile ridurre efficacemente il tempo di esecuzione delle query SQL e ottimizzare le prestazioni del database.

Introduzione degli strumenti per misurare il tempo di esecuzione

Utilizzare strumenti specializzati per misurare il tempo di esecuzione delle query SQL è efficace. Ecco alcuni strumenti rappresentativi per misurare il tempo di esecuzione.

MySQL Workbench

MySQL Workbench è uno strumento integrato utilizzato per la gestione e lo sviluppo del database MySQL. Ha funzioni integrate per misurare il tempo di esecuzione delle query, visualizzando il tempo di esecuzione dopo l’esecuzione delle query.

Funzioni principali

  • Visualizza il tempo di esecuzione con i risultati della query
  • Visualizzazione del piano di esecuzione
  • Interfaccia comoda per lo sviluppo SQL

pgAdmin

pgAdmin è un potente strumento di gestione per PostgreSQL, con funzioni per misurare in dettaglio il tempo di esecuzione delle query. Utilizzando EXPLAIN ANALYZE, è possibile controllare il piano di esecuzione e il tempo di esecuzione.

Funzioni principali

  • Visualizza i risultati delle query
  • Analisi dettagliata dei piani di esecuzione
  • Creazione ed esecuzione di script

SQL Server Management Studio (SSMS)

SQL Server Management Studio è uno strumento di gestione per Microsoft SQL Server. Offre funzionalità ricche per misurare il tempo di esecuzione delle query.

Funzioni principali

  • Misura il tempo di esecuzione utilizzando il comando SET STATISTICS TIME ON
  • Visualizza e analizza i piani di esecuzione
  • Consulente per la messa a punto delle query

Oracle SQL Developer

Oracle SQL Developer è uno strumento di sviluppo per database Oracle con funzionalità per misurare il tempo di esecuzione delle query. Utilizzando AUTOTRACE e DBMS_XPLAN, è possibile controllare i piani di esecuzione e il tempo di esecuzione.

Funzioni principali

  • Visualizzazione del piano di esecuzione
  • Visualizzazione dettagliata del tempo di esecuzione delle query
  • Set ricco di funzionalità per sviluppatori

Datadog

Datadog è un servizio basato su cloud per il monitoraggio e l’analisi. Supporta anche il monitoraggio delle prestazioni del database, consentendo di tracciare i tempi di esecuzione delle query SQL in tempo reale.

Funzioni principali

  • Monitoraggio in tempo reale delle prestazioni delle query
  • Visualizzazione e avvisi per i dati di prestazione
  • Monitoraggio della salute complessiva del database

New Relic

New Relic è uno strumento di monitoraggio delle prestazioni per applicazioni e infrastrutture. Aiuta a monitorare i tempi di esecuzione delle query SQL e a identificare i colli di bottiglia delle prestazioni.

Funzioni principali

  • Monitoraggio delle prestazioni delle query del database
  • Visualizzazione dei dati di prestazione tramite dashboard
  • Funzionalità di rilevamento delle anomalie e avvisi

Utilizzando questi strumenti, è possibile misurare accuratamente i tempi di esecuzione delle query SQL e ottimizzare le prestazioni del database. Comprendere le caratteristiche di ciascuno strumento e selezionare quello che si adatta al proprio scopo è importante.

Conclusione

Misurare accuratamente il tempo di esecuzione delle query SQL e ottimizzare le prestazioni è un aspetto cruciale della gestione dei database. Abbiamo iniziato comprendendo come ottenere e analizzare i piani di esecuzione e i metodi di base per misurare il tempo di esecuzione delle query. Abbiamo anche appreso i punti per misurare ciascun database, come registrare e confrontare i risultati delle misurazioni e i metodi di ottimizzazione specifici per migliorare il tempo di esecuzione. Infine, abbiamo introdotto strumenti utili per misurare il tempo di esecuzione. Utilizzando efficacemente questa conoscenza e questi strumenti, è possibile migliorare significativamente le prestazioni delle query SQL.

Indice