建立 SQL 连接需要 10 - 15 秒

use*_*711 5 sql-server asp.net-mvc performance iis-7 entity-framework-4

我们遇到了一些奇怪的性能问题,我希望有人能够为我们指明正确的方向。我们的场景是一个ASP.NET MVC C#使用EF4 POCOin IIS 7(高度规范的服务器,专用于此应用程序)的网站。

显然它在 application_startup 上很慢,这是可以预料的,但是一旦加载,您就可以导航该站点,一切都很好,而且页面加载速度快 0.5 毫秒(我们正在使用Mini-Profiler)。现在,如果您停止使用该网站 5 - 10 分钟(我们将应用程序池回收设置为 2 小时,并且我们正在记录,所以我们知道它没有被回收)那么第一页加载速度非常慢,10 - 15 秒,但随后您可以毫无问题地再次导航(0.5 毫秒)。

这并不是SQL queries很慢,因为所有查询在第一页命中后似乎都可以正常工作,即使它们尚未运行,因此也不会在任何地方缓存。

我们已经做了大量的测试,我无法弄清楚这一点。到目前为止,我尝试过的主要事情是预先生成 EF 视图,但这并没有帮助。

看起来在Sql Server Profiler5 分钟后给予或花费 30 秒后,在 Sql Server Profiler 中没有活动并且没有站点交互,应用程序会出现几个“审核注销”条目,一旦发生这种情况,它似乎需要 10 - 15秒刷新应用程序。是否有空闲超时Sql Server

Eko*_*tin 5

如果您在连接字符串中使用以下内容,这应该有效:

server=MyServer;database=MyDatabase;Min Pool Size=1;Max Pool Size=100
Run Code Online (Sandbox Code Playgroud)

它会强制您的连接池始终保持至少一个连接。我必须说我不推荐这个(持久连接),但它会解决你的问题。


j0a*_*u1n 0

我会针对 SQL Server 运行“SQL Server Profiler”并捕获新的跟踪,同时通过在空闲 5-10 分钟后访问该站点来重现问题。之后查看痕迹。具体来说,查找 ApplicationName 以“EntityFramework...”开头的条目。这将告诉您 EF 此时正在做什么。EF 之上的自定义缓存可能存在一些问题,或者某些会话状态即将过期(检查 web.config 中的 sessionState 超时)