【发布时间】:2022-01-25 15:16:50
【问题描述】:
我有一个托管在应用服务计划上的 .NET Core Azure Functions 应用。该计划专用于独立定价层。 Functions 应用已打开 Always On 设置。出于某种原因,该应用在连接到 Azure SQL 数据库时出现问题。该数据库与 Functions 应用在同一区域运行,并且具有关键业务定价层。
我在 Application Insights 中看到 API 调用需要几秒钟才能完成,因为代码路径正忙于等待获取 SQL 连接。实际的数据库操作在几毫秒内完成。
我已经在本地运行了应用程序,并将数据库连接字符串设置为 Azure SQL 数据库,并且完全没有看到任何延迟。每个请求在几毫秒内完成。然后,我使用专用的应用服务计划在现有应用服务环境之外创建了一个新的 Azure Functions 应用。结果是一样的,一点延迟都没有。
问题
以前是否有人遇到过此类问题,或者对可能出现的问题有任何想法? Azure App Service Environment 使用的任何网络网关是否可能导致此问题?
附:应用服务环境中的其他应用也面临此问题,但请求量较少。
【问题讨论】:
-
如果没有看到代码,真的很难提供帮助。我的猜测是您没有正确处理连接/使用连接池。另一个可能的原因可能是使用了阻塞连接的同步操作
-
@ThiagoCustodio 一开始我也是这么想的。所以我检查了数据库调用并没有找到类似的东西。我正在使用PetaPoco library 进行数据库调用。所有的调用都是同步的。我也检查了库的相关代码,发现连接在库本身的 Query、Execute 等调用上关闭。然后我在连接字符串上将最大连接池大小设置为 1 并测试了应用程序。但没有 TimeoutException 或响应缓慢的问题。如果应用负载不重,是否会因同步操作而导致连接阻塞?
-
此外,延迟总是固定在 14 秒左右。
-
您最好检测应用程序(使用应用程序洞察力)尝试找出瓶颈在哪里/为什么会挂起
-
@ThiagoCustodio 我已经这样做了,并且看到操作花费的时间太长了。因为它正在等待连接。 Application Insights 分析也向我展示了同样的事情。 SqlClient 正在等待获取连接。但这不会发生在应用服务环境之外。
标签: azure azure-functions azure-sql-database azure-app-service-plans azure-app-service-envrmnt