Sha*_*ica 5 c# iis-7 asp.net-mvc-4 sql-server-2012 entity-framework-5
我有一个在IIS7上运行的ASP.NET MVC-4,Entity Framework 5应用程序,带有SQL Server 2012数据库.
每天,在7:45到8:15之间,数百名用户执行相同的日常日常任务.而且表现很糟糕.我们到处都是超时的.
所以今天我坐着看几个诊断工具.在SQL Server Profiler上,我看到数百个查询在30秒后超时.我复制了查询并将其放入SQL Sentry中以查看查询计划中发生了什么.30分钟后,查询最终执行,显示了一个完全无懈可击的低效执行计划.索引扫描返回了数千万条记录,这些记录应该通过较早的连接过滤到数十,甚至数百条记录.
与此同时,我正在检查性能监视器以进行其他诊断.CPU正在以20-30%的舒适度巡航,我们有256 GB的RAM,其中大约200个为SQL Server保留,并且不缺乏工作内存.没有重要的数据库锁定,没有死锁.只是可怕,糟糕的表现.
所以后来我尝试运行完全相同的查询.它在大约0.1秒内回来了.查询计划看起来完全不同:一切都是索引搜索,细线和一切.我在SQL事件探查器中捕获的所有其他查询在7:45-8:15之间花费了5秒钟,现在每秒返回0.1秒以下.
我们每天都在同一时间窗口内遇到同样的问题.我该如何解决此问题?我认为在不同时间执行查询时,不同的查询计划可能会有一些线索; 这可能与SQL统计数据有关吗?如果是这样,我们如何解决它?
编辑:我接受了@t_m的建议并部署了一个DMV脚本.现在,我可以确定在查询超时时遵循了什么执行计划,以及它在工作时遵循的计划.
| 归档时间: |
|
| 查看次数: |
162 次 |
| 最近记录: |