在 Microsoft JDBC Driver 4.0 for SQL Server 中,更新了跟踪功能(跟踪驱动程序操作),以便更易于将客户端事件与诊断信息关联,如连接失败可查看服务器的连接环形缓冲区和扩展事件日志中的应用程序性能信息。有关读取扩展事件日志的信息,请参阅查看事件会话数据。
详细信息
对于连接操作,Microsoft JDBC Driver for SQL Server 将发送一个客户端连接 ID。如果连接失败,您可以访问连接环形缓冲区(在 SQL Server 2008 中使用连接环形缓冲区解决连接问题),查找 ClientConnectionID 字段并获取有关连接失败的诊断信息。仅在出错时在环形缓冲区中记录客户端连接 ID。(如果在发送预登录数据包前连接失败,将不生成客户端连接 ID。)客户端连接 ID 是 16 字节的 GUID。如果将 client_connection_id 操作添加到扩展事件会话中的事件,还可以在扩展事件目标输出中找到客户端连接 ID。如果需要进一步的客户端驱动程序诊断帮助,可以启用跟踪并重新运行连接命令,查看跟踪内容中的 ClientConnectionID 字段。
可以使用 ISQLServerConnection 接口 通过编程方式获取客户端连接 ID。该连接 ID 还存在于任何与连接相关的异常中。
存在连接错误时,服务器的 BID 跟踪信息和连接环形缓冲区中的客户端连接 ID 可以帮助将客户端连接与服务器上的连接关联。有关服务器上的 BID 跟踪的详细信息,请参阅数据访问跟踪。请注意,该数据访问跟踪文章还包含有关执行数据访问跟踪的信息,这些信息并不适用于 Microsoft JDBC Driver for SQL Server;有关使用 Microsoft JDBC Driver for SQL Server 执行数据访问跟踪的信息,请参阅跟踪驱动程序操作。
JDBC Driver 还会发送特定于线程的活动 ID。如果在启用了 TRACK_CAUSAILITY 选项的情况下开始扩展事件会话,则会在会话中捕获该活动 ID。对于与活动连接有关的性能问题,您可以从客户端的跟踪中获取活动 ID(ActivityID 字段),然后在扩展事件输出中找到该活动 ID。扩展事件中的活动 ID 是一个 16 字节 GUID(与客户端连接 ID 的 GUID 不同),附有一个四字节的序列号。序列号代表线程内某个请求的顺序。ActivityId 会为 SQL 批处理语句和 RPC 请求发送。为了能将 ActivityId 发送到服务器,您首先需要在 Logging.Properties 文件中指定以下键值对:
com.microsoft.sqlserver.jdbc.traceactivity = on
有关详细信息,请参阅跟踪驱动程序操作。跟踪标志与对应的 JDBC 对象记录程序一起使用,以决定是否在 JDBC 驱动程序中跟踪和发送 ActivityId。除了更新 Logging.Properties 文件以外,还需要在 FINER 或更高级别启用 com.microsoft.sqlserver.jdbc 记录程序。如果您想为特定类发出的请求将 ActivityId 发送到服务器,则需要在 FINER 或 FINEST 级别启用对应的类记录程序。例如,如果类是 SQLServerStatement,则启用 com.microsoft.sqlserver.jdbc.SQLServerStatement 记录程序。
下面是一个示例,该示例使用 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)