【发布时间】:2011-07-06 13:32:41
【问题描述】:
我有一个查询在某些情况下会超时,但在其他情况下不会。我正在使用 sql server 2008,mvc3,ef。
查询相当大(EF 代码),但是,在 QA 中使用 Profiler 中的确切查询进行调查后,所有分支都使用索引查找。这是一个两个或三个表连接,具体取决于哪个查询(大约 4 个不同的查询,每个有 4 个变体,具体取决于我正在查询的列)。这些表大约有 400k、100k、1.2m 行。但是,即使在 400k - 100k 加入时我也会超时。我一次要分页 50 条记录,但计数也会超时。
我正在寻找一些关于如何确定导致超时的建议。由于它在某些情况下会在 5 秒内运行并显示在页面上,而在其他情况下会超时,我认为这不是查询。我宁愿不增加超时阈值。
我尝试使用 SSMS 中的报告来查找阻塞事务、资源锁定、我已设置读取未提交、查看配置文件表...
值得怀疑的一件事是这些表每天更新一次 - 使用大量删除和批量导入。统计数据可以关闭还是索引?我每晚重建大部分索引,但不确定这些表。有没有办法验证这种情况?我可以在导入时间后重建索引,不会有太多的停机时间,而且比零星的超时要好。但我还是不确定是不是这个。
【问题讨论】:
-
有可能被阻止吗?在我看来,这听起来像是争论。如果其他人正在更新或选择意外级别的锁升级(即 SELECT ... WITH (TABLOCKX)),则可能会导致这种情况。
-
没有阻塞事务或任何主要的锁——我一直在关注它。
标签: sql-server sql-server-2008 timeout