Adatkövetés az ADO.NET-ben

ADO.NET beépített adatkövetési funkciókkal rendelkezik, amelyeket az SQL Server, az Oracle, az OLE DB és az ODBC .NET-adatszolgáltatók, valamint a ADO.NET DataSetés az SQL Server hálózati protokollok támogatnak.

Az adatelérési API-hívások nyomon követése segíthet a következő problémák diagnosztizálásában:

  • Sémaeltérés az ügyfélprogram és az adatbázis között.

  • Az adatbázis elérhetetlensége vagy a hálózati kódtár problémái.

  • Helytelen SQL, akár keményen kódolt, akár egy alkalmazás által generált.

  • Helytelen programozási logika.

  • Több ADO.NET összetevő közötti interakcióból vagy a ADO.NET és a saját összetevők közötti interakcióból eredő problémák.

A különböző nyomkövetési technológiák támogatásához a nyomkövetés bővíthető, így a fejlesztők az alkalmazásverem bármely szintjén nyomon követhetik a problémát. Bár a nyomkövetés nem kizárólag az ADO.NET funkciója, a Microsoft szolgáltatói kihasználják az általános nyomkövetési és felügyeleti API-kat.

A felügyelt nyomkövetés ADO.NET történő beállításáról és konfigurálásáról további információt az Adathozzáférés nyomon követése című témakörben talál.

Diagnosztikai adatok elérése a kiterjesztett eseménynaplóban

Az SQL Serverhez készült .NET-keretrendszer adatszolgáltatójában az adathozzáférés-nyomkövetés (Data Access Tracing) frissült, hogy egyszerűbb legyen összekapcsolni az ügyféleseményeket a kiszolgáló kapcsolati gyűrűjének pufferéből és az alkalmazás teljesítményadataiból származó diagnosztikai információkkal, például a kapcsolati hibákkal. A kiterjesztett eseménynapló olvasásáról további információt az Esemény munkamenet adatainak megtekintésecímű témakörben talál.

Kapcsolati műveletek esetén ADO.NET küld egy ügyfélkapcsolat-azonosítót. Ha a kapcsolat meghiúsul, hozzáférhet a kapcsolati gyűrű pufferéhez (az SQL Server 2008 kapcsolati hibaelhárítása a kapcsolati gyűrű pufferével), és megkeresheti a ClientConnectionID mezőt, és diagnosztikai információkat kaphat a kapcsolati hibáról. Az ügyfélkapcsolati azonosítók csak hiba esetén lesznek naplózva a gyűrűpufferben. (Ha egy kapcsolat az előbeírási csomag elküldése előtt meghiúsul, a rendszer nem hoz létre ügyfélkapcsolat-azonosítót.) Az ügyfélkapcsolat azonosítója egy 16 bájtos GUID. Az ügyfélkapcsolat azonosítóját a kiterjesztett események célkimenetében is megtalálhatja, ha a client_connection_id művelet hozzáadva van az eseményekhez egy kiterjesztett esemény munkamenetben. Engedélyezheti az adathozzáférés nyomon követését, és újrafuttathatja a kapcsolati parancsot, és megfigyelheti az ClientConnectionID adatelérési nyomkövetés mezőjét, ha további ügyfél-illesztőprogram diagnosztikai segítségre van szüksége.

Az ügyfélkapcsolat azonosítóját programozott módon is lekérheti a SqlConnection.ClientConnectionID tulajdonság használatával.

A ClientConnectionID egy SqlConnection objektumhoz érhető el, amely sikeresen létrehozott egy kapcsolatot. Ha egy kapcsolódási kísérlet meghiúsul, ClientConnectionID elérhető lehet SqlException.ToString keresztül.

ADO.NET egy szálspecifikus tevékenységazonosítót is küld. A tevékenységazonosító akkor lesz rögzítve a kiterjesztett esemény-munkamenetekben, ha a munkamenetek az TRACK_CAUSALITY beállítás engedélyezésével kezdődnek. Az aktív kapcsolat teljesítményproblémái esetén lekérheti a tevékenységazonosítót az ügyfél adathozzáférési nyomkövetéséből (ActivityID mezőjéből), majd megkeresheti a tevékenységazonosítót a kiterjesztett események kimenetében. A kiterjesztett események tevékenységazonosítója egy 16 bájtos GUID (nem ugyanaz, mint az ügyfélkapcsolat-azonosító GUID azonosítója) négy bájtos sorszámmal kiegészítve. A sorszám egy szálon belüli kérés sorrendjét jelöli, és a szál köteg- és RPC-utasításainak relatív sorrendjét jelzi. A ActivityID rendszer jelenleg opcionálisan küldi el az SQL batch-utasításokhoz és RPC-kérelmekhez, ha engedélyezve van az adathozzáférés-nyomkövetés, és az adathozzáférés-nyomkövetés konfigurációs szójának 18. bitje be van kapcsolva.

Az alábbi példa bemutatja, hogyan lehet egy Transact-SQL parancs segítségével elindítani egy kiterjesztett eseménymunkamenetet, amelyet egy gyűrűpufferben tárolnak, és amely rögzíti az ügyféltől RPC-n és kötegműveleteken keresztül érkező tevékenységazonosítót.

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)

Lásd még