Azure SQL Server(弹性池)连接速度很慢

时间:2017-08-03 10:55:21

标签: entity-framework azure azure-sql-database

我们使用每个客户的数据库(每个客户多个帐户)在Azure Web Apps中运行Web应用程序。登录时,我们将用户连接到正确的客户数据库。此数据库也托管在azure(弹性池)中。它与Web App在同一地区(西欧)托管。

一旦连接汇集,请求时间很快,但是当用户第一次登录时,仍然需要创建连接,这需要(安静)很长时间。

使用SqlConnectionStringBuilder构建连接字符串。

var csb = new System.Data.SqlClient.SqlConnectionStringBuilder();
csb.DataSource = "tcp:******.database.windows.net,1433";
csb.InitialCatalog = "***-***-***";
csb.UserID = "**-**";
csb.Password = "**********";
csb.MultipleActiveResultSets = true;
csb.Encrypt = true;
csb.PersistSecurityInfo = false;
csb.TrustServerCertificate = false;
csb.ConnectTimeout = 30;

_connectionString = csb.ConnectionString;
// Data Source=tcp:******.database.windows.net,1433;Initial Catalog=***-***-***;Persist Security Info=False;User ID=**-***;Password=******;MultipleActiveResultSets=True;Connect Timeout=30;Encrypt=True;TrustServerCertificate=False

我做错了吗?或者在azure中有一些设置可以加快连接过程吗?

First request time

上述请求显示了对客户应用程序的第一个请求。因此,它包括EF Migration Seed,导致前2个查询实际上没有进入数据库本身,而且还有很多查询(这里没有显示)到数据库。

1 个答案:

答案 0 :(得分:0)

好吧,我最终解决了我的问题。似乎我在Applications Insights中匹配错误的查询。我安装了Stackify,这只提供了我需要的更多信息。

Seem的Entity Framework使用'master'数据库做了一些事情。由于connectionstring中的用户无权访问“master”数据库,因此会抛出错误。好吧,处理该错误需要花费相当长的时间才能使用app-service,因此返回速度很慢。它不会失败。

EF尝试做的是通过查询主数据库来确定数据库是否存在,然后连接到非现有数据库会更快。如果由于无法连接到master数据库而失败,则EF只会尝试连接到数据库本身。如果与数据库的连接有效,它将继续正常执行,如种子方法。