2009-03-05 52 views
5

我在Oracle 10g中看到了一个估计长时间运行查询的剩余时间的功能,我想知道这是否也可以在SQL Server中使用(至少在2008年?)?SQL Server中的查询持续时间估计

假设我有一个有数千万行的非常大的表(以及索引等等),我需要搜索一些特定的行。我知道这需要很多时间,我很酷,但我想向用户展示某种进度条。

如何显示进度?

+0

如果表(一)索引良好,你正在寻找“一些”特定的行(我的意思是少数)它必须立即返回行。无论如何,很好的问题!;-) – FerranB 2009-03-05 23:52:57

+1

即使在DataWarehouses中有良好的索引,一些生成查询的报告也可能会花费1分钟以上。 – 2009-03-06 00:11:26

回答

5

我会忘记它,只是把一个旋转的圆圈!尽管如此,为了进一步考虑MrTelly的想法,有一些动态管理视图可以为某些查询提供平均执行时间 - 也许这可以让你在某个地方。

http://msdn.microsoft.com/en-us/library/ms188754.aspx

编辑: 我已经看到了完成百分比从亚当Machanic的sp_whoisactive程序。也许这是另一个需要研究的地方。 SQL 2016具有持久存储计划高速缓存信息的查询存储 - 替代dmv计划高速缓存,在重新启动时将其清除。

1

我不知道会自动执行此操作的工具,但有一些替代方法。打破你的查询块...

select blah from table where IdRange between (1 and 100000) 

select blah from table where IdRange between (100001 and 200000) 

随着每个sql完成,所以更新进度条。

或者您可以记录每个选择所花费的时间长度,将这些值存储在每个用户的基础上。然后使用该信息返回进度条长度。

这两种方法都非常糟糕,希望有人知道更好的方法。

当然你可以尝试破译查询计划并根据这个判断做出判断,但是在代码中很难。

2

相关:

如今的数据库系统上 如何在SQL查询的执行的许多人已完成很少提供反馈给用户/ DBA。对于长时间运行的查询, 这样的反馈可能非常有用,例如 帮助决定查询是否应该终止或是否允许运行 完成。尽管上述要求很容易表达,但开发查询执行进度的可靠指标 具有挑战性。在本文中,我们研究了上述问题,并提出了可以构成有效进度估计基础的技术。 SQL Server的Microsoft 实验验证我们的技术的结果是有希望的。