h5n1
(H5n1)
1
为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:
【TiDB 版本】4.0.12
【问题描述】
- 7.2.3
TxnLockNotFound 。事务提交太慢,过了 TTL(小事务默认 3s)时间之后被其他事务回滚了,该事务会自动重试,通常情况下对业务无感知。
100多个会话并行load data,系统压力大,导致出现TxnLockNotFound,检查startts-committs间隔为一分钟,没超10分钟TTL限制。有以下几个问题:
- load data时如何设置事务,使用的是悲观锁还是乐观锁?
- 这里的小事务是怎么定义的,以什么样的值来判断
- 如何修改小事务、小事务TTL的限制值? 谢谢
若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出的打印结果,请务必全选并复制粘贴上传。
spc_monkey
(carry@pingcap.com)
2
这里的 1、2、3 其实官网都有相关解释的,建议咱们官网直接看比较好,至于小事物,不是一个具体的 数量标准,就是对比来说而已
spc_monkey
(carry@pingcap.com)
4
不好意思,忘记了,上面说的 3s 是写死的,ttl 相关的配置,是 tidb的配置参数: max-txn-ttl控制,(但这里是指最大的的时间,不是说所有的 事物的 锁,上来就是 这个参数的值),至于你说的没超过 10分钟就出现这个报错,是因为在内存中有区分事物的大小写(具体数值我还不确定),小的事物,不是10分钟。
1、无法设置,tidb 中的那些事物使用乐观/悲观锁,直接官网搜这2个关键字即可
2和3 目前没有地方来描述这个,也修改不了,这些不同版本之间,相关数值改动较大,牵扯的细节较多,后期看看能不能整理一下吧
h5n1
(H5n1)
5
感谢! 关于第一条 出来上面的截图外还是没找到比较明确的解释。
spc_monkey
(carry@pingcap.com)
6
没太理解那个地方不清晰,或者你的需求是啥,我这边没有理解到
h5n1
(H5n1)
7
4.0版本前是20000行提交一次, 4.0后是一个事务内提交所有行,这里的一个事务是多大?load一亿多行也没有出现transaction to哦 large的问题 说明不是整个文件是一个事务,那这个事务的粒度是多少? 另外对于load data这种操作是开启乐观事务还是使用默认的悲观事务?谢谢
spc_monkey
(carry@pingcap.com)
8
1、事物大小就是你截图参数:txn-total-size-limit 参数控制(最大该参数可以改成10G)
spc_monkey
(carry@pingcap.com)
9
2、load 一亿行的问题:事物的大小不是,说行数,即 一亿行,但每行很小,哪也可能不报错
h5n1
(H5n1)
11
根据txn-total-size-limit 参数限制自动调整每个事务处理的行数,是这意思吧
xfworld
(魔幻之翼)
12
4.0 以后是可以大事务的,但是事务中描述的限制还是存在的(比如 键值对的大小),然后大事务中所包含的内存的使用量会增加,基数是数据量的6倍,我忘记在哪看到的文档了;
然后自动限制这种判断肯定是没有的,这个必须是我们自己主动来控制的;
希望能帮到你 
spc_monkey
(carry@pingcap.com)
14
txn-total-size-limit 这个是硬限制,不是自动调整,就是如果一个事物,超过这个值就会报错(但这个值是指事物的大小,而不是具体的行数等
spc_monkey
(carry@pingcap.com)
15
你是在疑问:一个表很大,明显超过 这个值,还能导入成功的原因?load 文件中,不是就一个 insert 的,里面是有很多 insert。语句的
h5n1
(H5n1)
16
对,不可能一个文本就一个insert。我的意思是 官方文档描述早期版本20000行提交一次(这应该是一个事务)。 新版本默认在一个事务中提交所有行。 load data是一个个的批量insert, 新版里 一个事务是多大,还是按照以前版本20000行是一个事务,还是说根据txn-total-size-limit的限制值来内部调整insert多少行? 不知道我说的能不能理解。 就是 官方文档里 为什么强调 新版本里一个事务提交所有行?
spc_monkey
(carry@pingcap.com)
17
哦,以前tidb 不支持太大的事物,是基于性能、稳定性考虑,所以有些工具的使用、或大一点的事物,会在内部,进行拆分成小事物的方式,但高版本放宽了 对事物大小的限制,所以只需要这个参数:txn-total-size-limit 就ok,不需要关心:batch 这个参数了
h5n1
(H5n1)
18
what’s new in 5.0的描述,load时事务大小这个问题搞明白了,谢谢