课程名称:3.7.7 TiKV optimization(TiKV Server 优化)
学习时长:
60分钟
课程收获:
当遇到性能瓶颈时,进行性能提优。
课程内容:
一、TiKV Architecture Overview
- 完整架构图(分布式的KV数据库)
- 分层设计图
- 模块
二、Processing in TiKV
- TiKV write processing
- 主要涉及三个线程池
- scheduler pool:通过scheduler-worker-pool-size参数配置大小
- raftstore pool:通过store-pool-size参数配置大小
- apply pool:通过apply-pool-size参数配置大小
- 分析写请求是否达到瓶颈
- 第一步分析线程,查看CPU使用率是否到达80%,如果到达建议通过增加scheduler-worker-pool-size扩容
- 第二步分析raftstore,通过写延迟来检查是否瓶颈在raftstore
- 第三步分析Consensus层
查看raftstore CPU和apply CPU是否到达了瓶颈或者是否均衡,如果比较均衡且负载高,通过调整store-pool-size或apply-pool-size分配更多资源,未达到均衡可以调整PD调度策略达到均衡
- 第四步分析储存层
- 第五步分析磁盘I/O
- 第六步分析CPU load
- 第一步分析线程,查看CPU使用率是否到达80%,如果到达建议通过增加scheduler-worker-pool-size扩容
- 如果分析IO是瓶颈并且CPU还有剩余,可以通过CPU资源换取IO资源
- 通过调整压缩级别,提高压缩级别会增加CPU消耗减少IO写入
- 通过调整压缩级别,提高压缩级别会增加CPU消耗减少IO写入
- 如果分析是rocksdb stall但IO和CPU都不是瓶颈,主要有三个可能
- 太多的Level0文件,造成读性差,通过下面参数解决
- 太多的memtables,很多数据在内存中并未刷到Level0文件,通过下面参数解决
- 太多的pendig
- 太多的Level0文件,造成读性差,通过下面参数解决
- 如果在导数据时,可以调整触发rocksdb流控阈值
- level0-file-num-compaction-trigger:level0层有多少文件将会触发compaction
- level0-slowdown-writes-tigger:level0层有多少文件将会让写入变慢
- level0-stop-writes-trigger:level0层有多少文件将会让写入停止
- 如果确定level0层文件多是一个预期的事情可把后两个参数调高
- 如果按前六步分析均无问题,还有种可能是网络延迟问题,可以查看log commit是不是很慢
如果触发了raftstore中的流控,可以通过调大rafstore.raft-max-inflight-msgs和rafstore.raft-max-size-per-msg这两个配置- rafstore.raft-max-inflight-msgs是指Consensus层允许发出的最多消息数
- rafstore.raft-max-size-per-msg是指Consensus层一个消息最大的大小
- TiKV read processing
- 对延迟直接查看线程池CPU使用率
- 对于CPU使用率不高或经过分析处理时间并不高,都在等待中可以查看以下问题
- 太多的Scan,检查触发Scan的执行计划是否正确
- 负责是否均衡
- 线程池是不是太小
- 检查block cache的命中率,如果低可以调大capacity