一、操作系统参数
CPU
dynamic frequency scaling 五种功耗模式 推荐performance 时刻保持高速运转
cpupower frequency-set --governor performance
NUMA Binding 为CPU绑定内存,提升效率
Memory
Transparent Huge Page(THP)关闭大页内存
Virtual Memory Parameters 脏数据写入内存
dirty_backgroud_ratio=10%
dirty_ratio=20%
Disk
I/O scheduler 推荐NOOP,先来先执行
Mount Parameters
关闭noatime和nodiatime记录时间的操作
二、TiDB Server 关键性能参数与优化
Performance
max-proc 控制tidb server的CPU核数
token-limit 同时执行请求的session的数量
force-priority 控制tidb server的优先级,OLTP业务设置为NO_PRIORITY,OLAP业务、全表扫描自动设置为LOW_PRIORITY
commiter-concurrency 控制一个事务commit阶段的最大的并发量。
Tikv Client
grpc-connection-count 设置tidb和每个tikv之间的gRPC连接数量
Prepared Plan Cache
enabled 减少执行计划造成的开销
capacity 限制cache缓存的条数,避免占用过多的内存
System Variables
Concurrency 设置并发度
Batch Size
tidb_init_chunk_size/tidb_max_chunk_size 分别代表一个chunk初始包含的行数,一个chunk包含的最大行数。申请过大的chunk内存会造成性能损失
tidb_index_join_batch_size OLAP业务可设置较大些
Limit
tidb_store_limit 同时发往一个tikv节点的请求数量
tidb_retry_limit 控制乐观事务的重试次数
Backoff
tidb_backoff_weight 调整最大重试时间
tidb_backoff_lock_fast 读请求遇到锁的backoff时间
三、PD 关键性能参数与优化
调度流程
信息收集(store、region)->生成调度->执行调度
控制operator产生速度的参数
消费限速store limit,限制单个store的消费速度
pd-ctl -u ip:port store limit <id> <value>
存储空间阈值参数 high-space-ratio默认0.6,low-space-ratio默认0.8。指的是tikv的空间
扩容后balance region调度速度慢
store节点故障后补副本的速度慢
region merge速度慢
四、TiKV 关键性能参数与优化
tikv数据写入流程 scheduler pool->raftstore pool->rocksdb raft log ->apply pool ->rocksdb kv
->raft log传输到其他的tikv节点
写入瓶颈分析
读取瓶颈分析
write stall,瞬时写入的数据过多时,rocksdb对写入进行减速。
write stall问题的参数优化:
- 超过rocksdb的max-write-buffer-number。(max-write-buffer-number如果设置很大,一旦rocksdb宕机,内存中的数据很多,需要较长的恢复时间)
- level0-file-num-compaction-trigger(会触发文件往下一层进行压缩),level-slowdown-writers-trigger(达到此值时会触发write stall),level0-stop-writes-trigger(停止写入)
- compression-per-level 提升文件的压缩效率
slow query
线程池调优
- gPRC线程池 负责网络IO,反序列化, server.grpc-concurrency 默认为4,CPU<=8时为2
- Scheduler线程池 将复杂事务转换为简单的key-value读写 storage.scheduler-worker-pool-size CPU>=16时为8,CPU<16时为4
- Raftstore线程池 所有的写请求都会在raftstore通过fsync方式写入到rocksdb,raftstore.store-pool-size默认为2
- UnifyReadPool 负责所有读请求 readpool.unified.max-thread-count为CPU数的80%
- RocksDB线程池 RocksDB进行 Compact 和 Flush 任务
内存参数调优
Follower Read session变量tidb_replica_read设置为follower或leader-and-follower,设置为leader-and-follower时,读请求会在leader和follower之间负载均衡
五、TiDB 集群常用监控指标
内存参数调优
- tidb_mem_quota_query单条SQL使用内存限制通过session变量控制,前提是配置了oom-action = "log"
- mem-quota-query每个查询默认的内存限制参数
- server-memory-quota tidb-server内存限制
- memory-usage-alarm-ratio 使用内存达到总内存的比例时报警