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

容器化Azure应用服务通过Hybrid Connection无法关闭MSSQL连接

Node-MSSQL连接池在Azure Hybrid Connection环境下无法正常关闭连接

环境差异现象

  • 本地环境:使用node-mssql连接池,连接可正常复用,且能在配置的超时时间(如30秒)内自动关闭
  • 生产环境(Azure App Service容器 + Azure Hybrid Connection + 本地SQL Server):连接可复用,但无法自动关闭;超过超时时间后新请求会建立新连接,旧连接持续残留
  • 例外场景:本地通过VPN直接连接生产数据库时,连接池功能完全正常

代码实现

return sql.connect(config).then((pool) => {
  return pool.query('select * from location')
});

日志信息

mssql:base pool(1): created +0ms
mssql:base pool(1): connecting +2ms
mssql:tedi pool(1): connection #1 created +0ms
mssql:tedi connection(1): establishing +0ms
mssql:tedi connection(1): established +42ms
mssql:base pool(1): connected +48ms
mssql:tedi connection(1): destroying +1ms
mssql:tedi connection(1): destroyed +2ms
mssql:base request(1): created +0ms
mssql:tedi pool(1): connection #2 created +7ms
mssql:tedi connection(2): establishing +1ms
mssql:tedi connection(2): established +19ms
mssql:tedi connection(2): borrowed to request #1 +0ms
mssql:tedi request(1): query select * from location +0ms
mssql:base connection(2): released +45ms
mssql:tedi request(1): completed +7ms
mssql:base pool(1): already connected, executing connect callback immediately +7s
mssql:base request(2): created +7s
mssql:tedi connection(2): borrowed to request #2 +7s
mssql:tedi request(2): query select * from location +0ms
mssql:base connection(2): released +13ms
mssql:tedi request(2): completed +7ms
mssql:tedi connection(2): destroying +37s
mssql:tedi connection(2): destroyed +1ms

排查结论

  • 日志显示node-mssql已在30秒超时后执行socket销毁操作,但本地SQL Server端的连接并未实际关闭
  • 同环境下的.NET Core非容器化应用,通过Azure Hybrid Connection访问数据库时无休眠连接残留
  • 深入分析node-mssql代码后发现:客户端在查询执行完成后会主动销毁socket,但Azure Hybrid Connection Manager未将关闭指令同步到本地数据库端,导致连接持续残留

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 20:42:58