数据库-GaussDB-基础篇分布式框架关于JDBC连接
说明:本文只分析 JVM(JDBC客户端) ↔ CN 的交互流程;CN到DN属于数据库内部路由逻辑,本文不深入展开

1、集群连接基础说明
GaussDB商业分布式集群,JDBC连接串开启autoBalance,配置多个对等CN节点。 客户端仅与CN建立TCP连接,CN之间对等;客户端无需感知DN主备,DN路由工作完全由CN内部完成。
整个连接生命周期分为3个阶段:建连前、建连中、建连完成业务运行阶段。 不同阶段生效的超时参数完全独立;同时存在两套互不干扰的计时体系:数据库会话层超时、操作系统内核TCP保活探测。
2、建连阶段参数(getConnection 获取连接阶段)
重要:下面3个参数,拿到Connection对象之后全部失效,不再起作用。
loginTimeout:getConnection全局总超时。并行向多个CN发起建连,总时间受该参数管控,一旦超限,直接放弃剩余CN的建连尝试。
connectTimeout:单CN TCP三次握手超时,仅管控SYN/SYN‑ACK/ACK握手阶段。
socketTimeoutInConnecting:TCP握手成功后,账号认证、会话初始化报文交互阶段的超时。
3、业务运行阶段参数(连接成功后,长事务运行阶段)
连接建立成功后,建连阶段参数失效,切换为业务相关超时参数。
3.1 数据库会话层超时(长事务排查核心)
session_timeout:会话整体超时。客户端每发送一条SQL报文,计时器就重置;事务内持续循环执行DML,可不断延后session_timeout触发时间。
idle_in_transaction_session_timeout:事务内空闲超时。会话一旦进入idle in transaction状态就开始持续计时;事务内部执行SQL不能重置此计时器。
socketTimeout:业务SQL网络IO读取超时,控制等待CN返回数据包的最大等待时长。
statementTimeout:单条SQL执行超时,控制单条SQL在数据库侧最大执行时长。
3.2 TCP内核保活探测
CN侧主动探测:CN节点8000端口,每60s主动向客户端发送TCP Keepalive探测包,检测客户端链路存活;链路正常时JVM回复ACK。
Windows客户端兜底探测:Windows系统默认2小时TCP Keepalive兜底机制。当链路长时间静默、CN侧保活报文丢失,Windows内核触发兜底探测;若CN端socket已经关闭,探测包收到RST报文,socket直接释放。
4、链路关闭两种场景
优雅关闭:应用执行commit / rollback,调用connection.close(),走TCP四次挥手,正常释放连接,数据库会话销毁。
异常断开:保活探测收到RST报文,socket直接销毁,数据库会话被清理。

浙公网安备 33010602011771号