你好,伙计们,我想找到一种方法来标识在中执行的扩展事件查询(只对执行的查询进行扩展事件筛选)。
如果我像这样查询Server中的系统视图:
SELECT session_id, connection_id
FROM sys.dm_exec_requests
WHERE session_id = @@SPID我得到执行当前查询的connection_id,它在Server重新启动之前是唯一的。
但是扩展事件有一个不同的值,名为'sqlserver.client_connection_id',它与表‘sys.dm_exec_connection_id’中的'connection_id‘标识符不同。
你知道在哪里可以在系统表中找到'sqlserver.client_connection_id‘吗?还是另一种解决方案来不准确地识别执行的查询?
发布于 2020-07-23 12:57:44
扩展事件中的client_connection_id(根据SSMS)
提供客户端在连接时提供的可选标识符。
是SqlConnection.ClientConnectionId,它旨在支持客户端连接问题的疑难解答。
您可以在extended日志中定位连接ID,以查看是否在服务器上启用了用于记录连接ID的扩展事件。对于某些连接错误,您还可以在连接环缓冲区中定位连接ID ( Server 2008中的Connectivity疑难解答和Connectivity环形缓冲区中的连接故障排除)。如果连接ID不在连接环缓冲区中,则可以假定网络错误。
因此,这个id将连接尝试的客户端和服务器端关联起来。为了成功地连接,将用不同的id创建sys.dm_exec_connections和sys.dm_exec_sessions中的一行。
我正在尝试使用所有查询的error_reported创建一个扩展事件。然后使用一个标识符过滤.xel文件中的结果,该标识符告诉我这是来自X查询的结果。
您可以在error_reported事件中捕获查询,例如:
CREATE EVENT SESSION [errors] ON SERVER
ADD EVENT sqlserver.error_reported(
ACTION
(
sqlserver.client_app_name,
sqlserver.session_id,
sqlserver.sql_text
)
WHERE ([severity]>=(11)))发布于 2020-07-23 12:35:00
默认情况下,Extended跟踪实例上的所有连接和活动。定义中的过滤器将限制这一点。
sqlserver.client_connection_id包含来自所有查询的所有值-因此,如果您确实知道客户端连接id,那么您可以识别这些结果。
我不清楚你想用扩展事件过滤什么?您是否希望查看某个特定查询是从何处执行的,还是跟踪特定连接上的所有查询?
为了获得相同的连接信息,您可以查看的其他地方是:
SELECT * FROM sys.dm_exec_connections
SELECT * FROM sys.dm_exec_sessions
SELECT * FROM sys.dm_exec_requests查看这些可能会帮助您链接make连接。
https://stackoverflow.com/questions/63052173
复制相似问题