4 performance sql-server sql-server-2016 performance-tuning
我一直听说sp_who2
很快就会被弃用,不受支持。我们使用的是 SQL Server 2016 Enterprise。
什么是好的官方 Microsoft 替换项目或 DMV 哪个团队应该使用而不是sp_who2
?
听说一个是sys.dm_exec_sessions?
如果您想使用 Microsoft 提供的标准功能,那么您可能需要考虑使用可用的DMV(动态管理视图),它是 Microsoft SQL Server 的组成部分。
尝试系统动态管理视图(Microsoft Docs) 的起始页面。本页提供了按类别分组的 DMV 的概述。
使用这些 DMV 的好处是您只需每天使用它们就可以更好地了解 SQL Server。您不必依赖更新的第三方工具,因为您始终掌握最新信息。
也就是说,即使 DMV 也会随着时间的推移而发生变化,DMV 概述中的以下声明中指出了这一点:
重要
动态管理视图和函数返回内部的、特定于实现的状态数据。它们的架构和返回的数据可能会在 SQL Server 的未来版本中发生变化。因此,未来版本中的动态管理视图和功能可能与本版本中的动态管理视图和功能不兼容。例如,在 SQL Server 的未来版本中,Microsoft 可能会通过将列添加到列列表的末尾来扩充任何动态管理视图的定义。我们建议不要在生产代码中使用语法 SELECT * FROMdynamic_management_view_name,因为返回的列数可能会更改并破坏您的应用程序。
作为替代,sp_who2
您可以使用以下示例查询各种 DMV:
-- replacement for sp_who2
SELECT sdes.session_id
,sdes.[status]
,sdes.login_name
,sdes.[host_name]
,sder.blocking_session_id
,sdb.name
,sdes.cpu_time
,sdes.logical_reads --optionally: + sdes.reads + sdes.writes
,sdes.last_request_start_time
,sdes.program_name
,sdes.session_id
,sder.request_id
,dest.[text]
FROM sys.dm_exec_sessions AS sdes
LEFT JOIN sys.dm_exec_connections AS sdec
ON sdes.session_id = sdec.session_id
JOIN sys.databases AS sdb
ON sdes.database_id = sdb.database_id
LEFT JOIN sys.dm_exec_requests AS sder
ON sdes.session_id = sder.session_id
CROSS APPLY sys.dm_exec_sql_text(sdec.most_recent_sql_handle) AS dest
Run Code Online (Sandbox Code Playgroud)
使用 DMV 的一大优点是您可以了解很多有关 SQL Server 内部工作原理的知识。
例如,您可以sp_who2
通过运行以下命令来了解其工作原理:
select OBJECT_DEFINITION(OBJECT_ID('sp_who2'))
Run Code Online (Sandbox Code Playgroud)
这向您展示了该过程背后的代码。
享受你的旅程。