Trasování data v ADO.NET
ADO.NET funkce integrovaného trasování dat podporované poskytovateli dat .NET pro SQL Server, Oracle, OLE DB a ODBC a také ADO.NET DataSeta síťové protokoly SQL Serveru.
Trasování volání rozhraní API pro přístup k datům vám může pomoct s diagnostikou následujících problémů:
Neshoda schématu mezi klientským programem a databází
Problémy s nedostupností databáze nebo síťovými knihovnami
Nesprávný kód SQL bez ohledu na to, jestli je pevně zakódovaný nebo vygenerovaný aplikací.
Nesprávná programovací logika
Problémy vyplývající z interakce mezi několika komponentami ADO.NET nebo mezi ADO.NET a vlastními komponentami
Aby bylo možné podporovat různé technologie trasování, trasování je rozšiřitelné, takže vývojář může sledovat problém na jakékoli úrovni zásobníku aplikací. I když trasování není ADO. Funkce pouze pro rozhraní NET, poskytovatelé Microsoftu využívají zobecněné rozhraní API pro trasování a instrumentaci.
Další informace o nastavení a konfiguraci spravovaného trasování v ADO.NET najdete v tématu Trasování přístupu k datům.
Přístup k diagnostickým informacím v protokolu rozšířených událostí
V rozhraní .NET Framework Zprostředkovatel dat pro SQL Server bylo aktualizováno trasování přístupu k datům (Trasování přístupu k datům), aby bylo snazší korelovat události klienta s diagnostickými informacemi, jako jsou selhání připojení, z vyrovnávací paměti okruhu připojení serveru a informací o výkonu aplikace v protokolu rozšířených událostí. Informace o čtení protokolu rozšířených událostí naleznete v tématu Zobrazení dat relace událostí.
V případě operací připojení ADO.NET odešle ID připojení klienta. Pokud se připojení nezdaří, můžete získat přístup k vyrovnávací paměti okruhu připojení (Připojení řešení potíží v SYSTÉMU SQL Server 2008 s vyrovnávací pamětí okruhu Připojení ivity) a najít ClientConnectionID
pole a získat diagnostické informace o selhání připojení. ID připojení klienta se protokolují do vyrovnávací paměti okruhu pouze v případě, že dojde k chybě. (Pokud se připojení nezdaří před odesláním paketu preloginu, ID připojení klienta se nevygeneruje.) ID připojení klienta je identifikátor GUID 16 bajtů. ID připojení klienta můžete také najít ve výstupu cíle rozšířených událostí, pokud client_connection_id
je akce přidána k událostem v relaci rozšířených událostí. Pokud potřebujete další pomoc s diagnostikou klientských ovladačů, můžete povolit trasování přístupu k datům a znovu spustit příkaz pro připojení a sledovat ClientConnectionID
pole v trasování přístupu k datům.
ID připojení klienta můžete získat programově pomocí SqlConnection.ClientConnectionID
vlastnosti.
Je ClientConnectionID
k dispozici pro SqlConnection objekt, který úspěšně naváže připojení. Pokud pokus o připojení selže, ClientConnectionID
může být k dispozici prostřednictvím .SqlException.ToString
ADO.NET také odešle ID aktivity specifické pro vlákno. ID aktivity se zaznamenává v relacích rozšířených událostí, pokud jsou relace spuštěny s povolenou možností TRACK_CAUSALITY. V případě problémů s výkonem aktivního připojení můžete id aktivity získat z trasování přístupu k datům klienta (ActivityID
pole) a pak vyhledat ID aktivity ve výstupu rozšířených událostí. ID aktivity v rozšířených událostech je identifikátor GUID 16 bajtů (ne stejný jako identifikátor GUID pro ID připojení klienta) připojený se čtyřbajtů pořadového čísla. Pořadové číslo představuje pořadí požadavku v rámci vlákna a označuje relativní pořadí dávkových příkazů a příkazů RPC pro vlákno. V ActivityID
současné době se volitelně odesílá pro dávkové příkazy SQL a požadavky RPC, pokud je zapnuté trasování přístupu k datům a 18. bit v konfiguračním slově trasování přístupu k datům je zapnuté.
Následuje ukázka, která pomocí jazyka Transact-SQL spustí relaci rozšířených událostí, která bude uložena v vyrovnávací paměti okruhu, a zaznamená ID aktivity odeslané z klienta v rpc a dávkových operacích.
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)