我知道SO中有很多这类话题,但我想介绍一下我的具体例子。
从Web应用程序(ADO.NET,ASP.NET MVC)运行操作时出现错误:
超时已过期。在完成操作或服务器之前经过了超时时间。等待操作超时
但是直接在db raw查询(由profiler捕获)上运行时只需要2秒钟。
背景
- 问题突然出现(发布后一周),仅在prod服务器中发生。
- 此特定查询的超时为180秒,http请求为24000 [单位] - 可能还为秒(每MSDN)
- 我们没有全文索引
- 当用户通过一个“fretext”(普通文本框)字段搜索生成查询的内容时,仅针对一个特定查询发生错误
额外的10-12 “或类似%value%”条件(从开始就完成它的方式,并且没有机会改变它)
- 什么是奇怪的非常相似的查询(对于其他“自由文本”字段具有相同数量的“或类似%value%”)工作没有任何问题
- 事务隔离级别=已序列化
- 对每个查询以相同的方式完成数据绑定(controller-> service-> db-> service-> view model-> html),实际上是我们的
框架自动将字段从“select”查询绑定到viewModels
- 原始查询(由探查器捕获)快速运行(2-3秒),但是从webApp级别返回超时。
- 我无法直接访问prod服务器,因此我无法立即检查所有内容,也无法共享任何代码/堆栈跟踪。
醇>
建议:
发现很多类似的帖子,这个对我来说特别有趣:https://stackoverflow.com/a/8603111,并且想知道清除统计信息(exec sp_updatestats)。
问题:
您是否有类似的经历,可能是上面建议的任何其他建议?原始查询在短时间内运行的原因是什么,但是从webapp获取超时?