SQL Server sp_who2 是否已弃用?

4 performance sql-server sql-server-2016 performance-tuning

我一直听说sp_who2很快就会被弃用,不受支持。我们使用的是 SQL Server 2016 Enterprise。

什么是好的官方 Microsoft 替换项目或 DMV 哪个团队应该使用而不是sp_who2

听说一个是sys.dm_exec_sessions?

Joh*_* N. 7

如果您想使用 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

作为替代,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是什么?

例如,您可以sp_who2通过运行以下命令来了解其工作原理:

select  OBJECT_DEFINITION(OBJECT_ID('sp_who2'))
Run Code Online (Sandbox Code Playgroud)

这向您展示了该过程背后的代码。

享受你的旅程。


Yar*_*lav 6

过去有 sp_who、sp_who2,但后来Adam Machanic 出现并创建了sp_whoisactive。他看到了他所做的一切,看哪,非常好。在接下来的几天里有文档下载