You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 6 EF Core API高并发场景连接SQL Server超时问题排查

.NET API高并发下SQL Server连接超时问题说明

基础情况

基于C#开发的.NET API接口,每次调用会连接数据库执行对应业务逻辑,常规负载下运行稳定。当请求量突增达到每分钟1000+时,API尝试与SQL Server建立连接会抛出超时异常。目前已按规范实现数据库连接开闭逻辑,因接触C#开发时间较短,无法定位是否存在编码或配置问题,现同步项目架构、依赖版本、代码片段,寻求可提升系统吞吐量的优化方案,重点解决高并发场景下重复连接引发的超时问题。

项目架构

采用三层依赖注入架构:

  1. Controller层:注入Service依赖
  2. Service层:注入Repository依赖
  3. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 13:36:21