sys.dm_exec_query_optimizer_info“超时”记录表示什么?

时间:2009-01-06 18:52:12

标签: sql-server sql-server-2005 timeout

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

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

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

反击 - 价值

超时 - 9100 - 1

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

谁能告诉我这些“事件”的含义是什么意思?这是一个我们应该关注的问题吗?

3 个答案:

答案 0 :(得分:3)

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

SQL Server不会花费太多时间来尝试编译最好的计划(ngInclude documentation)。

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

  1. 足够好的计划成本
  2. 花在查询优化上的最长时间(这是以执行的转换任务数量而非时钟时间来衡量的。)
  3. 如果找到成本低于阈值的计划,则无需继续优化。此外,如果它超过预算的任务数量,那么优化也将结束,它将返回到目前为止找到的最佳计划。

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

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

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

    进一步阅读

答案 1 :(得分:0)

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

See here

答案 2 :(得分:0)

对不起,documentation说这只是内部的。

根据其他链接,我怀疑这是内部引擎超时(例如SET QUERY_GOVERNOR_COST_LIMIT

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

请告诉你更多详情?