tikv进程内存控制问题

各位大神 ,如果想把tikv-server内存使用控制在5G,调整哪些配置能实现,都有哪些建议值,请不吝赐教。

你这是什么场景,想把tikv 的内存设置这么低。

可以通过调整block cache来一定程度控制存储层内存使用大小

机器内存比较少,存的数据不多,但是请求并发不少

这个配置了500M,但是内存还是程程往上涨

嗯,内存使用你还需要设置rocksdb的相关参数等,控制default CF、Write CF和Lock CF等内容的内存使用大小。

而且实际使用时,也会和来读取、写入的数据量等内容有关,不能把它控制的太低的。

官方有个最低内存使用要求的,印象中比5GB要大,你可以看看“部署资源环境要求”的内容。

default cf 也设置过了,write cf 和 lock cf消耗内存会很大吗?

生产要求tikv内存64G以上

即使是测试环境,tikv的内存也要求32G。

这里是否可以参照混布调优,调整一下线程的控制来优化内存的使用?
https://docs.pingcap.com/zh/tidb/stable/three-nodes-hybrid-deployment#tikv-线程池大小配置

1 个赞

K8S可以完美实现你的要求 :smirk:

1 个赞

TiKV 内存参数性能调优 | PingCAP 文档中心

除了以上列出的 block-cache 以及 write-buffer 会占用系统内存外:

  1. 需预留一些内存作为系统的 page cache
  2. TiKV 在处理大的查询的时候(例如 select * from ...会读取数据然后在内存中生成对应的数据结构返回给 TiDB,这个过程中 TiKV 会占用一部分内存

容器和虚拟技术隔离更彻底 :+1:

本文介绍 TiDB 集群的 TiKV 和 TiDB 混合部署拓扑以及主要参数。常见的场景为,部署机为多路 CPU 处理器,内存也充足,为提高物理机资源利用率,可单机多实例部署,即 TiDB、TiKV 通过 numa 绑核,隔离 CPU 资源。PD 和 Prometheus 混合部署,但两者的数据目录需要使用独立的文件系统
https://docs.pingcap.com/zh/tidb/v6.1/hybrid-deployment-topology#混合部署拓扑

不要每个cf单独设置。
通过storage.block-cache.capacity设置总量就可以了。我自己的tikv设置2g左右就可以完美控制整个tikv的内存用量不超过6g。

1 个赞

能贴个tikv内存增长趋势的图吗? tikv dtail监控有个memory trace 先看能trace到组件有多大

通过storage.block-cache.capacity 设置一下

你的资源配置的话,我建议别用tidb了,用mysql单机效率都要更好一点。。。

:thinking:附议,确实如此。不过如果是为了兼容性验证,可以搞个单节点的,体验会更好一点。

也附议,没有HTAP的需求,还不如单机呢

嗯,我也是设置的这个,内存控制还可以

下面tikv的配置试试,一定要回复下结果,我也想知道能不能5G跑起来,包括持续的写入,然后重启后wal恢复能不能导致oom之类的。 :smile:

memory-usage-limit = "4G"

[server]
grpc-memory-pool-quota = "1G"
[storage.block-cache]
capacity = "1GB"
[rocksdb]
max-total-wal-size = "2GB"
enable-statistics = false
[rocksdb.defaultcf]
write-buffer-size = "64MB"
max-write-buffer-number = 2
[rocksdb.writecf]
write-buffer-size = "64MB"
max-write-buffer-number = 2
[rocksdb.lockcf]
write-buffer-size = "64MB"
max-write-buffer-number = 2
[raftdb.defaultcf]
write-buffer-size = "64MB"
max-write-buffer-number = 2
[raft-engine]
memory-limit = "512MB"