Azure Web应用程序缓慢的数据库连接
我开发了一个Web应用程序标准Web应用程序,允许用户显示和更新SQL数据库中的一组数据。
Web应用程序使用AngularJS客户端,它通过MVC Web API调用与Web服务器交互,以检索和更新数据库上的数据。 服务器端代码使用.NET 4.5以C#编写,并使用Entity Framework v6.0访问数据库。
Web应用程序托管在Azure Web App中。 数据库是Azure SQL数据库。
问题是,当应用程序未使用大约10-15分钟时,再次使用它,第一次数据检索通常需要10秒以上才能返回浏览器。 之后,性能良好,直到下次应用程序未使用。
我在应用程序中添加了跟踪,我们看到延迟是连接打开的时间。 数据库上的实际查询运行亚秒级。
我注意到,虽然使用不同的主机配置,我得到了不同的结果。 特别是在内部托管并指向Azure数据库不会遇到任何接近相同延迟的地方。
我已经改变了其中一个例程来使用ADO.NET而不是entity framework,并更改了跟踪以尝试进一步缩小范围。
我看到的是:
ConnectionStringSettings ADOcnxstring = ConfigurationManager.ConnectionStrings["DevFEConnectAdo"]; DbConnection ADOconnection = new SqlConnection(ADOcnxstring.ConnectionString);
延迟就在这里(在SQL定义之前!
然后我构建命令并执行DataReader等:
DbCommand ADOcommand = ADOconnection.CreateCommand(); : etc
因此延迟是打开与数据库的连接。
我的连接字符串是标准的:
15分钟太短,您的应用程序无法回收(如CSharpRocks所建议)。 我不认为这是问题所在。
延迟是因为在空闲超时后第一次调用时建立了新的Db连接。 通常,如果连接处于非活动状态4-10分钟 ,它将被关闭。 如果指定了最小池大小,则即使在空闲时间到期后,这些连接也将保持活动状态。
尝试使用此连接字符串(根据您的需要调整最小池大小)
更多细节为什么我们需要在ConnectionString中设置最小池大小
SQL连接属性列表 – 文档
一段时间后,最终在Microsoft Azure支持的帮助下解决了这个问题。
我遗漏的细节是我的Web App实际上指向了2个数据库 – 1个Application Azure SQL数据库,我遇到了延迟问题 – 我们在Azure虚拟机上有一个’数据仓库’
由于内部数据库服务器和“数据仓库”之间的复制,虚拟机和Web应用程序都在Azure虚拟网络中。
问题是如果虚拟网络中的Web应用程序想要与Azure SQL数据库(不能在虚拟网络中)进行通信,则可能存在网络问题。
我的解决方案是
此时所有的延迟都消失了,我可以取消MinPool Size设置(以及我后来发现的Timeout,无论如何都没有)。
几分钟不活动后,Web应用程序将被回收。 尝试启用门户中“设置/应用程序设置”中的“ 始终开启 ”设置 ,以查看这是否有助于解决您的问题。
上述就是C#学习教程:Azure Web应用程序缓慢的数据库连接分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1029184.html