Condividi tramite


Introduzione agli eventi estesi di SQL Server

Gli eventi estesi (Eventi estesi) di SQL Server sono un sistema di gestione degli eventi per sistemi server. L'infrastruttura degli eventi estesi supporta la correlazione di dati da SQL Server e in certe condizioni, la correlazione di dati dal sistema operativo e dalle applicazioni di database. Nel secondo caso, l'output degli eventi estesi deve essere diretto ad Analisi eventi per Windows (ETW) per correlare i dati dell'evento con i dati dell'evento dell'applicazione o del sistema operativo.

In tutte le applicazioni sono presenti punti di esecuzione utili sia all'interno che all'esterno di un'applicazione. All'interno di un'applicazione, l'elaborazione asincrona può essere accodata utilizzando le informazioni raccolte durante l'esecuzione iniziale di un'attività. All'esterno di un'applicazione, i punti di esecuzione forniscono utilità di monitoraggio con informazioni sulle caratteristiche relative al funzionamento e alle prestazioni dell'applicazione monitorata.

Gli eventi estesi supportano l'utilizzo di dati degli eventi all'esterno di un processo. Questi dati sono in genere utilizzati da:

  • strumenti di analisi, ad esempio Traccia SQL e il Monitor di sistema.

  • strumenti di log, ad esempio il registro eventi di Windows o il log degli errori di SQL Server.

  • utenti che amministrano un prodotto o sviluppano delle applicazioni su un prodotto.

Progettazione e funzionalità degli eventi estesi

Gli aspetti chiave di progettazione degli eventi estesi sono:

  • Il motore degli eventi estesi è agnostico in termini di eventi, il che consente al motore di associare qualsiasi evento a qualsiasi destinazione perché il motore non è vincolato al contenuto dell'evento. Per ulteriori informazioni sul motore degli eventi estesi, vedere Motore degli eventi estesi di SQL Server.

  • Gli eventi sono separati dai consumer di eventi chiamati destinazioni negli eventi estesi. Ciò significa che qualsiasi destinazione può ricevere qualsiasi evento. Inoltre, qualsiasi evento generato può essere utilizzato automaticamente dalla destinazione, che può scrivere nel log o fornire un contesto dell'evento supplementare. Per ulteriori informazioni, vedere Destinazioni degli eventi estesi di SQL Server.

  • Gli eventi sono distinti dall'azione da intraprendere quando viene generato un evento. Di conseguenza, qualsiasi azione può essere associata a qualsiasi evento.

  • I predicati possono filtrare dinamicamente la generazione dell'evento e ciò aumenta la flessibilità dell'infrastruttura degli eventi estesi. Per ulteriori informazioni, vedere Pacchetti degli eventi estesi di SQL Server.

Gli eventi estesi possono generare in modo sincrono dati degli eventi (e in modo asincrono elaborare tali dati) il che fornisce una soluzione flessibile per la gestione degli eventi. Inoltre, gli eventi estesi forniscono le funzionalità seguenti:

  • Approccio unificato alla gestione di eventi attraverso il sistema server, consentendo contemporaneamente agli utenti di isolare eventi specifici ai fini della risoluzione dei problemi.

  • Supporto e integrazione con gli strumenti ETW esistenti.

  • Meccanismo di gestione degli eventi interamente configurabile, basato su Transact-SQL.

  • Possibilità di controllare dinamicamente i processi attivi, con un impatto minimo su tali processi.

Utilizzo degli eventi estesi con ETW

Se si desidera utilizzare gli eventi estesi per correlare i dati dal sistema operativo e dalle applicazioni di database, è consigliabile acquisire familiarità con ETW. L'analisi ETW può essere utilizzata in abbinamento agli eventi estesi o come un consumer di eventi estesi. Gli argomenti seguenti rappresentano un punto iniziale per ottenere informazioni di base su ETW:

Scenari per l'utilizzo degli eventi estesi

È possibile utilizzare gli eventi estesi per un'ampia gamma di scenari di monitoraggio e risoluzione dei problemi. Gli scenari seguenti illustrano alcune situazioni dove gli eventi estesi possono fornire dati preziosi per la risoluzione di problemi in aree quali:

  • Risoluzione dei problemi che causano il taglio del working set.

  • Risoluzione dei problemi di utilizzo eccessivo della CPU.

  • Risoluzione dei problemi di deadlock.

  • Correlazione dell'attività di richiesta con i log ETW di Windows.

Risoluzione dei problemi che causano il taglio del working set

Si verificano dei problemi di prestazioni gravi con il server di produzione, ciò provoca il timeout delle applicazioni client. Questi problemi sembrano essere temporanei e le prestazione ritornano normali dopo 10-15 minuti.

Si esamina il log degli errori di SQL Server e si trovano i seguenti messaggi di errore:

