大家好,我想找到一种方法来识别在microsoftsqlserver中为扩展事件执行的查询(只使用已执行的查询过滤扩展事件)
如果我像这样查询sql server中的系统视图:
SELECT session_id, connection_id
FROM sys.dm_exec_requests
WHERE session_id = @@SPID
我得到当前正在执行的查询的连接id,该id在sql server重新启动之前是唯一的。
但是扩展事件有一个名为“sqlserver.client\u connection\u id”的不同值,该值与表“sys.dm\u exec\u requests”中的“connection\u id”的标识符不同。
您知道在系统表中哪里可以找到“sqlserver.client\u connection\u id”吗?或者另一种解决方案来不确定地标识已执行的查询?
2条答案
按热度按时间k7fdbhmy1#
这个
client_connection_id
在扩展事件中(根据ssms)提供客户端在连接时提供的可选标识符
是sqlconnection.clientconnectionid,用于支持对客户端连接问题进行故障排除。
如果启用了用于记录连接id的扩展事件,则可以在扩展事件日志中找到连接id,以查看故障是否在服务器上。对于某些连接错误,还可以在连接环缓冲区(sql server 2008中的连接疑难解答)中找到连接id。如果连接id不在连接环缓冲区中,则可以假定存在网络错误。
所以这个id将连接尝试的客户端和服务器端关联起来。对于成功的连接,将使用不同的id创建sys.dm\u exec\u connections和sys.dm\u exec\u sessions中的一行。
我正在尝试创建一个扩展事件,并报告所有查询的错误。然后使用一个标识符过滤.xel文件中的结果,该标识符告诉我这是来自x查询。
您可以在错误报告事件中捕获查询,例如:
snvhrwxg2#
默认情况下,extended evets跟踪示例上的所有连接和活动。定义中的过滤器将限制这一点。
sqlserver.client\u connection\u id包含来自所有查询的所有值—因此,如果您确实知道客户端连接id,则可以标识这些结果。
我不清楚你想用扩展事件筛选什么?您希望查看从何处执行特定查询,还是跟踪特定连接上的所有查询?
您还可以在其他地方获得相同的连接信息:
看看这些可能会帮助你建立联系。