我们已经使用.NET Core 3.1,Dapper和Azure SQL构建了一个Web API,该API托管在Azure Web应用程序上。使用loader.io,我们进行了一些性能测试,这些测试对于S1实例令人失望(约10 RPS)。每个API调用都会使用Dapper触发几个SQL查询,以从Azure SQL数据库(100 DTU)检索数据。
Application Insights分析器进行了跟踪,这表明数据库中花费了大量时间:
使用标准.NET CoreIServiceCollection
DI和Scrutor注入代码:
// Injection of all SqlServer repositories.
services.Scan(scan => scan
.FromAssemblyOf<SomeRepository>()
.AddClasses(classes => classes.Where(type => type.Name.EndsWith("Repository")))
.AsImplementedInterfaces()
.WithTransientLifetime());
Dapper在SQL Server存储库中用于检索信息:
public async Task<IReadOnlyCollection<DocumentRevisionOverview>> GetDocumentRevisionsAsync()
{
Logger.LogInformation("Starting {Method} on {Class}.", nameof(GetDocumentRevisionsAsync), ClassName);
var sql = "select statement";
// databaseParameters.ConnectionString (type is string) is injected via the constructor.
using (var connection = new SqlConnection(databaseParameters.ConnectionString))
{
var documentRevisions = await connection.QueryAsync<DocumentRevisionOverview>(sql);
Logger.LogInformation("Finished {Method} on {Class}.", nameof(GetDocumentRevisionsAsync), ClassName);
return documentRevisions.ToList();
}
}
我们的数据库表中没有varchars
,因此varchar to nvarchar conversion 不适用。
"Server={server};Initial Catalog={database};Persist Security Info=False;User ID={user};Password={password};MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"
我该怎么做才能进一步调查等待时间的原因?
Nice PS:部署到Linux Web应用程序(使用P1V2,S1大小是2倍)时,我看到了5倍的改进,我感到很惊讶。
[不知道您的情况,很难确定,但是我已经验证了Azure SQL比SQL Server慢很多,这是因为即使在相同的数据中,Azure SQL的位置也离执行服务器不够近。中心。
在我的最后一个位置,我们移至Azure SQL,由于我们的应用程序是繁重的计算应用程序,因此我们移回了位于虚拟机上的SQL Server,并使用SQL Data Sync将数据发送到Azure SQL进行备份。
这无助于解决您的问题,但从我发现的情况来看,Azure SQL最适合用于后端作业。