存取擴展事件記錄檔中的診斷資訊
從 SQL Server 2012 開始,SQL Server Native Client和資料存取追蹤 (資料存取追蹤) 已更新,讓您更輕鬆地從連線通道緩衝區取得連線失敗的診斷資訊,以及擴充事件記錄檔中的應用程式效能資訊。
如需讀取擴充事件記錄檔的資訊,請參閱檢視事件工作階段資料。
注意
此功能僅供疑難排解及診斷使用,可能不適用稽核或安全性。
備註
針對連線作業,SQL Server Native Client會傳送用戶端連線識別碼。 如果連線失敗,您可以存取連線通道緩衝區 (SQL Server 2008 連線通道緩衝區中的連線疑難排解)、尋找 ClientConnectionID
欄位,並且取得有關連接失敗的診斷資訊。 僅在發生錯誤時,才會在信號緩衝區中記錄用戶端連接識別碼。 (如果在傳送登入前封包之前連接失敗,則不會產生用戶端連接識別碼。)用戶端連接識別碼是 16 位元組的 GUID。 如果在擴充的事件工作階段中,將 client_connection_id
動作加入至事件,您也可以在擴充的事件輸出目標中找到用戶端連接識別碼。 如果您需要進一步的診斷協助,您可以啟用資料存取追蹤並重新執行連接命令,然後觀察資料存取追蹤的 ClientConnectionID
欄位中是否有失敗的作業。
如果您在 SQL Server Native Client 中使用 ODBC,且連線成功,則可以搭配SQLGetConnectAttr使用 SQL_COPT_SS_CLIENT_CONNECTION_ID
屬性來取得用戶端連線識別碼。
SQL Server Native Client也會傳送執行緒特定的活動識別碼。 如果已啟動工作階段並啟用 TRACK_CAUSAILITY 選項,即可在擴充的事件工作階段中擷取活動識別碼。 如需與使用中連接相關的效能問題,您可以從用戶端的資料存取追蹤 (ActivityID
欄位) 取得活動識別碼,然後在擴充的事件輸出中尋找此活動識別碼。 擴充事件中的活動識別碼為 16 位元組的 GUID (與用戶端連接識別碼的 GUID 不同),後面附加 4 位元組的序號。 此序號表示執行緒內要求的順序,並指出執行緒的批次和 RPC 陳述式的相對排序。 啟用資料存取追蹤,並開啟資料存取追蹤組態中的 18 位元時,會選擇性地針對 SQL 批次陳述式和 RPC 要求傳送 ActivityID
。
以下是使用 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)
控制檔案
在 SQL Server 2012 中,SQL Server Native Client控制項檔案的內容 (ctrl.guid.snac11) 為:
{8B98D3F2-3CC6-0B9C-6651-9649CCE5C752} 0x00000000 0 MSDADIAG.ETW
{2DA81B52-908E-7DB6-EF81-76856BB47C4F} 0xFFFFFFFF 0 SQLNCLI11.1
MOF 檔案
在 SQL Server 2012 中,SQL Server Native Client mof 檔案的內容為:
#pragma classflags("forceupdate")
#pragma namespace ("\\\\.\\Root\\WMI")
/////////////////////////////////////////////////////////////////////////////
//
// MSDADIAG.ETW
[
dynamic: ToInstance,
Description("MSDADIAG.ETW"),
Guid("{8B98D3F2-3CC6-0B9C-6651-9649CCE5C752}"),
locale("MS\\0x409")
]
class Bid2Etw_MSDADIAG_ETW : EventTrace
{
};
[
dynamic: ToInstance,
Description("MSDADIAG.ETW"),
Guid("{8B98D3F3-3CC6-0B9C-6651-9649CCE5C752}"),
DisplayName("msdadiag"),
locale("MS\\0x409")
]
class Bid2Etw_MSDADIAG_ETW_Trace : Bid2Etw_MSDADIAG_ETW
{
};
[
dynamic: ToInstance,
Description("MSDADIAG.ETW formatted output (A)"),
EventType(17),
EventTypeName("TextA"),
locale("MS\\0x409")
]
class Bid2Etw_MSDADIAG_ETW_Trace_TextA : Bid2Etw_MSDADIAG_ETW_Trace
{
[
WmiDataId(1),
Description("Module ID"),
read
]
uint32 ModID;
[
WmiDataId(2),
Description("Text StringA"),
extension("RString"),
read
]
object msgStr;
};
[
dynamic: ToInstance,
Description("MSDADIAG.ETW formatted output (W)"),
EventType(18),
EventTypeName("TextW"),
locale("MS\\0x409")
]
class Bid2Etw_MSDADIAG_ETW_Trace_TextW : Bid2Etw_MSDADIAG_ETW_Trace
{
[
WmiDataId(1),
Description("Module ID"),
read
]
uint32 ModID;
[
WmiDataId(2),
Description("Text StringW"),
extension("RWString"),
read
]
object msgStr;
};
/////////////////////////////////////////////////////////////////////////////
//
// SQLNCLI11.1
[
dynamic: ToInstance,
Description("SQLNCLI11.1"),
Guid("{2DA81B52-908E-7DB6-EF81-76856BB47C4F}"),
locale("MS\\0x409")
]
class Bid2Etw_SQLNCLI11_1 : EventTrace
{
};
[
dynamic: ToInstance,
Description("SQLNCLI11.1"),
Guid("{2DA81B53-908E-7DB6-EF81-76856BB47C4F}"),
DisplayName("SQLNCLI11.1"),
locale("MS\\0x409")
]
class Bid2Etw_SQLNCLI11_1_Trace : Bid2Etw_SQLNCLI11_1
{
};
[
dynamic: ToInstance,
Description("SQLNCLI11.1 formatted output (A)"),
EventType(17),
EventTypeName("TextA"),
locale("MS\\0x409")
]
class Bid2Etw_SQLNCLI11_1_Trace_TextA : Bid2Etw_SQLNCLI11_1_Trace
{
[
WmiDataId(1),
Description("Module ID"),
read
]
uint32 ModID;
[
WmiDataId(2),
Description("Text StringA"),
extension("RString"),
read
]
object msgStr;
};
[
dynamic: ToInstance,
Description("SQLNCLI11.1 formatted output (W)"),
EventType(18),
EventTypeName("TextW"),
locale("MS\\0x409")
]
class Bid2Etw_SQLNCLI11_1_Trace_TextW : Bid2Etw_SQLNCLI11_1_Trace
{
[
WmiDataId(1),
Description("Module ID"),
read
]
uint32 ModID;
[
WmiDataId(2),
Description("Text StringW"),
extension("RWString"),
read
]
object msgStr;
};