sql-server - Azure SQL 单一数据库 DTU 超时过期错误

标签 sql-server asp.net-core entity-framework-core azure-sql-database azure-appservice

我正在使用 Azure SQL 单一数据库 DTU 购买模型。平均负载似乎低于 10%。有时我会收到一个错误,现在几乎每天都在发生。我正在使用 EF Core 3.1 进行数据库访问。从使用 ASP.NET core 3.1 构建并部署在 Linux Azure 应用服务上的 API 访问数据库。
错误是:
执行超时已过期。在操作完成之前超时期限已过,或者服务器没有响应。 ---> System.ComponentModel.Win32Exception (258): 未知错误 258

堆栈跟踪:

An exception occurred in the database while saving changes for context type 'MTP.Api.Persistence.MTPDbContext'.
Microsoft.EntityFrameworkCore.DbUpdateException: An error occurred while updating the entries. See the inner exception for details.
 ---> Microsoft.Data.SqlClient.SqlException (0x80131904): Execution Timeout Expired.  The timeout period elapsed prior to completion of the operation or the server is not responding.
 ---> System.ComponentModel.Win32Exception (258): Unknown error 258
   at Microsoft.Data.SqlClient.SqlCommand.<>c.<ExecuteDbDataReaderAsync>b__164_0(Task`1 result)
   at System.Threading.Tasks.ContinuationResultTaskFromResultTask`2.InnerInvoke()
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location where exception was thrown ---
   at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot, Thread threadPoolThread)
--- End of stack trace from previous location where exception was thrown ---
   at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReaderAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken)
   at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReaderAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken)
   at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReaderAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken)
   at Microsoft.EntityFrameworkCore.Update.ReaderModificationCommandBatch.ExecuteAsync(IRelationalConnection connection, CancellationToken cancellationToken)
ClientConnectionId:16f899d4-cfc9-4401-b631-1b4d547c4c19
Error Number:-2,State:0,Class:11
ClientConnectionId before routing:02e37a1e-981c-4ff6-9437-cade8b401cc5
Routing Destination:c71faab34237.tr1.francecentral1-a.worker.database.windows.net,11018
   --- End of inner exception stack trace ---
   at Microsoft.EntityFrameworkCore.Update.ReaderModificationCommandBatch.ExecuteAsync(IRelationalConnection connection, CancellationToken cancellationToken)
   at Microsoft.EntityFrameworkCore.Update.Internal.BatchExecutor.ExecuteAsync(IEnumerable`1 commandBatches, IRelationalConnection connection, CancellationToken cancellationToken)
   at Microsoft.EntityFrameworkCore.Update.Internal.BatchExecutor.ExecuteAsync(IEnumerable`1 commandBatches, IRelationalConnection connection, CancellationToken cancellationToken)
   at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChangesAsync(IList`1 entriesToSave, CancellationToken cancellationToken)
   at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChangesAsync(DbContext _, Boolean acceptAllChangesOnSuccess, CancellationToken cancellationToken)
   at Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerExecutionStrategy.ExecuteAsync[TState,TResult](TState state, Func`4 operation, Func`4 verifySucceeded, CancellationToken cancellationToken)
   at Microsoft.EntityFrameworkCore.DbContext.SaveChangesAsync(Boolean acceptAllChangesOnSuccess, CancellationToken cancellationToken)

知道是什么原因造成的吗?或者我如何才能找到导致问题的原因?

最佳答案

我将 nuget 包 Microsoft.Data.SqlClient 更新到了 2.0 版。这似乎解决了问题。

API 使用 EF Core 3.1。 EF Core 使用 MARS(MultipleActiveResultSets)。在 Linux 上部署并使用 MARS 时,Microsoft.Data.SqlClient 版本 1.0 似乎存在问题。 EF Core 默认使用 v1。

关于sql-server - Azure SQL 单一数据库 DTU 超时过期错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63077018/

相关文章:

sql - 统计一年中每个月的记录

SQL:将 + 分隔列表转换为整数

mysql - 查询在 sql server 中有效,但在 MySql 中无效

c# - HttpClient.GetJsonAsync 未找到。 (blazor 服务器)

c# - 使用不同的服务器验证 token ?

.net-core - Entity Framework 核心 : How to get the Connection from the DbContext?

sql - 当所有重叠的日期范围同时重叠时获取所有重叠的日期范围

c# - .NET CORE 2 EF 包含

asp.net-mvc - Entity Framework Core 1.1.1 连接字符串引发 ArgumentNullException

c# - 如何从 Visual Studio Team Services 运行 ASP.NET Core Entity Framework 迁移