Sdílet prostřednictvím


Trasování dat v ADO.NET

ADO.NET obsahuje integrovanou funkci trasování dat, která je podporována poskytovateli dat .NET pro SQL Server, Oracle, OLE DB a ODBC, stejně jako ADO.NET DataSet a síťovými 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í funkcí určenou pouze pro ADO.NET, poskytovatelé společnosti Microsoft využívají obecné 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í

Ve zprostředkovateli dat rozhraní .NET Framework 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 připojení selže, můžete získat přístup k vyrovnávací paměti okruhu připojení (Řešení problémů s připojením v SQL Serveru 2008 pomocí vyrovnávací paměti okruhu připojení) a najít pole ClientConnectionID, kde získáte diagnostické informace o selhání připojení. ID připojení klienta se protokolují do kruhové vyrovnávací paměti 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 v cílovém výstupu rozšířených událostí, je-li akce client_connection_id přidána do událostí relace 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 16bajtový GUID (ne stejný jako GUID pro ID připojení klienta) připojený ke čtyřbajtovému pořadovému číslu. 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. Aktuálně se ActivityID volitelně odesílá pro dávkové příkazy SQL a požadavky RPC, když 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á používá Transact-SQL ke spuštění relace rozšířených událostí, která se uloží do vyrovnávací paměti okruhu, a zaznamená ID aktivity odeslané z klienta v operacích RPC a 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)

Viz také