TIKV参数修改后无法生效

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

  • 【TiDB 版本】:v3.0.5
  • 【问题描述】:1:通过ansible部署,环境为单机多TiKV实例,修改tikv.yml文件后,使用ansible-playbook rolling_update.yml --tags=tikv1-1 对tikv服务进行滚动升级,发现tikv,toml文件参数为生效,问题该如何排查? 2:因部署的单机多TiKV实例,如果一次性滚动升级所以tikv服务,使参数生效?

对所有 tikv 操作 ansible-playbook rolling_update.yml --tags=tikv

对单个 tikv 操作 ansible-playbook rolling_update.yml -l tikv1-1

执行ansible-playbook rolling_update.yml --tags=tikv所有tikv升级出现如下错误:

TASK [check_config_tikv : Load customized config: tidb-ansible/conf/tikv.yml] ************************************************************************************************************************************
fatal: [TiKV1-1]: FAILED! => {“ansible_facts”: {“tikv_conf_custom_check”: {}}, “ansible_included_var_files”: , “changed”: false, “message”: "Syntax Error while loading YAML.
did not find expected key

The error appears to have been in ‘/home/tidb/tidb-ansible/conf/tikv.yml’: line 288, column 3, but may
be elsewhere in the file depending on the exact syntax problem.

The offending line appears to be:
\

Options for "Default" Column Family, which stores actual user data.\

defaultcf:
^ here
"}

执行错误参数行如图:

参数配置参考https://github.com/pingcap/docs-cn/blob/master/v2.0/op-guide/tune-tikv.md,求指导,谢谢!

YAML 配置文件内容格式有误,检查下是否参数缩进或语法问题。

按照这个https://pingcap.com/docs-cn/stable/reference/performance/tune-tikv/文档开启参数后才出现这个问题,关闭后才正常,是不是这个配置不适合3.x?

应该是格式问题导致的,方便的话上传一下报错的配置文件模板。

tikv.yml (22.8 KB) 根据报错我注释了一些参数,这个yml是正常了了。https://pingcap.com/docs-cn/stable/reference/performance/tune-tikv/文档中不支持的参数有对 [rocksdb], [rocksdb.defaultcf]设置无法开启,麻烦看看,谢谢!

问题2:修改tikv参数只要为了解决OOM问题。通过syncer工具进行增量同步(没有查询),当数据量多些的情况tikv机器就会出现OOM,错误如下:

Feb 7 16:24:18 tidb1 kernel: oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),cpuset=/,mems_allowed=0,global_oom,task_memcg=/system.slice/tikv-20171.service,task=tikv-server,pid=32386,uid=1002
Feb 7 16:24:18 tidb1 kernel: Out of memory: Killed process 32386 (tikv-server) total-vm:13449716kB, anon-rss:9918720kB, file-rss:0kB, shmem-rss:0kB
Feb 7 16:24:18 tidb1 kernel: oom_reaper: reaped process 32386 (tikv-server), now anon-rss:0kB, file-rss:0kB, shmem-rss:0kB
Feb 7 16:24:18 tidb1 systemd: tikv-20171.service: main process exited, code=killed, status=9/KILL
Feb 7 16:24:18 tidb1 systemd: Unit tikv-20171.service entered failed state.
Feb 7 16:24:18 tidb1 systemd: tikv-20171.service failed.
Feb 7 16:24:34 tidb1 systemd: tikv-20171.service holdoff time over, scheduling restart.
Feb 7 16:24:34 tidb1 systemd: Stopped tikv-20171 service.
Feb 7 16:24:34 tidb1 systemd: Started tikv-20171 service.
Feb 7 16:24:34 tidb1 run_tikv.sh: sync …
Feb 7 16:24:34 tidb1 run_tikv.sh: real#0110m0.010s
Feb 7 16:24:34 tidb1 run_tikv.sh: user#0110m0.001s
Feb 7 16:24:34 tidb1 run_tikv.sh: sys#0110m0.001s
Feb 7 16:24:34 tidb1 run_tikv.sh: ok

有什么好的优化建议吗?根据官方的tikv性能优化文档进行了参数修改还是没有效果。

机器的物理内存多大,参数模板中 block cache 的大小设置是 24G,默认是内存的 45%。

物理内存48G,一台机器分别有两个tikv实例。

两个 tikv 实例需要将 block cache 的默认大小除以 2,约设置为 12G;部署文档相关说明
https://pingcap.com/docs-cn/stable/how-to/deploy/orchestrated/ansible/#单机多-tikv-实例集群拓扑

开始设置的就是12G,也是OOM,才改成24G,发现还是OOM。

  1. tikv 机器上是否还部署了其他服务;
  2. top 检查系统内存的占用情况;
  3. block cache 的 capacity 调整为 10G 再观察下。

是的 还部署了其他服务,但是没有跑程序。从top上看是tikv占了内存的30%左右。恩,我调小点试试。https://pingcap.com/docs-cn/stable/reference/performance/tune-tikv/文档中不支持的参数有对 [rocksdb], [rocksdb.defaultcf]设置无法开启,麻烦看看.谢谢了。:relaxed:

测了下 tune-tikv 文档中 rocksdb 和 rocksdb.defaultcf 下的参数,兼容性没什么问题,把相关参数的注释去掉就可以了

rocksdb:
  max-manifest-file-size: "20MB"
  defaultcf:
    compression-per-level: ["no", "no", "lz4", "lz4", "lz4", "zstd", "zstd"]
    block-size: "64KB"
    level0-slowdown-writes-trigger: 20
    level0-stop-writes-trigger: 36
    write-buffer-size: "128MB"
    max-write-buffer-number: 5
    max-bytes-for-level-base: "512MB"
    target-file-size-base: "32MB"

TIKV参数修改无法生效是因为参数缩进问题导致,已解决,谢谢。

:+1::+1::+1:

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。