【问题标题】:Query duration estimation in SQL ServerSQL Server 中的查询持续时间估计
【发布时间】:2009-03-05 23:31:46
【问题描述】:

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

假设我有一个非常大的表,其中包含数千万行(索引良好等),我需要搜索一些特定的行。我知道这会花费很多时间,我对此很满意,但我想向用户展示某种进度条。

如何显示进度?

【问题讨论】:

  • 如果表(一个)索引良好并且您正在寻找“一些”特定行(我的意思是很少)它必须立即返回行。无论如何,好问题! ;-)
  • 即使数据仓库中有良好的索引,一些报告生成查询也可能需要 1 分钟以上的时间。

标签: sql-server progress


【解决方案1】:

我会忘记它,只是放一个旋转的圆圈!

说真的,为了让 MrTelly 的想法更进一步,有一些动态管理视图可以为您提供某些查询的平均执行时间 - 也许这可以让您有所收获。

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

编辑: 我在 Adam Machanic 的 sp_whoisactive 过程中看到了完成百分比。也许那是另一个值得研究的地方。 SQL 2016 具有保留计划缓存信息的查询存储 - 替代 dmv 计划缓存,该缓存在重新启动时被清除。

【讨论】:

  • 好主意。您可以根据用户的查询获得估计的查询计划,然后检查计划缓存以查看该计划是否已经存在,以及平均持续时间有多长。它很乱,它会给服务器增加负载,但它会起作用。
【解决方案2】:

相关:

当今的数据库系统很少向用户/DBA 提供关于以下方面的反馈 已完成多少 SQL 查询的执行。长久以来 运行查询,这样的反馈可能非常有用,例如, 帮助决定是否应该终止或允许运行查询 完成。虽然上面的要求很容易表达, 为查询执行开发一个强大的进度指标是 具有挑战性的。在本文中,我们研究了上述问题并提出 可以形成有效进度估计基础的技术。 在微软实验验证我们的技术的结果 SQL Server 很有前景。

【讨论】:

    【解决方案3】:

    我不知道有什么工具可以自动执行此操作,但有几种替代方法。将您的查询分解成块...

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

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

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

    这两种方法都很笨拙,希望有人知道更好的方法。

    当然,您可以尝试破译查询计划并据此做出判断,但在代码中会很难。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-07
      • 1970-01-01
      • 2012-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-25
      • 1970-01-01
      相关资源
      最近更新 更多