You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Azure SQL Server预登录握手超时错误求助(Error:121)

解决Azure SQL Server预登录握手超时(Error 121)的针对性方案

我之前帮不少开发者排查过Azure SQL Server这类间歇性的连接问题,结合你提到的「IP已加入防火墙但偶尔能连」的情况,给你几个针对性的排查和解决方向:

1. 排查本地网络与Azure区域的连接稳定性

这类超时问题很多时候和网络链路的波动有关:

  • 打开命令提示符,运行 tracert <你的Azure SQL服务器名>.database.windows.net 或者 pathping 命令,跟踪数据包到Azure服务器的路由,看看是否存在丢包率高、延迟突增的节点。如果是跨区域连接,考虑切换到更近的Azure区域,或者联系你的ISP排查链路问题。
  • 临时关闭本地的VPN、代理软件或者第三方防火墙,排除这些工具拦截TCP连接的可能性。

2. 检查Azure SQL Server的资源负载

如果服务器资源被占满,也会导致无法及时响应连接请求:

  • 登录Azure门户,找到你的SQL Server实例,进入性能面板查看DTU/CPU、内存、IO的使用率。如果经常达到90%以上的阈值,就需要调整:
    • 升级服务层级(比如从Basic版升级到Standard版),提升服务器的资源配额;
    • 运行 SELECT * FROM sys.dm_exec_sessions 查询当前连接数,清理闲置的连接;
    • 优化慢查询,减少不必要的资源消耗(可以用Azure门户的查询性能洞察工具分析)。

3. 调整本地TCP连接参数

错误提示里的「信号量超时」和TCP层的重试、超时设置有关,你可以修改本地系统的注册表参数来优化:

  • 打开注册表编辑器,定位到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
  • 新建或修改以下DWORD值:
    • TcpMaxDataRetransmissions:设置为5(默认是3,增加TCP数据包的重试次数)
    • TcpTimedWaitDelay:设置为30(减少TIME_WAIT状态的连接占用时间,释放端口资源)
  • 修改完成后重启电脑生效。

4. 更新SQL Server驱动版本

旧版本的驱动可能存在和Azure SQL的兼容性问题,导致间歇性握手失败:

  • 如果用SSMS,确保安装的是最新版的SSMS(它会自带最新的SQL Server驱动);
  • 如果用Power BI,在选项和设置里找到SQL Server驱动的设置,检查并更新到最新版本,也可以直接下载安装官方最新的ODBC Driver for SQL Server。

5. 重新检查Azure SQL防火墙规则细节

虽然你已经添加了IP,但有些细节容易被忽略:

  • 确认你的本地IP是静态IP还是动态IP?如果是动态分配的,IP可能会偶尔变化导致被防火墙拦截,建议设置一个IP范围,或者在安全策略允许的情况下,启用「允许Azure服务和资源访问此服务器」选项;
  • 检查防火墙规则的优先级,确保没有其他拒绝规则覆盖了你的IP允许规则;
  • 可以临时移除并重新添加你的IP规则,或者临时关闭所有规则(仅测试用),确认是否是防火墙规则的问题。

6. 优化连接字符串参数

在Power BI或SSMS的连接字符串里添加以下参数,提升连接稳定性:

  • Connect Timeout=60:把连接超时时间从默认的15秒延长到60秒,给握手过程更多时间;
  • Encrypt=True:强制启用加密连接,避免握手过程中的兼容性问题;
  • TrustServerCertificate=False:确保验证Azure SQL的官方证书,不要跳过证书检查(Azure SQL的证书是受信任的,不会有问题)。

如果以上方法都试过还是无法解决,可以在Azure门户里开启SQL Server的诊断设置,收集连接日志,根据日志里的具体错误信息进一步排查。


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

火山引擎 最新活动