Share via


Gegevenstracering in ADO.NET

ADO.NET beschikt over ingebouwde functionaliteit voor gegevenstracering die wordt ondersteund door de .NET-gegevensproviders voor SQL Server, Oracle, OLE DB en ODBC, evenals de ADO.NET DataSeten de SQL Server-netwerkprotocollen.

Api-aanroepen voor gegevenstoegang traceren kunnen helpen bij het vaststellen van de volgende problemen:

  • Schema komt niet overeen tussen het clientprogramma en de database.

  • Problemen met databasebeschikbaarheid of netwerkbibliotheek.

  • Onjuiste SQL, ongeacht of deze in code is vastgelegd of gegenereerd door een toepassing.

  • Onjuiste programmeerlogica.

  • Problemen die het gevolg zijn van de interactie tussen meerdere ADO.NET onderdelen of tussen ADO.NET en uw eigen onderdelen.

Voor de ondersteuning van verschillende traceringstechnologieën is tracering uitbreidbaar, zodat een ontwikkelaar een probleem kan traceren op elk niveau van de toepassingsstack. Hoewel tracering geen ADO is. Alleen net-functie, Microsoft-providers profiteren van gegeneraliseerde tracerings- en instrumentatie-API's.

Zie Traceringsgegevenstoegang voor meer informatie over het instellen en configureren van beheerde tracering in ADO.NET.

Toegang tot diagnostische gegevens in het uitgebreide gebeurtenissenlogboek

In de .NET Framework-gegevensprovider voor SQL Server is gegevenstoegangstracering (Data Access Tracing) bijgewerkt om het gemakkelijker te maken clientgebeurtenissen te correleren met diagnostische gegevens, zoals verbindingsfouten, van de buffer voor de connectiviteitsring van de server en de prestatiegegevens van de toepassing in het uitgebreide gebeurtenissenlogboek. Zie Gebeurtenissessiegegevens weergeven voor meer informatie over het lezen van het uitgebreide gebeurtenissenlogboek.

Voor verbindingsbewerkingen verzendt ADO.NET een clientverbindings-id. Als de verbinding mislukt, hebt u toegang tot de connectiviteitsringsbuffer (Verbinding maken iviteitsproblemen in SQL Server 2008 met de Verbinding maken ivity ringbuffer) en zoekt u het ClientConnectionID veld en haalt u diagnostische informatie over de verbindingsfout op. Clientverbindings-id's worden alleen in de ringbuffer geregistreerd als er een fout optreedt. (Als een verbinding mislukt voordat het prelogin-pakket wordt verzonden, wordt er geen clientverbindings-id gegenereerd.) De clientverbindings-id is een GUID van 16 bytes. U kunt ook de clientverbindings-id vinden in de uitvoer van de uitgebreide gebeurtenissendoel, als de client_connection_id actie wordt toegevoegd aan gebeurtenissen in een uitgebreide gebeurtenissessie. U kunt tracering van gegevenstoegang inschakelen en de verbindingsopdracht opnieuw uitvoeren en het ClientConnectionID veld in de gegevenstoegangstracering observeren als u meer diagnostische hulp van clientstuurprogramma's nodig hebt.

U kunt de clientverbindings-id programmatisch ophalen met behulp van de SqlConnection.ClientConnectionID eigenschap.

Het ClientConnectionID object is beschikbaar voor een SqlConnection object waarmee een verbinding tot stand is gebracht. Als een verbindingspoging mislukt, ClientConnectionID is deze mogelijk beschikbaar via SqlException.ToString.

ADO.NET verzendt ook een threadspecifieke activiteits-id. De activiteits-id wordt vastgelegd in de uitgebreide gebeurtenissessies als de sessies worden gestart met de optie TRACK_CAUSALITY is ingeschakeld. Voor prestatieproblemen met een actieve verbinding kunt u de activiteits-id ophalen uit het gegevenstoegangstracering (ActivityID veld) van de client en vervolgens de activiteits-id zoeken in de uitvoer van uitgebreide gebeurtenissen. De activiteits-id in uitgebreide gebeurtenissen is een GUID van 16 bytes (niet hetzelfde als de GUID voor de clientverbindings-id) die is toegevoegd aan een reeksnummer van vier byte. Het volgnummer vertegenwoordigt de volgorde van een aanvraag binnen een thread en geeft de relatieve volgorde van batch- en RPC-instructies voor de thread aan. Het ActivityID is momenteel optioneel verzonden voor SQL-batchinstructies en RPC-aanvragen wanneer tracering van gegevenstoegang is ingeschakeld en de 18e bits in het configuratiewoord voor tracering van gegevenstoegang is ingeschakeld.

Hier volgt een voorbeeld waarin Transact-SQL wordt gebruikt om een uitgebreide gebeurtenissessie te starten die wordt opgeslagen in een ringbuffer en de activiteits-id registreert die is verzonden vanaf een client op RPC en batchbewerkingen.

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)

Zie ook