Traccia dati in ADO.NET

Microsoft.Data.SqlClient espone la traccia dell'accesso ai dati tramite l'origine eventi Microsoft.Data.SqlClient.EventSource. Altri componenti ADO.NET, ad esempio i provider di .NET Framework per Oracle, OLE DB e ODBC, e DataSet, dispongono di proprie funzionalità di traccia.

La traccia delle chiamate API di accesso ai dati consente di diagnosticare i problemi seguenti:

  • Mancata corrispondenza dello schema tra il programma client e il database.

  • Problemi relativi alla mancata disponibilità del database o alla libreria di rete.

  • SQL non corretto, sia inserito manualmente che generato da un'applicazione.

  • Logica di programmazione errata.

  • Problemi derivanti dall'interazione tra più componenti ADO.NET o tra ADO.NET e i propri componenti.

Per supportare tecnologie di traccia diverse, la traccia è estendibile, in modo che uno sviluppatore possa tracciare un problema a qualsiasi livello dello stack di applicazioni. Anche se la traccia non è una funzionalità esclusiva di ADO.NET, i provider Microsoft sfruttano le API di traccia e strumentazione generali.

Per altre informazioni su come raccogliere le tracce di Microsoft.Data.SqlClient, vedere Abilitare la traccia EventSource in SqlClient.

Accesso alle informazioni diagnostiche nel registro degli eventi estesi

Usare gli ID di connessione di Microsoft.Data.SqlClient per correlare gli eventi client con informazioni di diagnostica del server, ad esempio errori di connessione, nel buffer circolare della connettività e nel log degli eventi estesi. Per informazioni su come leggere il log degli eventi estesi, vedere Visualizza i dati della sessione eventi.

Per le operazioni di connessione, Microsoft.Data.SqlClient invia un ID connessione client durante lo scambio preliminare. Se la connessione fallisce, cercare il ClientConnectionID campo nel buffer circolare della connettività per ottenere informazioni di diagnostica sull'errore di connessione. Gli ID di connessione client vengono registrati nel buffer circolare solo se si verifica un errore. Se una connessione non riesce prima dello scambio di prelogin, il server non riceverà l'ID. L'ID di connessione client è un GUID a 16 byte. È anche possibile trovare l'ID connessione client nell'output di destinazione degli eventi estesi se si aggiunge l'azione client_connection_id agli eventi in una sessione degli eventi estesi.

Per ottenere l'ID connessione client a livello di codice, usare ClientConnectionId.

L'ID connessione è disponibile per SqlConnection dopo che quest'ultimo ha stabilito correttamente una connessione. Se un tentativo di connessione non riesce, l'ID potrebbe essere disponibile tramite ClientConnectionId.

Microsoft. Data.SqlClient invia anche un ID attività specifico del thread per istruzioni batch e richieste RPC (Remote Procedure Call) quando l'origine evento è abilitata e il server supporta le intestazioni di traccia. Per acquisire l'ID attività in una sessione di eventi estesi, abilitare TRACK_CAUSALITY. Per problemi di prestazioni con una connessione attiva, individuare l'ID attività nella traccia client e quindi nell'output degli eventi estesi. L'ID attività contiene un GUID a 16 byte e un numero di sequenza a quattro byte. Il numero di sequenza indica l'ordine relativo delle richieste all'interno di un thread. La parola di configurazione della traccia di accesso ai dati legacy non configura l'origine eventi di Microsoft.Data.SqlClient.

Di seguito è riportato un esempio di utilizzo di Transact-SQL per avviare una sessione di eventi estesi che verrà archiviata in un buffer circolare e verrà registrato l'ID attività inviato da un client in operazioni RPC e batch.

create event session MySession on server
add event connectivity_ring_buffer_recorded,
add event sql_statement_starting (action (client_connection_id)),
add event sql_statement_completed (action (client_connection_id)),
add event rpc_starting (action (client_connection_id)),
add event rpc_completed (action (client_connection_id))
add target ring_buffer with (track_causality=on)

Vedere anche