tidb oom情况分析

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

https://docs.pingcap.com/zh/tidb/stable/troubleshoot-tidb-oom#tidb-oom-故障排查


为什么会有2-3倍放大,有大佬解答下吗
【资源配置】
【附件:截图/日志/监控】

如果是单节点就很好理解,事务有多大,内存就有多大的占用,可能有一些优化的方式,会采用磁盘做了临时存储,用内存来进行局部回放进行处理。

但是分布式的,就存在多个节点,每个节点上都会分派一部分数据,然后数据又不是严格按照最佳的结构来的匹配,肯定会有放大的情况

参考官方的解释:

别人画的一张草图,借用一下

主要来表达二阶段提交中需要的多次协调,每次协调都需要保存状态,因为要保证一致性。如果提交成功,就一起写入。如果提交失败,就完全撤回。这个协调的过程,就需要内存来存放很多信息了

还是不太理解,您说的分布式存在多个节点,感觉这里的内存占用放大应该在kv层,那反应在tidb-server层会放大多少呢,写入场景下,会做一次do read,所以会有一次读出来的数据的内存占用,
二阶段提交前会有写内存的的一次占用,还有就是索引的写入(包含索引的do read)
编码key value的占用
这么理解对吗,do read那里是会读取行记录吗

打个比方,update 的时候,就会需要先读取整行的记录,这个时候整行的记录就需要放到内存
更新未提交,则会修改内存的数据,提交完成则数据会在 tikv持久化

那官网文档这里说的内存放大,其实是包含了tidb和tikv的对吗

当然,其实就是一份数据