首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Extended connection_id vs client_connection_id

Extended connection_id vs client_connection_id
EN

Stack Overflow用户
提问于 2020-07-23 10:30:30
回答 2查看 565关注 0票数 0

你好,伙计们,我想找到一种方法来标识在中执行的扩展事件查询(只对执行的查询进行扩展事件筛选)。

如果我像这样查询Server中的系统视图:

代码语言:javascript
复制
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‘吗?还是另一种解决方案来不准确地识别执行的查询?

EN

回答 2

Stack Overflow用户

发布于 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事件中捕获查询,例如:

代码语言:javascript
复制
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)))
票数 1
EN

Stack Overflow用户

发布于 2020-07-23 12:35:00

默认情况下,Extended跟踪实例上的所有连接和活动。定义中的过滤器将限制这一点。

sqlserver.client_connection_id包含来自所有查询的所有值-因此,如果您确实知道客户端连接id,那么您可以识别这些结果。

我不清楚你想用扩展事件过滤什么?您是否希望查看某个特定查询是从何处执行的,还是跟踪特定连接上的所有查询?

为了获得相同的连接信息,您可以查看的其他地方是:

代码语言:javascript
复制
SELECT * FROM sys.dm_exec_connections
SELECT * FROM sys.dm_exec_sessions
SELECT * FROM sys.dm_exec_requests

查看这些可能会帮助您链接make连接。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63052173

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档