我正在使用 SQL Server 2012 (11.0.5058.0)扩展事件,并希望知道每个连接使用的网络协议(TCP/IP、共享内存等)。
通过以下方式为登录事件创建的事件会话:-
CREATE EVENT SESSION [Login] ON SERVER
ADD EVENT sqlserver.login(
ACTION(
sqlserver.client_app_name
,sqlserver.client_connection_id
,sqlserver.client_hostname
,sqlserver.client_pid
...
...
我已经为登录事件添加了所有可用的操作(SELECT * FROM sys.dm_xe_objects WHERE package_guid = '655FD93F-3364-40D5-B2BA-330F7FFB6491' AND object_type = 'action' ORDER BY name)但似乎没有给出网络协议。
当然,登录可能不是提供此信息的正确事件,但我在XE DMV中看不到连接事件(或类似事件) 。
为了确认,我想要一个扩展的事件会话来公开 dm_exec_connections 返回的 net_transport 信息: -
SELECT net_transport FROM sys.dm_exec_connections
找到了答案。
登录事件正确,网络协议通过 options_text 操作公开。options_text 以前对我来说总是空白的,这需要通过SET collect_options_text=(1) 设置。一个示例会话可能是:-
然后这将用类似的东西填充 options_text : -
通过从 Microsoft 提供的扩展事件模板的“连接跟踪”创建会话,我发现这是偶然的。
安全管理系统 | 管理 | 扩展事件 | 会议 | 右击 | 新会话 | 总页 | 模板 = 连接跟踪。
该模板包括“SET collect_options_text=(1)”,我之前并不知道存在这样的选项。
这篇sql-server-performance 文章中也给出了一个示例。最后一张截图显示 options_text 填充了“network protocol: LPC..” LPC is shared memory。