Share via


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

下載 JDBC 驅動程式

Microsoft JDBC Driver 4.0 for SQL Server 中,追蹤 (追蹤驅動程式作業) 功能可讓使用者更輕鬆地將用戶端事件與診斷資訊相互關聯。 您可以追蹤諸如伺服器連線通道緩衝區的連線失敗,以及延伸模組事件記錄檔中的應用程式效能等問題。 如需讀取擴充事件記錄檔的資訊,請參閱擴充事件

詳細資料

針對連線作業,Microsoft JDBC Driver for SQL Server 將會傳送用戶端連線識別碼。 如果連線失敗,您可以存取連線通道緩衝區並尋找 [ClientConnectionID] 欄位,以取得關於失敗的診斷資訊。 如需通道緩衝區的詳細資訊,請參閱 SQL Server 2008 與連線通道緩衝區的連線疑難排解。 僅在發生錯誤時,才會在信號緩衝區中記錄用戶端連接識別碼。 如果在傳送登入前封包之前連線失敗,則不會產生用戶端連線識別碼。

用戶端連接識別碼是 16 位元組的 GUID。 如果在延伸事件工作階段中將 client_connection_id 動作新增至事件,則用戶端連線識別碼將包含在延伸事件目標輸出中。 如需更多用戶端驅動程式診斷,可以啟用追蹤並重新執行連線命令,以在追蹤中查看 [ClientConnectionID] 欄位。

您可以使用 ISQLServerConnection 介面,以程式設計方式取得用戶端連線識別碼。 連接識別碼也會出現在任何與連接有關的例外狀況中。

發生連線錯誤時,伺服器內建診斷 (BID) 追蹤資訊和連線通道緩衝區中的用戶端連線識別碼可協助您將用戶端連線與伺服器連線相互關聯。 如需伺服器 BID 追蹤的詳細資訊,請參閱資料存取追蹤。 請注意,資料存取追蹤文章也包含資料存取追蹤的相關資訊,但是這些資訊不適用於 Microsoft JDBC Driver for SQL Server;如需使用 Microsoft JDBC Driver for SQL Server 執行資料存取追蹤的資訊,請參閱追蹤驅動程式作業

JDBC 驅動程式也會傳送執行緒特有的活動識別碼。 如果在啟用 TRACK_CAUSAILITY 選項的情況下開始工作階段,則會在延伸事件工作階段中擷取活動識別碼。 如果使用中的連接發生效能問題,您可以從用戶端的追蹤中取得活動識別碼 (ActivityID 欄位),然後在擴充事件輸出中找出活動識別碼。

擴充事件中的活動識別碼是附加 4 位元組序號的 16 位元組 GUID (與用戶端連線識別碼的 GUID 不同)。 此序號代表要求在執行緒中的順序。 系統會針對 SQL 批次陳述式和 RPC 要求傳送 ActivityId。 若要將 ActivityId 傳送至伺服器,請在 Logging.Properties 檔案中指定下列機碼值組:

com.microsoft.sqlserver.jdbc.traceactivity = on

on (區分大小寫) 以外的任何值都會停用傳送 ActivityId。

如需詳細資訊,請參閱追蹤驅動程式作業。 這個追蹤旗標會搭配對應的 JDBC 物件記錄器使用,以便決定是否要在 JDBC 驅動程式中追蹤和傳送 ActivityId。 除了更新 Logging.Properties 檔案以外,也請將記錄器 com.microsoft.sqlserver.jdbc 啟用成 FINER 或更高設定。 如要針對特定類別所提出的要求將 ActivityId 傳送至伺服器,請將對應的類別記錄器啟用成 FINER 或 FINEST。 例如,如果類別是 SQLServerStatement,請啟用記錄器 com.microsoft.sqlserver.jdbc.SQLServerStatement。

下列範例會使用 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)

另請參閱

診斷 JDBC 驅動程式的問題