"È stato eseguito il page out di una parte significativa della memoria del processo del server. Potrebbe verificarsi un calo di prestazioni. Durata 300 secondi. Utilizzo memoria corrente 34%."

"Listener IOCP improduttivo"

[!NOTA]

IOCP è l'acronimo di "IO Completion port." È la porta di cui si servono le richieste utente di tutta rete. Il messaggio indica che nell'ultimo minuto la porta di completamento è rimasta bloccata.

Si sospetta che SQL Server non sta rispondendo abbastanza rapidamente alle richieste di memoria sul server. Quando si verifica la memoria con Task Manager, la memoria disponibile sembra essere sempre più che sufficiente sul server. Si tenta di effettuare la connessione al database da SQL Server Management Studio, ma si verifica il timeout del tentativo di connessione. Si è in grado di connettersi al server eseguendo il comando SQLCMD - A dal prompt dei comandi di Windows. Ciò apre una sessione sulla connessione amministratore dedicata.

Si decide di utilizzare gli eventi estesi per ottenere più informazioni. Si crea una sessione degli eventi estesi che:

  • Aggiunge eventi per il segnale della memoria di sistema e la modifica della memoria del server totale.

  • Indirizza l'output verso ETW. Questo output sarà scritto su un file creato su un'unità che non è utilizzata dal file di paging o dai file del database di SQL Server.

Al prompt dei comandi di Windows si esegue un'istruzione per abilitare un'analisi ETW del kernel di Windows con tutti gli eventi della memoria. Si consente che entrambe le tracce siano in esecuzione per vari minuti e quindi si chiude la sessione degli eventi estesi e l'analisi del kernel di Windows.

Si utilizza tracerpt.exe per correlare l'analisi di Windows con l'analisi ETW di SQL Server. Si cerca un evento che indica che la notifica della memoria di sistema è stata impostata, ma non lo si trova. Invece si trova un elevato numero di errori di pagina provenienti da tutti i processi sul server. Si esaminano gli eventi poco prima del paging e si scopre che i working set di tutti i processi sono tagliati in risposta a una richiesta di allocazione della memoria proveniente da un driver.

Risoluzione dei problemi di utilizzo eccessivo della CPU

Si sta investigando su un utilizzo eccessivo della CPU sul sistema di produzione. Si utilizzano le varie Viste a gestione dinamica (DMV) per determinare se l'utilizzo della CPU può essere attribuito a query eseguite sul sistema. Questo esame indica che la maggior parte delle query sono query ad hoc dell'utente. Le informazioni ottenute dalle DMV non sono sufficienti per diagnosticare il problema.

Si crea una sessione degli eventi estesi che:

  • Abilita degli eventi per il completamento delle istruzioni con predicati che specificano la soglia della CPU.

  • Ha un'azione per raccogliere solo il piano di query quando viene generato un evento.

  • Scrive su un file tutti i dati raccolti. Questo file è su un'unità che non contiene alcun log o file di database.

Dopo avere avviato la sessione degli eventi estesi si esamina l'output e si è in grado di determinare che la causa del problema della CPU è una conversione del tipo di dati tra due tabelle normalmente unite in join.

Risoluzione dei problemi di deadlock

Sono state ricevute delle segnalazioni da parte degli utenti che indicano che alcune applicazioni stanno restituendo errori di deadlock. Per risolvere efficacemente tali problemi si decide di concentrarsi sui deadlock più frequenti. Si crea una sessione degli eventi estesi che:

  • Configura il monitoraggio degli eventi di deadlock per la sessione.

  • Specifica una destinazione di aggregazione in base a un identificatore per il deadlock.

Si esegue la sessione degli eventi estesi e, dopo che sono stati segnalati dei deadlock supplementari, si è in grado di ottenere informazioni aggregate sui deadlock, insieme al grafico di deadlock XML completo per ciascuna origine. Queste informazioni consentono di determinare i deadlock più comuni e di cominciare a lavorare a una soluzione.

Correlazione dell'attività di richiesta con i log di eventi di Windows ETW

Si sta risolvendo un problema di rallentamento dell'applicazione sul server di produzione e si è in grado di restringere le cause ai tempi lunghi di lettura dal disco. Si crea una sessione degli eventi estesi che:

  • Aggiunge delle letture dal disco come evento della sessione.

  • Invia i dati raccolti a ETW.

Dopo avere avviato la sessione degli eventi estesi, si esegue un'analisi ETW del kernel di Windows. Dopo 10 minuti si arrestano entrambe le sessioni.

Si utilizza tracerpt.exe per unire l'analisi Windows con l'analisi ETW. Dall'unione di queste analisi si è in grado di correlare e monitorare le richieste di lettura da SQL Server al kernel di Windows. Questa analisi indica un ritardo prolungato prima che la richiesta I/O sia restituita a SQL Server. Queste informazioni consentono di concludere che il problema di I/O si situa a livello del percorso di I/O fisico.