【发布时间】:2014-02-25 11:44:34
【问题描述】:
我有一个查询在上午 11 点运行时永远不会完成(需要超过 2 小时),而当我在晚上 7 点运行时需要 1 分钟。所以很明显,执行计划在白天会发生变化。什么会导致这种情况?
数据不会改变。自动统计信息被关闭,统计信息和索引在夜间重建。
我在客户端环境中运行它,所以我真的不知道还有什么使用相同的 SQL 服务器。所以这是我主要关心的问题,我认为服务器被其他东西加载得太厉害了,以至于它无法处理我的查询。
我应该查看服务器的哪些参数来查找问题的原因?
我还应该在哪里寻找问题?我还要考虑哪些其他因素?
任何帮助将不胜感激。
更新:忘了提到我有一大堆其他大型查询同时运行(上午 11 点),它们都运行良好。实际上,我有 7 个查询在晚上运行良好,但在早上没有完成。它们都使用相同的视图来连接相当大的表,这是失败的查询和失败的查询之间的唯一区别。所以我想知道SQL服务器是否没有足够的内存或其他东西来保存视图执行的中间结果,这就是查询永远不会完成的原因。
那么我应该监控服务器的哪些参数来发现问题?
UPDATE很遗憾,由于权限原因我没有晨跑的执行计划
更新我不认为表锁定是原因,因为我知道服务器上的数据库在使用什么,我可以在下午 12 点运行相同的查询,而我的边(即我的表上应该没有锁和未提交的事务)并且查询花费了同样可怕的时间。
【问题讨论】:
-
做一个 sp_who2 检查减速。
-
obviously the execution plan changes您应该通过提取至少 2 个不同的执行计划来验证这一点,也许您的数据库只是上午 11 点的REALLY BUSY -
“很明显,执行计划在白天发生了变化。”。不?可能会改变的是服务器负载(但这不太可能导致这样的差异),或者有一些糟糕的程序滥用了锁。
-
如果您谈论的是查询(并且不是存储过程),您无法预见执行计划是相同还是不同,这取决于许多因素,包括可用资源。也就是说,我建议您在查询停止时调查现有的锁。
-
@drCopyPaste 由于缺少权限以及查询永远不会完成的事实,无法拉出早上的执行计划。我怎样才能确定服务器是“真的很忙”谢谢