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

.NET 6连接SQL Server预登录握手超时问题求助

排查.NET 6应用SQL Server预登录握手超时问题

问题背景

同一Windows 2019应用服务器上,.NET Framework 4.8应用连接本地SQL Server 2019全程正常,但.NET 6应用(基于Microsoft.Data.SqlClient)频繁间歇性出现预登录握手超时错误,错误信息如下:

Connection Timeout Expired. The timeout period elapsed while attempting to consume the pre-login handshake acknowledgement. This could be because the pre-login handshake failed or the server was unable to respond back in time. The duration spent while attempting to connect to this server was - [Pre-Login] initialization=21001; handshake=0;

问题特征:正常运行数小时后进入报错状态,持续数小时后自行恢复;已尝试调整连接字符串加密配置(encrypt=no;、TrustServerCertificate=yes;)、更换Microsoft.Data.SqlClient版本(6.0.5/6.0.11/7.x)、改用System.Data.SqlClient、重启IIS/服务器、切换连接字符串IP/服务器名等操作,均未解决。


一、SQL Server端排查

  • 检查TCP/IP队列与端口配置
    打开SQL Server配置管理器→SQL Server网络配置→MSSQLSERVER协议→TCP/IP→属性:
    • 确认TCP端口或TCP动态端口配置正确,无端口冲突;
    • 调整Keep Alive(建议设为30000毫秒)和Keep Alive Interval(1000毫秒);
    • 查看SQL Server错误日志(SSMS→服务器→管理→SQL Server日志),排查是否存在连接队列满、拒绝新连接的记录。
  • 验证连接与线程资源限制
    执行以下SQL命令查看配置:
    sp_configure 'show advanced options', 1; RECONFIGURE; sp_configure;
    
    检查max worker threads和user connections配置,确保未达上限;同时监控SQL Server等待类型,重点关注PRELOGIN相关等待是否异常累积。
  • 实时监控服务器资源
    问题发作时,用任务管理器或Performance Monitor监控:
    • CPU、内存、磁盘IO、网络带宽使用率;
    • SQL Server进程的资源占用情况;
    • 通过netstat -ano统计TIME_WAIT/ESTABLISHED状态的TCP连接数,排查端口耗尽。

二、.NET 6应用端排查

  • 调整连接超时参数
    在连接字符串中显式设置Connect Timeout=60(延长超时时间),同时确保所有SqlConnection都通过using语句正确释放。
  • 统一连接池配置
    连接字符串中添加以下参数,对齐.NET Framework的默认连接池行为:
    Max Pool Size=100; Min Pool Size=0; Pooling=true
    
    通过性能计数器(.NET Data Provider for SQL Server→Number of Active Connections)监控连接池使用状态。
  • 禁用Nagle算法与透明IP解析
    在应用启动代码中添加:
    ServicePointManager.UseNagleAlgorithm = false;
    
    或在连接字符串中添加TransparentNetworkIPResolution=false,避免TCP分组延迟导致握手超时。
  • 排查并发连接行为
    检查代码是否存在短时间内创建大量数据库连接、未正确释放连接的情况,确保连接资源合理回收。

三、系统网络层面排查

  • 调整TCP/IP系统参数
    修改Windows注册表(需重启服务器生效):
    • 将HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\TcpTimedWaitDelay设为30,缩短TIME_WAIT端口释放时间;
    • 将MaxUserPort设为65534,扩大可用端口范围。
  • 排查安全与监控工具
    临时禁用服务器上的第三方防火墙、杀毒软件、网络监控工具,观察问题是否消失,确认是否存在数据包拦截或延迟。
  • 更新网卡驱动
    下载并安装服务器网卡的最新官方驱动,排除硬件驱动导致的网络异常。

内容的提问来源于stack exchange,提问作者Zubaer Naseem

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 15:39:53