老鹰506
(Ti D Ber Uhzt Tfx J)
1
【TiDB 使用环境】生产环境
【TiDB 版本】7.5.3
【操作系统】
【部署方式】云上部署(腾讯云)
tikv节点型号 标准型SA5 | SA5.2XLARGE16 8C16G,外加1000GiB 增强型SSD云硬盘
【集群数据量】10TB
【集群节点数】16个TIKV , 6个TiDB
【问题复现路径】
【遇到的问题:问题现象及影响】
【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
【复制黏贴 ERROR 报错的日志】
【其他附件:截图/日志/监控】
从数据库中看到 storage.block-cache.capacity 和 memory-usage-limit 两个参数的默认符合官网说明的
我是8C16G的tikv节点,所以这里 memory-usage-limit 是12G, block-cache是7.4G 是否预期的
但是Zabbix监控tikv的内存使用都已经超过90%,大多数已经都 95%左右了
然后通过TiDB的监控发现 除了新增的两个节点是12G一下,其余都超过12G,高的已经13G
通过主机top发现,新增节点 tikv的内存在75% 已经,旧的 tikv的内存用都已经83%
然后拿昨天这个旧的节点在 dashboard中做了60s的heap结果如下
看到内存使用也才12G左右, 如果按照top的结果83%的话,tikv的内存已经 13.28GB才对
亲们,帮忙分析下内存超过 75%的原因是什么
storage.block-cache.capacity再调小点,调整成5G看下,总内存16G,有点小了。
老鹰506
(Ti D Ber Uhzt Tfx J)
4
这个可以调小,但是 tikv的内存上限不是不能超过 memory-usage-limit配置的值么?
tikv节点是8C16G,memory-usage-limit 和 storage.block-cache.capacity 都采用默认值, limit是12G,capacity 是7.2G。 另外capacity的7.2G 是包含在limit的 12G内, 所以为啥会超limit限制呢?
理论上不建议显示设置memory-usage-limit,
只需要设置storage.block-cache.capacity即可,
memory-usage-limit = storage.block-cache.capacity*5/3
storage.block-cache.capacity是tikv的共享缓存大小
memory-usage-limit实际应包括storage.block-cache.capacity之外,还需要支持tikv组件占用的内存,tikv内存使用上限应以memory-usage-limit为准
老鹰506
(Ti D Ber Uhzt Tfx J)
7
没有显示设置 memory-usage-limit 和 storage.block-cache.capacity ;
目前调小 storage.block-cache.capacity 之后确实内存有所释放;
但是对于 memory-usage-limit = storage.block-cache.capacity*5/3 还是存在疑问的。
默认limit是12G, capacity是7.2G ,刚好是满足这个等式的。
但是目前调整capacity为6G之后,按照找个等式 limit应该是10G 。但是limit 没有修改还是12G,如果按照10G作为limit的话,还是出现了“超limit限额”的问题,比如下面这个节点 从12.1G到现在11.2G ,11.2G也是超过10G的
老鹰506
(Ti D Ber Uhzt Tfx J)
8
所以感觉核心是 storage.block-cache.capacity 和 memory-usage-limit的关系,或者是 storage.block-cache.capacity 在 memory-usage-limit 中占比多少合适的问题
老鹰506
(Ti D Ber Uhzt Tfx J)
9
嗯,刚开始规划的是时候是个非重点集群,结果新业务占用这个集群,倒是tikv节点数过多,接下来计划单节点升级配置,然后减少节点数
storage.block-cache.capacity设置了,memory-usage-limit 根本不用设置,你的内存再大也超不过storage.block-cache.capacity的2.25倍