LocalStream 相关等待指标偏高,如何优化大结果集 JDBC 拉取性能?

业务使用 JDBC 查询返回较大结果集,升级 TiDB 小版本后,min_local_stream、max_local_stream 等待耗时显著增加,应用端查询超时频发,直连数据库客户端执行无异常。已知是版本迭代中流式结果推送逻辑变更导致,除驱动配置外,该修改哪些 TiDB 全局或会话参数来适配流式数据拉取场景?

小版本升级后 JDBC 大结果集 min/max_local_stream 飙升,本质是服务端流式推送节奏与 JDBC 批量拉取不匹配、新代码路径下本地流队列 / 并发 / 缓冲不足;不改驱动的前提下,核心是放大 LocalStream 并发、chunk 缓冲、流水线队列、关闭流控、适配 JDBC 批量模式,把服务端 “推速” 提上来。

迁移升级建议先在小规模环境做充分的兼容性测试,特别是SQL语法、自增主键、事务隔离级别这几个方面。如果是分库分表迁移,要注意全局唯一ID的生成方式,推荐用 AUTO_RANDOM 替代自增主键。

升级后服务端推送与 JDBC 拉取节奏不匹配,调大流并发、chunk 缓冲、流水线队列,关闭流控即可优化。

版本升级后,服务端流式推送与 JDBC 拉取逻辑错位,加之流处理资源不足,引发min/max_local_stream耗时走高;无需改动驱动,只需调优流并发、数据缓冲、队列及流控参数,提速服务端数据推送即可解决。

调优参数,提升流推送速度

在jdbc的链接中加上属性:Defaultfetchsize=-214783648,类似如下

JDBC:mysql://{TiDBIP}:{PORT}/{dbname}?characterEncoding=utf8&useSSL&
useServerPrepStmts=true&\
useConfigs=maxPerformance&\
rewriteBatchedStatements=true&\
Defaultfetchsize=-214783648 #不缓存数据到客户端便于大量数据场景流式读取

此话题已在最后回复的 7 天后被自动关闭。不再允许新回复。