调优介绍
TuningKit是一款鲲鹏性能调优工具,本实践中使用Tuning Kit工具对MySQL所在系统执行系统配置全景分析、性能全景分析以及函数分析,找到性能瓶颈点,并根据分析结果进行优化修改,从而实现MySQL系统的性能增强。
组网环境
说明:本实践以TaiShan 200服务器(型号2280)+CentOS7.6组网举例,TuningKit在其他鲲鹏平台和操作系统上的操作类似。
表格1 MySQL环境
项目 |
说明 |
服务器 |
TaiShan 200 服务器(型号2280) |
CPU |
Kunpeng 920 4826 |
OS |
CentOS 7.6 |
应用 |
MySQL 8.0.17 |
调优工具 |
TuningKit 2.2.0 |
表格 2 压力测试环境
项目 |
说明 |
服务器 |
TaiShan 200 服务器(型号2280) |
CPU |
Kunpeng 920 4826 |
OS |
CentOS 7.6 |
压力测试工具 |
Benchmark 5.0 |
前提条件
1. 服务器和操作系统正常运行。
2. PC端已经安装SSH远程登录工具。
3. MySQL数据库已经安装完成,并启动。
4. 压力测试环境和MySQL环境网络互通。
5. 压力测试环境中Benchmark 5.0已经安装完成,并完成与MySQL数据库连接,可以进行压力测试。
6. MySQL环境上TuningKit工具已经安装完成。
调优思路
1. 在进行调优之前,先用Benchmark工具测试MySQL在并发100个进程的性能数据。
2. 使用TuningKit调优工具针对MySQL应用从函数分析、系统性能、系统配置维度进行性能分析。并根据性能分析结果得出性能瓶颈点以及优化方法。
3. 针对性能瓶颈点分别进行性能优化。完成优化后,分别再用Benchmark工具测试MySQL并发100个进程的性能数据,与调优之前的性能进行对比,判断性能是否有提升。
操作步骤
调优前数据库性能测试
Benchmark测试
1. 进入Linux系统后台的BenchMark目录。
cd /home/ BenchMarkSQL/run/
2. 运行Benchmarksql程序。
说明:参考鲲鹏社区https://support.huaweicloud.com/tstg-kunpengdbs/kunpengbenchmarksql_06_0004.html中的BenchMarkSQL测试MySQL章节,修改压测环境中Benchmark配置文件,包括数据库服务器地址、端口、数据库名称、数据库用户账号和密码等连接参数和进程并发参数loadWorkers。
修改完配置文件后,执行./runDatabaseBuild.sh和./runBenchmark.sh 命令,运行benchmarksql程序,查看tpmTOTAL的值为138104
MySQL应用的热点函数性能调优
热点函数分析
3. 登录性能调优工具。
4. 创建MySQL工程。
创建MySQL工程时,需要选择MySQL所在的服务器节点。
5. 创建C/C++性能分析任务,配置参数如下图所示。
从分析结果中的热点函数列表中可以发现,MySQL运行的Top1热点函数queued_spin_lock_slowpath调用栈占用了超过一半的运行时间。
热点函数分析及优化方法
热点函数分析:从C/C++性能分析的Top10函数列表中可以看出,内核热点函数queued_spin_lock_slowpath调用栈占用了超过一半的运行时间,内核函数queued_spin_lock_slowpath调用栈中,存在大量的futex_wait函数和futex_wake函数,则判断内核中的线程频繁的保持和唤醒spin lock锁,从而占用大量的运行时间。因此需要减少MySQL进程进入内核态的次数,避免spin lock被频繁保持和唤醒。
优化方法:通过查看MySQL官方手册(https://dev.mysql.com/doc/refman/8.0/en/innodb-performance-spin_lock_polling.html)中关于spin_lock的介绍,,MySQL引入了innodb_spin_wait_delay参数,控制自旋锁时间,同时引入innodb_sync_spin_loops参数,控制自旋锁的循环次数。
因此,可以用CPU计算资源换取MySQL进程内核态次数。即通过修改MySQL数据库配置文件,增加spin_loop的次数以及wait_delay的时间长度,防止自旋锁循环过快,尽量避免MySQL进程陷入内核态引起spin lock被频繁保持和唤醒,以此来调优MySQL性能。通过查看华为鲲鹏社区(https://support.huaweicloud.com/tngg-kunpengdbs/kunpengmysql8017_05_0015.html)中,对MySQL数据库参考调优中,将innodb_spin_wait_delay设置为180,innodb_sync_spin_loops设置为25,会达到最优性能。
修改MySQL配置文件
6. 修改mysql的配置文件
执行vi /etc/my.cnf 命令编辑配置文件,将tune中的参数做如下修改,防止进入系统自旋。
innodb_spin_wait_delay=180
innodb_sync_spin_loops=25
7. 执行重启MySQL命令,使配置文件生效。
/etc/init.d/mysql restart
重启热点函数分析
重新启动之前创建过的C/C++性能分析任务,任务执行结束后,发现spin_lock自旋热点函数被消除,函数执行时间由29.9秒降低到17.3秒。
Benchmark测试
8. 进入Linux系统后台的Benchmark运行目录。
cd /home/ BenchMarkSQL/run/
9. 执行./runBenchmark.sh命令,运行Benchmarksql程序。
查看tpmTOTAL的值由之前的138104变为当前的699282,性能提升明显。
系统配置和性能调优
系统性能和配置全景分析
10. 登录性能调优工具。
11. 创建MySQL工程。
创建MySQL工程时,需要选择MySQL所在的服务器节点。
12. 创建系统性能全景分析任务,配置参数如下图所示。
13. 查看系统性能指标
1. CPU利用率:从%soft参数值中,可以看到48号核的CPU服务软中断所花费时间占CPU总时间的99.71%,说明软中断集中在48号核上,需要做中断绑核优化。
2. 网络IO指标:观察网络设备统计数据,发现MySQL使用的网口每秒传输数据包和字节数超过基准值,按优化建议需要做网口中断绑核。
为了查看系统中有多少中断,以及中断在每个核上的分布情况,需要进一步执行配置全景分析。
14. 创建系统配置全景分析任务,配置参数如下图所示。
15. 检查系统硬件信息中的网卡中断NUMA绑核信息,可以看到有32个中断在numa node中随机分布。(中断NUMA绑核数据列表较多,可以下载到本地后查看)
中断绑核分析及优化方法
中断绑核分析:
1. 从系统性能全景分析结果,发现48号核的CPU服务软中断所花费时间占CPU总时间的99.71%,中断的分布不合理。同时网络设备统计中,网口每秒传输数据包和字节数超过基准值,按优化建议需要做网口中断绑核。
2. 从配置全景分析结果中查看MySQL Server使用的网卡中断NUMA绑核信息,可以看到32个中断在numa node中是随机分布的,所以会导致多个中断都集中在某一个核上,还会有概率性跨numa_node和片的风险。
优化方法:
根据中断NUMA绑核的优化建议和方法,进行网卡的中断绑核操作,将32个中断均匀绑定在一个node节点的24个核上。
使用cat /sys/class/net/enp189s0f0/device/numa_node命令查询数据库通信网卡设备靠近numa_node 2,所以可以将该网卡中断绑定在numa_node 2对应的24个核上。
网口中断绑核
中断绑核方法一:手动执行绑核命令,对每个中断逐个绑核。
工具的优化建议中有提供绑核步骤。
中断绑核方法二:将绑核执行命令写入脚本中,循环多次,批量绑核。
如下为已经写好的irq.sh绑核脚本(请参见附件),可以根据实际情况修改绑核规则。从脚本内容中可以看出将中断循环绑定到一个numa中24个核上。(Kunpeng920 4826机型一个numa_node有24个核)
16. 将irq.sh绑核脚本上传到MySQL Server目录下。
1) 执行systemctl status irqbalance.service命令查询负载均衡的服务状态,如果服务状态为active状态,需要执行systemctl stop irqbalance.service命令,停止负载均衡服务。停止后,查询状态为inactive状态。
2)执行sh irq.sh enp189s0f0命令,将32个中断绑在一个node 节点的24个核上。
重启系统性能和配置全景分析任务
1. 重启系统性能全景分析任务完成后,观察%soft指标(该指标表示CPU服务软中断所花费时间占CPU总时间的百分比),可以看到相比于中断绑核之前,软中断的处理分散在了绑定的核上。
2. 重启系统配置全景分析任务后,观察硬件信息的网卡指标。绑核前中断随机分配在numa节点的核上,会有概率性跨numa_node和片的风险,也可能集中占用某一个核;中断绑核后中断有序的固定在绑定的核上,中断处理分散在这些核上,提高了处理器的效率。绑核后中断分布如下所示。
Benchmark测试
17. 进入Linux系统后台的Benchmark运行目录。
cd /home/ BenchMarkSQL/run/
18. 执行./runBenchmark.sh命令运行Benchmarksql程序。
查看tpmTOTAL值由之前的699282变为当前的704005,性能有所提升。
调优结果分析
本实践中,经过对MySQL系统进行了热点函数和中断绑核两次调优后,Benchmark测试MySQL的tpmTOTAL值从138104提升到704005,数据库性能提升410%。
在进行其他应用调优时,需要根据性能调优工具采集分析的实际结果和对应的优化建议进行调优操作。具体的调优思路和调优过程,可以参考本实践。
irq.rar
474 Bytes,下载次数:10