我在 Oracle 10g 中看到了一个估计长时间运行查询的剩余时间的功能,我想知道这在 SQL Server 中是否也可能(至少在 2008 年?)?
假设我有一个非常大的表,其中包含数千万行(索引良好等),我需要搜索一些特定的行。我知道这会花费很多时间,我对此很满意,但我想向用户展示某种进度条。
如何显示进度?
我在 Oracle 10g 中看到了一个估计长时间运行查询的剩余时间的功能,我想知道这在 SQL Server 中是否也可能(至少在 2008 年?)?
假设我有一个非常大的表,其中包含数千万行(索引良好等),我需要搜索一些特定的行。我知道这会花费很多时间,我对此很满意,但我想向用户展示某种进度条。
如何显示进度?
我会忘记它,只是放一个旋转的圆圈!
不过,说真的,为了让 MrTelly 的想法更进一步,有一些动态管理视图可以为您提供某些查询的平均执行时间——也许这可以让您到达某个地方。
http://msdn.microsoft.com/en-us/library/ms188754.aspx
编辑:我在 Adam Machanic 的 sp_whoisactive 过程中看到了完成百分比。也许那是另一个值得研究的地方。SQL 2016 具有保留计划缓存信息的查询存储 - 替代 dmv 计划缓存,该缓存在重新启动时被清除。
有关的:
当今的数据库系统很少向用户/DBA 提供关于 SQL 查询执行完成量的反馈。对于长时间运行的查询,这样的反馈可能非常有用,例如,有助于决定是否应该终止查询或允许运行完成。尽管上述要求很容易表达,但为查询执行开发一个健壮的进度指标是具有挑战性的。在本文中,我们研究了上述问题并提出了可以形成有效进度估计基础的技术。在 Microsoft SQL Server 中通过实验验证我们的技术的结果是有希望的。
我不知道有一种工具会自动执行此操作,但有几种选择。将您的查询分成块...
select blah from table where IdRange between (1 and 100000)
select blah from table where IdRange between (100001 and 200000)
随着每个 sql 完成,更新进度条。
或者,您可以记录每个选择所花费的时间长度,可能以每个用户为基础存储这些值。然后使用该信息返回进度条长度。
这两种方法都很笨拙,希望有人知道更好的方法。
当然,您可以尝试破译查询计划并据此做出判断,但在代码中会很难。