TiFlash 的表游标遍历异常

为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:
【 TiDB 使用环境】
tidb/tikv/tiflash,版本5.2

【概述】 场景 + 问题概述
两张TIFLASH的表进行关联,使用JDBC游标遍历,遍历30万左右数据,游标自动断开
按照官网最佳实践,代码设置了游标参数
错误信息:
Application was streaming results when the connection failed. Consider raising value of ‘net_write_timeout’ on the server.

SELECT a.* FROM JHDL4T.JHPDL_JH_FEE_BL_DTL AS a JOIN JHDL4T.JHPDL_JH_FEE_BILL AS b ON a.FEE_BILL_SN = b.FEE_BILL_SN

A表和B表各有3亿左右数据,都有2个TIFLASH副本,试验两种引擎:
强制使用TIFLASH游标遍历会报错:
SELECT /*+ READ_FROM_STORAGE(TIFLASH[a,b]) / a. FROM JHDL4T.JHPDL_JH_FEE_BL_DTL AS a JOIN JHDL4T.JHPDL_JH_FEE_BILL AS b ON a.FEE_BILL_SN = b.FEE_BILL_SN

强制使用TIKV游标遍历正常
SELECT /*+ READ_FROM_STORAGE(TIKV[a,b]) / a. FROM JHDL4T.JHPDL_JH_FEE_BL_DTL AS a JOIN JHDL4T.JHPDL_JH_FEE_BILL AS b ON a.FEE_BILL_SN = b.FEE_BILL_SN

【应用框架及开发适配业务逻辑】

【背景】 做过哪些操作

【现象】 业务和数据库现象

【问题】 当前遇到的问题

【业务影响】

【TiDB 版本】
TIDB 5.2

【附件】 相关日志及监控(https://metricstool.pingcap.com/)


若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出的打印结果,请务必全选并复制粘贴上传。

这是超时了么?设置net_write_timeout参数后,还有这个问题么?

设置了net_write_timeout和net_read_timeout超时300秒,还是会有这个问题

再设置大一点呢

设置到1000还是一样,观察到没有到300秒就已经断开了报错了,用TIKV游标遍历就没有问题

1.请问下该集群是从低版本升级上来的还是部署时版本就是 v5.2.0 吗?
2.可以尝试设置 FetchSizeInteger.MIN_VALUE 让客户端不缓存,参考下:https://docs.pingcap.com/zh/tidb/stable/java-app-best-practices#使用-streamingresult-流式获取执行结果

1.该集群是从5.1升级到 v5.2.0的,不知道有无影响
2.Jdbc游标遍历已经设置了 FetchSize 为 Integer.MIN_VALUE,就是用同样的sql预计,选择TIKV引擎没有问题,TIFLASH引擎会有这种问题
代码如下:
pst = conn.prepareStatement(sql, java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.CONCUR_READ_ONLY);
pst.setFetchSize(Integer.MIN_VALUE);
rs = pst.executeQuery(sql);

请问下在升级之前( v5.1 版本)有发现这个现象吗?

5.1版本的时候还没有用TIFLASH,所以没有发现问题

如果这条 SQL 不指定 hint ,优化器是选择走 tikv 还是 tiflash ?

- 如果你的问题已解决:
  - 如果你自己排查解决了,请附上你的解决方案,对自己的方案标记【对我有用】。
  - 如果别人帮助你解决了问题,那么请选择【最有价值】的回复,标记为【对我有用】,对帮助你的人,也是一种嘉奖和赞赏。
- 被标记了【对我有用】的问题,才能被搜索到,这样子也能帮助他人更高效地找到答案。标记了【对我有用】还能获得 5 积分,5 经验值。
- 如果你的问题还没有解决,请继续追问及反馈你遇到的问题。

如果这条 SQL 不指定 hint ,优化器是选择走 tiflash 的

问题没有解决,请问有技术指导一下吗?项目用到,急呀


麻烦这里提交一下紧急事故处理。

  • 如果你需要获得快速 “加急”处理问题的权限,也可以到导航栏:我的团队-全部主题-加急,直接加急你的问题
  • 目前有2个通道可以让你更快速得到问题的处理~

麻烦提供下分别走 tikv 和 tiflash 的执行计划,以及 tidb.log 日志信息。