![诊断 ASP.NET Core SQL Azure 偶发性能](https://linux22.com/image/791805/%E8%AF%8A%E6%96%AD%20ASP.NET%20Core%20SQL%20Azure%20%E5%81%B6%E5%8F%91%E6%80%A7%E8%83%BD.png)
我有一个 ASP.NET Core 6 应用程序,使用 EF Core 和 SQL Azure“业务关键”定价层,具有 2 个 VCPU。90% 的时间里,应用程序速度非常快,但偶尔在一天中,它会进入请求非常慢的状态......10-15 秒。这种迟缓持续 1-2 分钟,然后一切恢复正常。
我安装了很多日志记录,但到目前为止我还没能找出问题所在。我使用 Serilog 和 SEQ 来查找长时间运行的请求和查询,但我的研究毫无成果。当我看到一个长时间运行的请求时,我会查看该时间段内的其他请求,看看发生了什么,但没有发现任何明显的异常。
当出现此问题时(或从未出现过),Web 服务器 CPU、数据库 CPU 从未接近饱和状态。当出现此问题时,似乎也没有任何阻塞。我有一个脚本可以运行来识别阻塞查询,但它不会返回任何结果。
不过,这确实感觉像是数据库问题,因为当问题发生时,我可以访问没有数据库访问权限的端点,它们会非常快地返回......不到 100 毫秒。当我访问带有数据库调用的端点时,它们会挂起,直到“问题”结束,然后一切再次在 100 毫秒内响应。访问哪个表似乎并不重要,因此没有任何锁定会影响这一点。
Azure Web 应用程序(2 个 Premium v2 实例)Azure SQL 数据库:具有 2 个 VCPU 的业务关键层
我很想知道在哪里可以找到或在哪里添加一些日志。
更新:SEQ 日志显示在请求管道期间,数据库调用肯定挂起了,但这似乎不是发生在数据库端,而是发生在 Web 服务器本身。
问题发生时,我将本地开发环境指向生产 SQL 服务器,它仍会立即处理请求。现在感觉它是 WebServer 上的某个东西,但仅与 SQL 调用有关。如果端点没有 SQL 调用,它会立即响应。EF core 是否可能存在与 DB 保持连接打开的问题?
答案1
确保问题与 Azure SQL 自动备份及其在发生时对性能的影响无关。以下查询可以帮助您关联这一点。查询返回 UTC 时间的日期。
Select * from sys.dm_database_backups
ORDER BY backup_finish_date DESC
此外,过时的统计数据可能会导致 T-SQL 语句的编译时间过长,从而影响性能。请使用以下 ALTER 语句设置异步统计信息更新。此外,使用欧拉·哈伦格伦脚本对索引进行碎片整理并每天更新统计数据。
更改数据库 [你的数据库名称] 设置 AUTO_UPDATE_STATISTICS_ASYNC ON