为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:
【 TiDB 使用环境】 2个 TIDB( tidb01:4000 ,tidb01:4001)
通过 HAProxy 做负载均衡 映射到 tidb01的 33060 端口
【概述】如果SQL 执行时间超过60s ,在2个TIDB中将会被重复执行
【背景】做过哪些操作
执行 insert into … select 操作
【现象】业务和数据库现象
1. 超过120s ,数据库将会断开
2. 查询ProcessList 结果如图
执行时间低于60s 时,查询
执行时间超过60s 时,查询
3.数据库表中将会出现重复记录
【业务影响】导致Java 捕捉到错误异常,后端SQL继续执行,数据重复插入
【TiDB 版本】 TIDB-5.2
【附件】
-
TiUP Cluster Display 信息
-
TiUP Cluster Edit Config 信息
-
TiDB- Overview 监控
xfworld
(魔幻之翼)
2
这里有几个问题:
- haproxy 是不是配置有问题?
- 120S,保持连接的情况,是不会断开的
- insert into 执行要跑 60s ?
- 事务重试的配置,你是否开启了?
我建议,你不通过haproxy ,直连tidb,先测试一下,是否有保持连接超过120S 断开的情况
3 个赞
undefined
(undefined)
3
我们内网也用了haproxy 我猜这应该是 java的库retry导致的.
- 如果直连tidb ,是没有问题的
- insert into select 语句,通过查询A表统计余额,将余额写入另一张表B,A表中数据较多。
- 数据量几亿行,比较大,存在很多执行时间 超过60s 的SQL,甚至几十分钟的SQL,都会有这种重复被执行的问题。
HAProxy 推荐配置应该是怎样的?可否列举主要配置项
xfworld
(魔幻之翼)
5
大的事务,对tidb 也有更高的内存要求,这个要有足够的测试才能确定
对于 Select 语句,最好在优化一下,减少查询的时长,可以有效的解决问题
haproxy 的配置信息,请通过haproxy的官网查阅相关的配置参数进行调整和校验
pepezzzz
(Pepezzzz)
6
建议直接引用 https://docs.pingcap.com/zh/tidb/v5.0/haproxy-best-practices#配置-haproxy 的配置文件,改后端 IP ,重启 haproxy 后生效。尤其是以下两个参数:
timeout client 30000s # 客户端与 HAProxy 连接后,数据传输完毕,即非活动连接的超时时间。
timeout server 30000s # 服务器端非活动连接的超时时间。
如果是 sqlyog 或者是 navicat 工具操作,会有一些自动重连重试的行为,导致数据重复。
system
(system)
关闭
7
此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。