事务内存占用

【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】5.4.1
【遇到的问题】
【复现路径】做过哪些操作出现的问题
【问题现象及影响】
看tidb in action 里面讲,

    • 事务对内存的占用可能会有 3~4 倍的放大, 10GB 大的事务可能会占用 30~40GB 的内存。

这个要怎么理解,有没有大佬解答一下

【附件】

请提供各个组件的 version 信息,如 cdc/tikv,可通过执行 cdc version/tikv-server --version 获取。

我能想到的几点

  1. 多用内存情况,select * from XXX limit 1,但 tikv 是并发返回给 tidb 的,意味着 tidb 的 receive channel 中会多接数据占用内存;
  2. 实现方式导致的,因为 tidb 使用 go 写的,不同层级算子的处理可能存在 slice 复制;
  3. 另一种是,数据从 tikv 楼上来之后,还要聚合算子的,底层不一定会提前释放,相当于接受的数据占用空间,用于计算聚合的数据结构占用的空间,以及聚合结果占用的空间等等;

首先,tidb-in-action 是 DB + 开源 爱好者 24h 之内写出来的 book,如果 100% 清晰解答这段话需要问到作者写这段话是基于哪个 case,前提条件是什么,用的算子是什么,执行计划是什么,这些搞明白了才能真的解答你的问题。(另外,他直接写这么一段话,我也有理由怀疑他写的有问题:joy:

BTW : 提问之前最好信息说全,及说出自己理解,https://book.tidb.io/session1/chapter6/big-txn-in-4.0.html ,如果回答者没读过 tidb-in-action 根本不知道引自何处,哪个位置。