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

基于node-mssql的Socket.IO应用SQL Server连接耗尽排查求助

Node.js + node-mssql 高并发写入超时问题求助

核心问题

运行基于Socket.IO的Node.js应用,Socket.IO接收的数据通过node-mssql写入SQL Server。当并发Socket.IO连接达到300时,数据库查询出现瓶颈,触发无明确原因的超时错误:

Error: operation timed out for an unknown reason
    at C:\Users\jeanm\WebstormProjects\TikTokResearchNode\node_modules\tarn\dist\PendingOperation.js:17:27
    at runNextTicks (node:internal/process/task_queues:61:5)
    at listOnTimeout (node:internal/timers:528:9)
    at processTimers (node:internal/timers:502:7)

所用查询

项目使用三类INSERT查询:

  • 两个固定逻辑的INSERT语句(涉及用户、视频关联数据写入)
  • 一个动态生成INSERT语句的工具方法,支持不同表和字段的写入:
static #build_query(table_name, keys = [], return_id = false) {
    return `
        INSERT INTO
            "${table_name}" (${keys.join(', ')})
        ${return_id ? 'OUTPUT INSERTED.id' : ''}
        VALUES
            (${"?".repeat(keys.length).split("").join(", ")}) 
    `
}

数据库设计

采用多表关联结构,包含用户表、视频表、统计数据表等,表间存在外键关联关系。

已尝试操作

原连接池最大连接数为10,按每秒约1500次查询的需求调整了连接池配置,但问题未解决:

{
    connectionString: 'Driver=ODBC Driver 17 for SQL Server;Server=localhost;Database=ResearchTest;Trusted_Connection=yes;',
    driver: 'msnodesqlv8',
    pool: {
        max: 16384,
        min: 256,
        idleTimeoutMillis: 30000
    }
}

调试结果

监控连接池状态发现:

  • 前30秒内,空闲连接数稳定在5-10个
  • 30秒后,空闲连接数短时间内激增

推测是连接未正确归还至连接池,导致node-mssql持续创建新连接但无法复用,最终触发超时。

猜测方向

由于接触MSSQL仅几周,经验有限,目前猜测可能的原因:

  • 表锁阻塞导致查询堆积,连接无法正常释放
  • 高开销的INSERT查询占用过多连接资源,耗尽可用连接

求助问题

  1. 当前是否是表锁异常导致的问题?如何诊断和修复?
  2. 如果是其他问题,该从哪些方向排查?
  3. 面对数千并发查询的场景,如何有效定位故障点?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 07:13:15