Navicat 不支持直接配置 SQL Server 的 network packet size,该参数须由服务端通过 sp_configure 设置,默认 4096 字节;Connection Timeout 控制建连耗时,Query Timeout 控制单条 SQL 执行上限,二者独立生效且需协同服务端 remote query timeout 等参数调整。

Navicat 本身不提供直接配置 SQL Server network packet size 的界面,这个参数必须由 SQL Server 服务端控制;而连接超时(Connection Timeout)和查询超时(Query Timeout)则需在 Navicat 连接设置中分层调整——但多数人只改了“连接超时”,却漏掉真正影响大查询的 Query Timeout 和服务端配套参数。
Navicat 的 Connection Timeout 和 Query Timeout 怎么设
这两个超时是独立生效的,且作用阶段完全不同:
-
Connection Timeout:只管“建连”那一下,即从 Navicat 发出 TCP SYN 到收到 SQL Server 的 ACK+SYN 响应之间的时间上限。默认值通常是 15–30 秒,对高延迟网络或云数据库够用,但若服务器启用了强制加密或中间有代理,建议设为45。 -
Query Timeout:控制单条 SQL 执行(如SELECT * FROM huge_table)的最大等待时长。导出大表失败报Timeout expired或卡在“正在导出…”时,90% 是它没调——必须进连接编辑页 → 「高级」选项卡 → 找到Query Timeout(不是Socket Timeout,后者是 MySQL 专用字段),填入预期执行时间的 1.5 倍,比如预估 200 秒,就填300。 - 注意:SQL Server 驱动(如 Microsoft ODBC Driver for SQL Server)会把
Query Timeout映射为底层SQL_ATTR_QUERY_TIMEOUT,但若服务端remote query timeout设得更小(默认 600 秒),仍以服务端为准。
SQL Server 的 network packet size 能不能/要不要在 Navicat 里改
不能,也不该。Navicat 没有暴露这个参数的配置入口,因为 network packet size 是 SQL Server 实例级配置项,客户端最多只能“请求”一个值(通过连接字符串加 Packet Size=8192),但最终是否采纳由服务端决定。
- 默认值
4096字节对绝大多数场景已足够;只有当你的表含大量varchar(max)、varbinary(max)或频繁做 BULK INSERT 时,才考虑调高(如8192或16384)。 - 调高后可能引发兼容性问题:加密连接下最大仅支持
16383字节;若启用 MARS,实际可用上限会再减 16 字节;某些旧版驱动(如 SQL Server Native Client)遇到非默认包大小会静默降级或报错Native Error: 233。 - 真要改,请用 T-SQL 在 SQL Server 中执行:
EXEC sp_configure 'show advanced options', 1; RECONFIGURE;<br>EXEC sp_configure 'network packet size', 8192; RECONFIGURE;
无需重启服务,但所有新连接才会生效。
为什么调了 Query Timeout 还是断连?关键遗漏点
因为 Navicat 在导出过程中存在多个“无查询空闲期”:拼装 INSERT 语句、压缩数据、校验主键、写文件缓冲……这些阶段不发 SQL,但连接仍需维持。此时以下两项比 Query Timeout 更致命:
- Navicat 自身的「自动断开空闲连接」选项(部分版本叫
Disconnect when idle)默认开启,一旦检测到数秒无交互就主动发COM_QUIT——这和 SQL Server 的wait_timeout无关,纯客户端行为。务必在连接编辑页 → 「高级」→ 取消勾选此项。 - SQL Server 服务端的
remote login timeout(默认 20 秒)和user connections限制未检查。若并发连接数打满,新请求会被排队甚至丢弃,现象就是 Navicat 卡住后超时,而非明确报错。 - 若走 SSH 隧道,SSH 层的
ServerAliveInterval必须 ≤ SQL Server 的wait_timeout / 2(查法:SELECT @@wait_timeout),否则保活包发不到数据库,TCP 连接被中间设备回收。
真正稳定的导出配置,从来不是单点调参,而是 Navicat 客户端、SQL Server 服务端、网络链路三层 timeout 值形成梯度:客户端 Query Timeout remote query timeout wait_timeout。漏掉任意一环,都可能在导出进行到 97% 时突然断开。


















