Extended Events: uno strumento di monitoring integrato in SQL Server

Datamaze
03.10.23 11:34 AM Comment(s)

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

Come abbiamo visto, utilizzare gli Eventi Estesi richiede una conoscenza piuttosto approfondita di SQL Server e delle logiche che lo governano.  Va sottolineato che la gamma di eventi e raccolta dati è veramente elevata e può rappresentare un ostacolo per chi non si occupa quotidianamente di amministrazione di database.

La raccolta dati attiva e il monitoraggio, come già detto, è un argomento complesso e spesso la mole dei dati raccolta distoglie l’attenzione dai potenziali problemi reali. Ci vengono in soccorso strumenti esterni di terze parti: queste soluzioni svolgono tipicamente un servizio di monitoraggio attivo sulle prestazioni e sulla disponibilità dei servizi. I più avanzati tra questi strumenti comprendono inoltre una raccolta dati per analisi delle prestazioni e individuazione dei colli di bottiglia in ambito prestazioni. In questo modo permettono l’accentramento e monitoraggio di tutte le istanze in un unico portale, aiutando il DBA nella gestione quotidiana dell’infrastruttura database.

Alcune di queste soluzioni:
  • Redgate SQL Monitor
  • Paessler PRTG
  • Solarwinds DPA (Database Performance Analyzer)

Fonti:

Extended Events overview


di Alice Sella, pubblicato il 3 ottobre 2023