共用方式為


ADO.NET 中的數據追蹤

ADO.NET 具備內建的數據追蹤功能,該功能受到 .NET 數據提供者(適用於 SQL Server、Oracle、OLE DB 和 ODBC)、ADO.NET DataSet 以及 SQL Server 網路協定的支援。

追蹤資料存取 API 呼叫有助於診斷下列問題:

  • 用戶端程式與資料庫之間的架構不符。

  • 資料庫無法使用或網路連結庫問題。

  • 無論是硬式編碼還是由應用程式產生,SQL 都不正確。

  • 程序設計邏輯不正確。

  • 多個 ADO.NET 元件或 ADO.NET 與您自己的元件之間的互動所造成的問題。

為了支援不同的追蹤技術,追蹤是可延伸的,因此開發人員可以在應用程式堆疊的任何層級追蹤問題。 雖然追蹤並非 ADO.NET 的專屬功能,Microsoft 提供者會利用一般化的追蹤和工具 API。

如需在 ADO.NET 中設定受控追蹤的詳細資訊,請參閱 追蹤數據存取

存取擴展事件記錄檔中的診斷資訊

在 .NET Framework Data Provider for SQL Server 中,數據存取追蹤(數據存取追蹤)已更新,可讓您更輕鬆地將用戶端事件與診斷資訊相互關聯,例如連線失敗,從伺服器的連線通道緩衝區,以及擴充事件記錄檔中的應用程式效能資訊。 如需讀取擴充事件記錄檔的資訊,請參閱檢視事件工作階段資料

針對連線作業,ADO.NET 會傳送用戶端連線標識碼。 如果連線失敗,您可以存取連線通道緩衝區(SQL Server 2008 中的連線疑難解答與連線通道緩衝區),並尋找 ClientConnectionID 欄位並取得連線失敗的診斷資訊。 僅在發生錯誤時,才會在信號緩衝區中記錄用戶端連接識別碼。 (如果在傳送登入前封包之前連接失敗,則不會產生用戶端連接識別碼。)用戶端連接識別碼是 16 位元組的 GUID。 如果 client_connection_id 動作新增至擴充事件會話中的事件,您也可以在擴充事件目標輸出中找到用戶端連線標識碼。 如果您需要進一步的用戶端驅動程式診斷協助,您可以啟用資料存取追蹤並重新執行連線命令,並觀察 ClientConnectionID 數據存取追蹤中的欄位。

您可以使用SqlConnection.ClientConnectionID屬性,程式化地取得用戶端連線識別碼。

ClientConnectionID可用於SqlConnection成功建立連接的物件。 如果連線嘗試失敗, ClientConnectionID 可能可透過 SqlException.ToString取得。

ADO.NET 也會傳送線程特定的活動標識碼。 如果會話是以啟用TRACK_CAUSALITY選項啟動,則會在擴充事件會話中擷取活動標識符。 針對作用中連線的效能問題,您可以從客戶端的數據存取追蹤 (ActivityID 字段) 取得活動識別碼,然後在擴充事件輸出中找出活動識別符。 擴充事件中的活動識別碼是由16位元組的 GUID(與用戶端連線識別碼的 GUID 不同)和一個四位元組的序號碼組成。 此序號表示執行緒內要求的順序,並指出執行緒的批次和 RPC 陳述式的相對排序。 目前,當開啟資料存取追蹤並且資料存取追蹤配置字中的第18位為開啟狀態時,ActivityID會被選擇性地用於傳送 SQL 批次語句和 RPC 要求。

以下是使用 Transact-SQL 啟動擴充事件工作階段的範例,該工作階段會儲存在信號緩衝區中,並且會記錄從 RPC 和批次作業上之用戶端傳送的活動識別碼。

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)

另請參閱