Tim*_*ing 7 c# sql-server azure
我开发了一个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而不是实体框架,并更改了跟踪以尝试进一步缩小范围.
我看到的是:
ConnectionStringSettings ADOcnxstring = ConfigurationManager.ConnectionStrings["DevFEConnectAdo"];
DbConnection ADOconnection = new SqlConnection(ADOcnxstring.ConnectionString);
Run Code Online (Sandbox Code Playgroud)
延迟就在这里(在SQL被定义之前!
然后我构建命令并执行DataReader等:
DbCommand ADOcommand = ADOconnection.CreateCommand();
:
etc
Run Code Online (Sandbox Code Playgroud)
因此,延迟是打开与数据库的连接.
我的连接字符串是标准的:
<add name="DevFEConnectAdo" connectionString="data
source=feeunsqldevfeconnect.database.windows.net;initial
catalog=feeunsqldbdevfeconnect;persist security info=True;user id=???
@???;password=???;multipleactiveresultsets=True"></add>
Run Code Online (Sandbox Code Playgroud)
一段时间后,在 Microsoft Azure 支持的帮助下,这个问题最终得到了解决。
我遗漏的细节是,我的 Web 应用程序实际上指向 2 个数据库 - 1 个应用程序 Azure SQL 数据库,我遇到了延迟问题 - 我们在 Azure 虚拟机上的“数据仓库”
由于内部数据库服务器和“数据仓库”之间存在复制,虚拟机和 Web 应用程序都位于 Azure 虚拟网络中。
问题是,如果虚拟网络内的 Web 应用程序想要与 Azure SQL 数据库(不能位于虚拟网络内)通信,则可能会出现网络问题。
我的解决方案是
此时,所有延迟都消失了,我可以取消 MinPool Size 设置(后来我发现 Timeout 没有任何作用)。