mysql - IConfiguration.GetConnectionString MySql 连接池耗尽
问题描述
我有一个针对 .NET 5 的 AspNetCore Web 应用程序,它使用 Entity Framework 6(最新版本)访问 MySql 数据库,该应用程序托管在 Azure 上。很长一段时间以来,我注意到发布应用程序后需要很长时间才能启动并开始服务请求,我查看了 IIS 托管进程并注意到线程数在不断增加,经过更多研究后我能够查找导致问题的 WEB API 函数。该函数用于刷新 jwt 令牌,当站点启动时,大约有 500-600 次调用该函数,乍一看,我的第一个假设是这是我的 EF 代码,因为混合了异步和同步数据库调用,查看日志也指向了那个方向,因为有大量的 MySql 异常
error connecting: Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached.
因此,我仔细查看了我的代码中任何潜在的优化和修复,但即使在那之后问题仍然存在,更令人困惑的是,在请求时根本没有连接到 mysql 服务器。
我的另一个想法是问题在于我将 dbContext 注入控制器,所以我尝试将一个新实例直接放入函数中,但问题仍然完全相同。
所以我开始感到有点绝望,但后来我尝试更改与 dbContext 初始化相关的最后一件事,这是一个如何设置 dbContext DI 的示例。
services.AddScoped(x =>
{
//get connection string
var connectionString = Configuration.GetConnectionString("DefaultConnection");
//return new db context
return new Customers.DAL.PortalDBContext(connectionString);
});
我删除了 GetConnectionString 函数并对连接字符串进行硬编码,神奇地一切都开始正常工作。所以我想我的问题是是否有人可以解释为什么会发生这种情况。
谢谢!
解决方案
推荐阅读
- angular - 无法在 Angular 组件中模拟错误响应?
- objective-c - 在 NSOpenPanel/NSSavePanel 中显示 Mac 设备
- php - 元素没有以递归方式动态添加到数组中
- java - Spring Security - 需要添加自定义cookies
- php - VBA Excel、PHP MySQL - 数据循环、转置、范围、列表视图、数组
- javascript - 无法在 chrome 中加载音频文件
- c# - 加载不同版本的同一个dll,依赖也不同?
- c++ - Compiling a C++ program from cmd using TCC in turbo c++
- python - pymysql execute() - 返回值不等于受影响的行数
- javascript - 用于重定向到新页面的 JavaScript 动画按钮