为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
- 【TiDB 版本】:
Release Version: v4.0.2\
Edition: Community
Git Commit Hash: 328b6d0a955c4668cf3188d02a6df42e16eaab4e
Git Branch: heads/refs/tags/v4.0.2
UTC Build Time: 2020-07-01 08:19:48
GoVersion: go1.13
Race Enabled: false
TiKV Min Version: v3.0.0-60965b006877ca7234adaced7890d7b029ed1306
Check Table Before Drop: false
- 【问题描述】:
TiKV 使用默认配置,理论上内存占用是 45% block-cache内存 + 2.5G write-buffer,但在导数时经常达到80+%,是否有其他大的内存占用,和相关参数调整
若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出打印结果,请务必全选并复制粘贴上传。
1 个赞
1、使用top 显示是80%+,即64G占用了50多G;
2、使用loader 工具;
这道题我不会
(Lizhengyang@PingCAP)
4
top 中的 80% 是包含了操作系统本身的缓存,这个是正常情况,如果想减少 loader 导数时的内存占用情况可以考虑降低导入时的线程数(由参数 pool-size 控制)。
导入线程数以及调得比较低(6个),能否像Java xmx 一样限制最大内存使用?
现在出现的问题是内存占用过高导致 kswapd0 过高,CPU负载太大系统卡顿
这道题我不会
(Lizhengyang@PingCAP)
6
loader 不支持配置最大内存使用,目前 loader 已经不再维护了,其功能已经完全被 tidb-lightning 的 tidb benckend 模式替代, 如果有大数据量导入的需求建议使用 tidb-lightning 工具。
能否支持限制tikv 的最大内存,目前的设置
45% block-cache内存 + 2.5G write-buffer
不能限制tikv 内存,导致服务器负载太大影响使用
这道题我不会
(Lizhengyang@PingCAP)
8
可以通过参数 storage.block-cache.capacity 来设置 tikv 使用的 block_cache 大小:
https://docs.pingcap.com/zh/tidb/stable/tikv-configuration-file
block_cache 看监控最大是只有30G(45%左右)是符合预期的,但是top上tikv进程内存占用50G+,剩下的内存是哪块使用的,能否限制
这道题我不会
(Lizhengyang@PingCAP)
10
除了以上列出的 block-cache
以及 write-buffer
会占用系统内存外,还有下面两部分会占内存,这个不太好限制:
- 需预留一些内存作为系统的 page cache
- TiKV 在处理大的查询的时候(例如
select * from ...
)会读取数据然后在内存中生成对应的数据结构返回给 TiDB,这个过程中 TiKV 会占用一部分内存
另外如果不是单机多实例部署,一般不需要调整这些参数,设置的太小会影响集群的查询效率。
这两部分描述有点模糊,确定下如果占用几十G (loader导入几十G数据时)也是可能的吗
或者什么方法可以确认是哪个模块占用了这些内存
这道题我不会
(Lizhengyang@PingCAP)
12
TiKV 除了自身的 block cache 和 write buffer 会占用内存外,也是需要使用操作系统缓存的。如果前端有很多大查询 SQL,且部分查询的数据在内存中不存在,那需要将 KV 底层 SST 文件中的数据先读取到操作系统 page cache ,然后再加载到 block cache 中, 这时就可能导致总体内存使用率很高了。
意思是page cache 可能占用数十G内存吗
还有一个问题,这个能否配置page cache使用限制,我们是导数时才发生,平常读数据量不算很大
这道题我不会
(Lizhengyang@PingCAP)
14
这个是有可能的,目前这一块不是很好限制,这个是操作系统级别的。
Top 显示的进程使用大小应该不包括系统的 buff/cache 吧?