在SQL SERVER中监视SQL查询的进度

Ron*_*red 19 database sql-server-2005 progress monitor

我看到一个类似的问题,询问如何监视备份/恢复操作的进度: 是否有一个SQL脚本可以用来确定SQL Server备份或恢复过程的进度?

我想知道是否有类似的查询/方式来查看查询剩余的时间,直到它结束. 例如,一个查询通常具有5分钟的经过时间.我想知道在查询执行期间它将结束多长时间.

Joh*_*ohn 20

你想要的是实时查询统计.

您可以在最新版本的SSMS中激活它,并在旁边的按钮旁边提供正常的查询计划:

在此输入图像描述

然后,这会为您提供实时查询计划:

在此输入图像描述

在底部,您可以看到总进度:

在此输入图像描述

  • 我觉得这可能以某种方式对查询性能产生负面影响。我的意思是-为什么不启用实时查询计划就无法获得进度信息?编辑:原来[实时查询统计文档]上有一个很大的警告标签(https://docs.microsoft.com/zh-cn/sql/relational-databases/performance/live-query-statistics?view=sql -服务器-2017)。实际上,它确实会对性能产生负面影响。请谨慎使用! (2认同)

KM.*_*KM. 17

没有办法知道剩下多少时间.查询的运行时取决于实际查询本身以外的许多内容:锁定/阻止其他查询,其他进程消耗资源(CPU /磁盘使用),操作系统,网络等.如果您的5分钟查询正在运行,那该怎么办?其他人开始发布大型报告,您的查询现在可能会在5:30开始.如果有人开始下载大文件并占用所有网络带宽怎么办?如果操作系统决定在后台执行某些操作,等等.如果返回所有行,则查询不会完成,但可以在可变时间范围内运行.

  • 唯一没有预料到时间估计会根据服务器负载而波动的人确实对计算机来说是非常新的.接受时间估计是一个估计,然后尝试`SELECT percent_complete FROM sys.dm_exec_requests`,然后可以用来估计查询*应该剩下多少时间来完成. (3认同)

小智 15

sys.dm_exec_requests 有这个信息,所以这样的东西会给你进步:

SELECT 
percent_complete
FROM sys.dm_exec_requests
--where session_id=51 or command like 'restore%'
Run Code Online (Sandbox Code Playgroud)

  • 此外,仅在执行特定命令时提供此信息.这些是例如`ROLLBACK`,`RECOVERY`或`BACKUP DATABASE`. (11认同)
  • 只有拥有VIEW SERVER STATE权限时,此查询才有用.如果不这样做,您将只看到刚刚提交的SELECT语句的结果,这有点无用!要确定您是否具有权限,请运行以下"SELECT*FROM fn_my_permissions(NULL,'SERVER');" - 如果没有看到具有permission_name'VIEW SERVER STATE'的条目,则表示您没有该权限. (4认同)

小智 6

是的,除非有某些意外情况影响流程的执行,否则您可以知道估计的经过时间。

Select total_elapsed_time,
 * from sys.dm_exec_sessions where session_id="your Id here" 
Run Code Online (Sandbox Code Playgroud)