Traccia dati in ADO.NETData Tracing in ADO.NET

ADO.NET include funzionalità di analisi dei dati incorporate supportate dai provider di dati .NET per SQL Server, Oracle, OLE DB e ODBC, nonché il DataSetADO.NET e i protocolli di rete SQL Server.ADO.NET features built-in data tracing functionality that is supported by the .NET data providers for SQL Server, Oracle, OLE DB and ODBC, as well as the ADO.NET DataSet, and the SQL Server network protocols.

L'analisi delle chiamate API di accesso ai dati consente di diagnosticare i seguenti problemi:Tracing data access API calls can help diagnose the following problems:

  • Mancata corrispondenza di schema tra il programma client e il database.Schema mismatch between client program and the database.

  • Database non disponibile o problemi nella libreria di rete.Database unavailability or network library problems.

  • Sintassi SQL non corretta definita a livello di codice o generata da un'applicazione.Incorrect SQL whether hard coded or generated by an application.

  • Logica di programmazione non corretta.Incorrect programming logic.

  • Problemi risultanti dall'interazione tra più componenti ADO.NET o tra ADO.NET e i componenti dell'utente.Issues resulting from the interaction between multiple ADO.NET components or between ADO.NET and your own components.

Per supportare tecnologie di traccia diverse, questa funzionalità è estensibile, pertanto uno sviluppatore può tracciare un problema a qualsiasi livello dello stack dell'applicazione.To support different trace technologies, tracing is extensible, so a developer can trace a problem at any level of the application stack. Sebbene la funzionalità di analisi non sia esclusiva di ADO.NET, i provider Microsoft usano l'analisi generalizzata e le API della strumentazione.Although tracing is not an ADO.NET-only feature, Microsoft providers take advantage of generalized tracing and instrumentation APIs.

Per ulteriori informazioni sull'impostazione e sulla configurazione della traccia gestita in ADO.NET, vedere traccia dell'accesso ai dati.For more information about setting and configuring managed tracing in ADO.NET, see Tracing Data Access.

Accesso alle informazioni diagnostiche nel registro di eventi estesoAccessing Diagnostic Information in the Extended Events Log

Nella .NET Framework provider di dati per SQL Server, la traccia di accesso ai dati (traccia di accesso ai dati) è stata aggiornata per semplificare la correlazione degli eventi client con informazioni di diagnostica, ad esempio errori di connessione, dal buffer circolare della connettività del server e dalle informazioni sulle prestazioni dell'applicazione nel log degli eventi estesi.In the .NET Framework Data Provider for SQL Server, data access tracing (Data Access Tracing) has been updated to make it easier to correlate client events with diagnostic information, such as connection failures, from the server's connectivity ring buffer and application performance information in the extended events log. Per informazioni sulla lettura del log degli eventi estesi, vedere visualizzare i dati della sessione eventi.For information about reading the extended events log, see View Event Session Data.

Per le operazioni di connessione, ADO.NET invierà un ID della connessione client.For connection operations, ADO.NET will send a client connection ID. Se la connessione non riesce, è possibile accedere al buffer circolare della connettività (risoluzione dei problemi di connettività in SQL Server 2008 con il buffer circolare della connettività) e individuare il campo ClientConnectionID e ottenere informazioni di diagnostica sull'errore di connessione.If the connection fails, you can access the connectivity ring buffer (Connectivity troubleshooting in SQL Server 2008 with the Connectivity Ring Buffer) and find the ClientConnectionID field and get diagnostic information about the connection failure. Gli ID della connessione client vengono registrati nel buffer circolare solo se si verifica un errore.Client connection IDs are logged in the ring buffer only if an error occurs. Se una connessione non riesce prima di inviare il pacchetto di preaccesso, non verrà generato alcun ID connessione client. L'ID connessione client è un GUID a 16 byte.(If a connection fails before sending the prelogin packet, a client connection ID will not be generated.) The client connection ID is a 16-byte GUID. È anche possibile trovare l'ID di connessione client nell'output di destinazione di eventi estesi, se l'azione client_connection_id viene aggiunta agli eventi in una sessione di eventi estesi.You can also find the client connection ID in the extended events target output, if the client_connection_id action is added to events in an extended events session. È possibile abilitare l'analisi di accesso ai dati ed eseguire di nuovo il comando di connessione e osservare il campo ClientConnectionID nell'analisi di accesso ai dati, se si necessita di ulteriore assistenza per la diagnostica dei driver del client.You can enable data access tracing and rerun the connection command and observe the ClientConnectionID field in the data access trace, if you need further client driver diagnostic assistance.

È possibile ottenere l'ID di connessione cliente a livello di codice usando la proprietà SqlConnection.ClientConnectionID.You can get the client connection ID programmatically by using the SqlConnection.ClientConnectionID property.

ClientConnectionID è disponibile per un oggetto di SqlConnection che stabilisce correttamente una connessione.The ClientConnectionID is available for a SqlConnection object that successfully establishes a connection. Se un tentativo di connessione non riesce, ClientConnectionID può essere disponibile tramite SqlException.ToString.If a connection attempt fails, ClientConnectionID may be available via SqlException.ToString.

ADO.NET invia inoltre un ID di attività specifico del thread.ADO.NET also sends a thread-specific activity ID. L'ID attività viene acquisito nelle sessioni di eventi estesi se le sessioni vengono avviate con l'opzione TRACK_CAUSALITY abilitata.The activity ID is captured in the extended events sessions if the sessions are started with the TRACK_CAUSALITY option enabled. Per i problemi di prestazioni con una connessione attiva, è possibile ottenere un ID attività dell'analisi di accesso ai dati del client (campo diActivityID ) e quindi individuare gli ID attività nell'output di eventi estesi.For performance issues with an active connection, you can get the activity ID from the client's data access trace (ActivityID field) and then locate the activity ID in the extended events output. L'ID attività negli eventi estesi è un GUID a 16 byte (diverso dal GUID per l'ID di connessione client seguito da un numero in sequenza di quattro byte).The activity ID in extended events is a 16-byte GUID (not the same as the GUID for the client connection ID) appended with a four-byte sequence number. Il numero di sequenze rappresenta l'ordine di una richiesta all'interno di un thread e indica un ordinamento relativo del batch e delle istruzioni RPC per il thread.The sequence number represents the order of a request within a thread and indicates the relative ordering of batch and RPC statements for the thread. ActivityID viene attualmente inviato facoltativamente per le istruzioni batch SQL e le richieste RPC quando è abilitata l'analisi di accesso ai dati e il diciottesimo bit della parola di configurazione dell'analisi di accesso ai dati è ON.The ActivityID is currently optionally sent for SQL batch statements and RPC requests when data access tracing is enabled on and the 18th bit in the data access tracing configuration word is turned ON.

Di seguito è riportato un esempio che usa Transact-SQL per avviare una sessione di eventi estesi che verrà archiviata in un buffer circolare e registrerà l'ID attività inviato da un client sulle operazioni RPC e batch.The following is a sample that uses Transact-SQL to start an extended events session that will be stored in a ring buffer and will record the activity ID sent from a client on RPC and batch operations.

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 ancheSee also