.NET 6 EF Core API高并发场景连接SQL Server超时问题排查
.NET API高并发下SQL Server连接超时问题说明
基础情况
基于C#开发的.NET API接口,每次调用会连接数据库执行对应业务逻辑,常规负载下运行稳定。当请求量突增达到每分钟1000+时,API尝试与SQL Server建立连接会抛出超时异常。目前已按规范实现数据库连接开闭逻辑,因接触C#开发时间较短,无法定位是否存在编码或配置问题,现同步项目架构、依赖版本、代码片段,寻求可提升系统吞吐量的优化方案,重点解决高并发场景下重复连接引发的超时问题。
项目架构
采用三层依赖注入架构:
- Controller层:注入Service依赖
- Service层:注入Repository依赖
- Repository层:注入DBContext依赖,基于Entity Framework Core实现数据访问
数据库相关NuGet包版本
- Microsoft.EntityFrameworkCore v6.0.1
- Microsoft.EntityFrameworkCore.SqlServer v6.0.1
- Microsoft.EntityFrameworkCore.Tools v6.0.1
- Microsoft.NETCore.Platforms v6.0.1
已尝试的优化方案(均未解决问题)
- 调整连接字符串参数,提升允许的最大连接数
- 通过
DbContextOptionsBuilder<MyDBContext>()为每个请求单独创建DBContext实例 - 无意义情绪宣泄(无实际优化效果)
现有代码片段
Startup.cs 服务注册逻辑
public void ConfigureServices(IServiceCollection services) { ... // 注册上下文池 services.AddDbContextPool<MyDBContext>( o => o.UseSqlServer(SecretFetcher.GetConnectionString())); // 使用的连接字符串格式: // Server=<server_url>,<port>;Database=<database_name>;User Id=<username>;Password=<password>;MultipleActiveResultSets=true ... // 仓储依赖注入注册 services.AddTransient<IMyRepository, MyRepository>(); }
仓储层写入操作逻辑
public async Task Create(MyEntity entity) { // 当前创建操作无需返回结果 await MyDBContext.Set<T>().AddAsync(entity); // 持久化新记录 await MyDBContext.SaveChangesAsync(); }
高并发场景抛出的错误信息
Microsoft.Data.SqlClient.SqlException (0x80131904): 执行超时已过期。操作完成前等待时长已超出设定的超时阈值,或服务器未作出响应。
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

