【问题标题】:Azure AppService Slow Connection to SQL DatabaseAzure 应用服务与 SQL 数据库的连接缓慢
【发布时间】:2021-11-17 13:42:11
【问题描述】:

我在 Azure 有一个连接了 SQL 数据库的 S1 AppService 计划。我正在使用 EF Core。 时不时地,不仅在重新启动应用程序后,数据库命令非常慢。 Profiler 只说“等待”。但是等什么呢? Profiler picture

我怎样才能找出这里的阻塞?

【问题讨论】:

    标签: asp.net azure performance azure-web-app-service azure-sql-database


    【解决方案1】:

    在共享的 Profiler 片段中可以观察到,您的应用程序一直停留在 DbContext.SaveChangesAsync 方法上,该方法需要时间才能完成并因此触发 AWAIT_TIME,但您的并行线程继续执行。请访问double counting in parallel threads了解更多信息。

    SaveChangesAsync 方法将此上下文中所做的所有更改异步保存到底层数据库。如果它正在等待任务完成,为了取消这个过程,你需要使用cancellationToken参数。

    查看下面的示例代码供您参考:

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA1801:ReviewUnusedParameters", MessageId="cancellationToken")]
    public virtual System.Threading.Tasks.Task<int> SaveChangesAsync (System.Threading.CancellationToken cancellationToken);
    

    有用的链接:https://docs.microsoft.com/en-us/dotnet/api/system.data.entity.dbcontext.savechangesasync?view=entity-framework-6.2.0#System_Data_Entity_DbContext_SaveChangesAsync_System_Threading_CancellationToken_

    【讨论】:

    • 感谢您的回答,但我需要知道他为什么在等待?连接数据库?初始化 DbContext?尝试迁移数据库?别的什么?显然没有查询数据库,因为这需要 0.5 毫秒,正如我们在屏幕截图中看到的那样。
    • 它正在尝试将更改保存到数据库。可能是变化更多,这就是为什么它需要时间。您可以浏览有关此类和方法的文档以了解更多信息以更好地理解。您无需担心此等待时间,因为并行线程已经在运行。你可以尝试一些代码优化。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-29
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多