Dataspårning i ADO.NET
ADO.NET funktioner för inbyggd dataspårning som stöds av .NET-dataprovidrar för SQL Server, Oracle, OLE DB och ODBC samt ADO.NET DataSetoch SQL Server-nätverksprotokollen.
Spårning av API-anrop för dataåtkomst kan hjälpa dig att diagnostisera följande problem:
Schemamatchningsfel mellan klientprogrammet och databasen.
Problem med databasens otillgänglighet eller nätverksbibliotek.
Felaktig SQL oavsett om hårdkodad eller genererad av ett program.
Felaktig programmeringslogik.
Problem som beror på interaktionen mellan flera ADO.NET komponenter eller mellan ADO.NET och dina egna komponenter.
För att stödja olika spårningstekniker är spårning utökningsbar, så att en utvecklare kan spåra ett problem på alla nivåer i programstacken. Även om spårning inte är en ADO. Endast NET-funktion drar Microsoft-leverantörer nytta av generaliserade spårnings- och instrumentations-API:er.
Mer information om hur du ställer in och konfigurerar hanterad spårning i ADO.NET finns i Spåra dataåtkomst.
Visa diagnostikinformation i loggen för utökade händelser
I .NET Framework-dataprovidern för SQL Server har spårning av dataåtkomst (dataåtkomstspårning) uppdaterats för att göra det enklare att korrelera klienthändelser med diagnostikinformation, till exempel anslutningsfel, från serverns anslutningsringsbuffert och programprestandainformation i loggen för utökade händelser. Information om hur du läser loggen för utökade händelser finns i Visa händelsesessionsdata.
För anslutningsåtgärder skickar ADO.NET ett klientanslutnings-ID. Om anslutningen misslyckas kan du komma åt anslutningsringsbufferten (Anslut ivitetsfelsökning i SQL Server 2008 med Anslut ivity Ring Buffer) och hitta ClientConnectionID
fältet och få diagnostikinformation om anslutningsfelet. Klientanslutnings-ID:n loggas endast i ringbufferten om ett fel uppstår. (Om en anslutning misslyckas innan preloginpaketet skickas genereras inte något klientanslutnings-ID.) Klientanslutnings-ID:t är ett GUID på 16 byte. Du kan också hitta klientanslutnings-ID:t i utdata för utökade händelser om client_connection_id
åtgärden läggs till i händelser i en utökad händelsesession. Du kan aktivera spårning av dataåtkomst och köra anslutningskommandot igen och observera ClientConnectionID
fältet i dataåtkomstspårningen om du behöver ytterligare diagnostikhjälp för klientdrivrutinen.
Du kan hämta klientanslutnings-ID:t programmatiskt med hjälp SqlConnection.ClientConnectionID
av egenskapen .
ClientConnectionID
Är tillgängligt för ett SqlConnection objekt som upprättar en anslutning. Om ett anslutningsförsök misslyckas ClientConnectionID
kan det vara tillgängligt via SqlException.ToString
.
ADO.NET skickar också ett trådspecifikt aktivitets-ID. Aktivitets-ID:t registreras i de utökade händelsesessionerna om sessionerna startas med alternativet TRACK_CAUSALITY aktiverat. För prestandaproblem med en aktiv anslutning kan du hämta aktivitets-ID:t från klientens dataåtkomstspårning (ActivityID
fält) och sedan leta upp aktivitets-ID:t i utdata för utökade händelser. Aktivitets-ID:t i utökade händelser är ett GUID på 16 byte (inte samma som GUID för klientanslutnings-ID:t) som läggs till med ett sekvensnummer på fyra byte. Sekvensnumret representerar ordningen på en begäran i en tråd och anger den relativa ordningen för batch- och RPC-instruktioner för tråden. ActivityID
Skickas för närvarande valfritt för SQL-batchinstruktioner och RPC-begäranden när spårning av dataåtkomst är aktiverat och den 18:e biten i konfigurationsordet för dataåtkomstspårning är aktiverat.
Följande är ett exempel som använder Transact-SQL för att starta en utökad händelsesession som lagras i en ringbuffert och registrerar aktivitets-ID:t som skickas från en klient i RPC- och batchåtgärder.
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)