1

在调查一些客户端机器失去与 SQL Server 2005 的连接时,我在网上遇到了以下代码行:

选择 * FROM sys.dm_exec_query_optimizer_info WHERE counter = 'timeout'

当我在我们的服务器上运行此查询时 - 我们得到以下结果:

计数器 - 发生 - 值

超时 - 9100 - 1

据我所知,这意味着查询优化器在尝试优化针对我们服务器运行的查询时超时 - 9100 次。但是,我们在 SQL Server 错误日志中没有看到任何超时错误,我们的最终用户也没有报告任何特定于超时的错误。

谁能告诉我这个“发生”的数量是什么意思?这是我们应该关注的问题吗?

4

3 回答 3

4

此计数器与您的连接问题无关。

SQL Server 不会永远花时间尝试编译最好的计划(至少不使用跟踪标志)。

它在优化过程开始时计算两个值。

  1. 足够好的计划的成本
  2. 花在查询优化上的最长时间(这是以执行的转换任务的数量而不是时钟时间来衡量的)。

如果找到成本低于阈值的计划,则无需继续优化。此外,如果它超过了预算的任务数量,那么优化也将结束,它将返回迄今为止找到的最佳计划。

优化提前完成的原因显示在StatementOptmEarlyAbortReason属性中的执行计划中。实际上有三个可能的值。

  • 找到足够好的计划
  • 超时
  • 超出内存限制。

超时将增加您在 中询问的计数器sys.dm_exec_query_optimizer_info

延伸阅读

于 2015-09-13T10:45:36.747 回答
0

出现列将告诉您计数器增加的次数,而值列是该计数器的内部列。

看这里

于 2009-01-06T19:16:35.083 回答
0

抱歉,文档说这只是内部的。

根据另一个链接,我怀疑这是用于内部引擎超时(例如SET QUERY_GOVERNOR_COST_LIMIT

客户端超时也不会记录在 SQL 中,因为客户端中止批处理,从而停止 SQL 处理。

请问您有更详细的资料吗?

于 2009-01-06T19:27:53.610 回答