L’importanza del monitoraggio in SQL Server
Monitorare le attività di un database server è fondamentale per garantire affidabilità e prestazioni ottimali. Abbiamo già parlato di alcuni degli strumenti esterni a disposizione del DBA, ma anche SQL Server offre diverse opzioni integrate per il monitoring, tra cui gli Extended Events.
Cosa sono gli Eventi Estesi
Gli Extended Events sono un sistema di monitoraggio delle prestazioni introdotto a partire da SQL Server 2008, che consente di catturare eventi a livello di sistema, di singolo database e di sessione, con lo scopo di eseguire debug, profiling e troubleshooting delle prestazioni. Gli Eventi Estesi possono inoltre essere utilizzati per raccogliere dati su qualsiasi attività dei database, dai tempi di esecuzione delle query alle operazioni di I/O del disco.
I vantaggi degli Extended Events rispetto a SQL Trace, precedentemente disponibile in SQL Server, sono diversi: offrono una maggiore flessibilità nella configurazione e nel filtraggio degli eventi, consumano meno risorse di sistema, supportano l'analisi dei dati in tempo reale e offrono la possibilità di estendere le funzionalità attraverso i pacchetti di terze parti.
Per utilizzare gli Extended Events, è possibile sfruttare lo strumento di gestione SQL Server Management Studio (SSMS) o gli script T-SQL. Un DBA potrà definire i propri eventi personalizzati, specificare i dati da raccogliere, applicare i filtri e associare gli eventi ad azioni specifiche, come ad esempio l'invio di una notifica o l'avvio di un job.
Inoltre, gli Extended Events offrono diverse opzioni per la visualizzazione dei dati, come grafici a barre, diagrammi a torta e rappresentazioni tabulari.
Extended Events: un esempio pratico
In questo esempio, stiamo creando una sessione di Extended Events denominata XE_MySession sull'istanza di SQL Server.
Aggiungiamo due eventi alla sessione: sqlserver.rpc_completed e sqlserver.sql_statement_completed.
Aggiungiamo anche diverse azioni per catturare dati aggiuntivi per ogni evento, come il nome del database, il nome utente, il nome host del client e il nome dell'applicazione client.
Aggiungiamo quindi i filtri per catturare solo gli eventi che soddisfano determinati criteri, come gli eventi che si verificano nel database MyDatabase e gli eventi che vengono eseguiti dall'account utente MyUser.
Infine, specificando un target per la sessione, scriviamo gli eventi catturati in un file di evento su disco.
CREATE EVENT SESSION [XE_MySession] ON SERVER ADD EVENT sqlserver.rpc_completed ( ACTION(sqlserver.database_name, sqlserver.username, sqlserver.client_hostname, sqlserver.client_app_name) WHERE ( sqlserver.database_name = N'MyDatabase' AND sqlserver.username = N'MyUser' ) ) ,ADD EVENT sqlserver.sql_statement_completed ( ACTION(sqlserver.database_name, sqlserver.username, sqlserver.client_hostname, sqlserver.client_app_name) WHERE ( sqlserver.database_name = N'MyDatabase' AND sqlserver.username = N'MyUser' AND duration > 5000 ) ) ADD TARGET package0.event_file (SET filename = N'C:\XE_MySession.xel');
Come scegliere lo strumento di monitoraggio più adatto
- Redgate SQL Monitor
- Paessler PRTG
- Solarwinds DPA (Database Performance Analyzer)
Fonti: