课程名称:(301)3.7.9 Peformance Tuning - troubleshooting examples(性能调优 - 故障排查实战)
学习时长:30min
课程收获:掌握常见的瓶颈类型,对 TiDB 中可能遇到的常见问题能进行排查。
课程内容:Performance
常见的瓶颈
1.CPU瓶颈
CPU usage高
应用端:CPU利用率超80%,增加应用服务器
TiDB server端:CPU利用率超80%,增加tidb-server实例
TiKV 组件:每个组件是否有足够多的threads,在grafana中的TiKV-details页thread cpu面板
CPU loads高
应用端:是否有太多processes/threads,上下文切换多?
TiKV端:iowait高,就是磁盘负载高
2.IO瓶颈
IOPS限制:1TB的EBS gp2卷有3000 IOPS限制;读请求吃掉大量IOPS,block-cache是否够大
IO带宽限制:EBS gp2卷有250MB/s的限制;TiKV的压缩流会读写SST文件,从而吃掉大量的IO带宽(设置压缩限速);范围扫描占用大量IO带宽
3.网络瓶颈:应用和TiDB之间的网络;TiKV与TiDB之间的网络
实战
1.CPU瓶颈
TiDB NUMA问题
现象:TiDB CPU使用率不高,但"PD TSO Wait duration"和"SQL Compile duration"高达100ms
分析:可能go运行时出问题了,使用go trace诊断
curl http://127.0.0.1:10080/debug/pprof/trace?seconds=20 > trace.out
go tool trace trace.out
GC task持续50ms-60ms,猜测内存访问有延迟
原因:TiDB部署在16c 的VM上,跨2个NUMA 节点;在调整VM绑定cpu到一个NUMA节点后,明显改善
2.TiDB CPU 限制
现象:随着QPS增加查询延迟也增加,但TiKV的CPU使用率和IO使用率远远没达到瓶颈(grafana TiKV server panel);延迟很低(grafana PD页的TiDB panel),但TiDB显示"PD TSO wait duration"很高;网络延迟低
分析:某些组件可能到达瓶颈;瓶颈不再TiKV侧;可能在TiDB侧;TiDB的CPU使用率仅20%不是瓶颈
根本原因:TiDB在配置文件中设置了CPU limit,[performance]max-procs=8;在将max-procs设置为0(不限制)后,问题解决
3.TiKV thread瓶颈
现象:TiKV CPU使用率到达瓶颈
分析:大部分CPU被Coprocessor吃掉(grafana的TiKV-details页thread-cpu);有慢查询;有些查询会导致全表扫描
根本原因:查询条件没有索引;增加索引后问题解决
4.IO瓶颈
磁盘超负荷:写延迟非常高;TiDB/TiKV/PD的CPU使用率很低
分析:gRPC延迟很高(grafana TiKV-details gRPC panel),所以瓶颈在TiKV 侧;TiKV的CPU使用率不高;write duration和 read(seek/get) duration都很高,达到秒级(grafana TiKV-details page RocksDB kv/raft panel);有"write stall"事件,磁盘超负荷
根本原因:磁盘压缩操作跟不上写操作;添加TiKV节点或控制应用的写入
学习过程中遇到的问题或延伸思考:
- 问题 1:
- 问题 2:
- 延伸思考 1:
- 延伸思考 2:
学习过程中参考的其他资料
无