访问扩展事件日志中的SQL Server Native Client诊断信息

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure Synapse AnalyticsAnalytics Platform System (PDW)

重要

已从 SQL Server 2022 (16.x) 和 SQL Server Management Studio 19 (SSMS) 中删除SQL Server Native Client(通常缩写为 SNAC)。 不建议在新应用程序开发工作中使用 SQL Server Native Client(SQLNCLI 或 SQLNCLI11)和旧版 Microsoft OLE DB Provider for SQL Server (SQLOLEDB)。 请在此后切换为使用新版 Microsoft OLE DB Driver (MSOLEDBSQL) for SQL Server 或最新版的 Microsoft OLE DB Driver for SQL Server。 对于作为 SQL Server 数据库引擎组件随附的 SQLNCLI (版本 2012 到 2019) ,请参阅此支持生命周期异常

从 SQL Server 2012 (11.x) 开始,SQL Server Native Client和数据访问跟踪 (数据访问跟踪) 已更新,以便更轻松地从连接环缓冲区获取有关连接失败的诊断信息和扩展事件日志中的应用程序性能信息。

有关读取扩展事件日志的信息,请参阅查看事件会话数据

注意

该功能只用于故障排除和诊断目的,可能不适合审核或安全目的。

备注

对于连接操作,SQL Server Native Client将发送客户端连接 ID。 如果连接失败,可以访问连接环形缓冲区(在 SQL Server 2008 中使用连接环形缓冲区解决连接问题),查找 ClientConnectionID 字段并获取有关连接失败的诊断信息 。 仅当发生错误时,才在环形缓冲区中记录客户端连接 ID。 (如果在发送预登录数据包前连接失败,将不会生成客户端连接 ID。)客户端连接 ID 是 16 字节的 GUID。 如果将 client_connection_id 操作添加到扩展事件会话中的事件,则还可以在扩展事件输出目标中找到客户端连接 ID。 如果需要进一步的诊断帮助,则可以启用数据访问跟踪并再次运行连接命令,然后观察数据访问跟踪中的 ClientConnectionID 字段以查看是否有失败的操作。

如果在 SQL Server Native Client 中使用 ODBC 并且连接成功,则可以将 SQL_COPT_SS_CLIENT_CONNECTION_ID 属性与 SQLGetConnectAttr 结合使用来获取客户端连接 ID。

SQL Server Native Client还会发送特定于线程的活动 ID。 如果开始会话时启用了 TRACK_CAUSAILITY 选项,则会在扩展的事件会话中捕获活动 ID。 对于与活动连接有关的性能问题,可以从客户端的数据访问跟踪中获取活动 ID(ActivityID 字段),然后在扩展事件输出中找到该活动 ID。 扩展事件中的活动 ID 是 16 字节 GUID(与客户端连接 ID 的 GUID 不同),且后面追加四个字节的序列号。 该序列号表示某个请求在线程内的顺序,并指示线程的批处理和 RPC 语句的相对顺序。 当启用数据访问跟踪且数据访问跟踪配置字中的第 18 位设置为“打开”时,可以针对 SQL 批处理语句和 RPC 请求发送 ActivityID(可选)。

以下是使用 Transact-SQL 启动扩展事件会话的一个示例,这些会话将存储在环形缓冲区中并将记录在执行 RPC 和批处理操作时从客户端发送的活动 ID。

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 (11.x) 中,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 (11.x) 中,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;  
};  

另请参阅

处理错误和消息