环境准备
由于机器资源限制,在个人笔记本进行测试,笔记本配置为MacBook Pro(2015,4c16g)下,cpu:2.2 GHz 四核Intel Core i7,内存:16 GB 1600 MHz DDR3
使用parallels新建了四个虚拟机,1台中控机器,3台目标机器,安装的操作系统版本都为centos7
中控机器分配的资源为1c2g,最大64g的硬盘空间,ip为192.168.199.226
目标机器每台分配的资源为2c4g,最大64g的硬盘空间,ip地址分别为192.168.199.227、192.168.199.228、192.168.199.229
使用haproxy对三台tidb做负载均衡,端口3306
192.168.199.227 pd,tikv,tidb 192.168.199.228 pd,tikv,tidb 192.168.199.229 pd,tikv,tidb 192.168.199.226 haproxy
使用go-tpc测试
安装go-tpc
1 | git clone https://github.com/pingcap/go-tpc.git |
准备数据
1 | mysql -u root -h 192.168.199.226 -P 3306 -u root |
Profile TiDB
测试数据
1 | ## threads=16 |
生成Profile文件
1 | mkdir profiles |
- 192.168.199.227 tpmc 3298
- 192.168.199.228 tpmc 2964
- 192.168.199.229 tpmc 3379
- profile文件
1 | ## 下载zip文件到主机,安装graphviz,解压zip,打开profile文件 |
- 192.168.199.227 Profile Graph
192.168.199.227 Profile Flame Graph
- 192.168.199.227 heap
- 192.168.199.228 Profile Graph
- 192.168.199.228 Profile Flame Graph
192.168.199.228 heap
192.168.199.229 Profile Graph
192.168.199.229 Profile Flame Graph
192.168.199.229 heap
问题分析
- 通过分析三台TiDB cpu的火焰图,发现server.(*Server).xxx的一系列方法耗时较长,这部分主要功能是解析执行sql
- 通过分析三台TiDB heap的火焰图,发现tikv.(*copIteratorWorker).run.xxx的一系列方法占用heap较大
Profile TiKV
测试数据
1 | ## threads=16 |
使用dashboard查看TiKV火焰图
- 选中三个TiKV实例
- 分析完成
- TiKV 192.168.199.227 Profile Flame Graph
TiKV 192.168.199.228 Profile Flame Graph
TiKV 192.168.199.229 Profile Flame Graph
问题分析
- 通过分析三台TiKV cpu的火焰图,发现grpc-server、raftstore耗时较长