Q1:什么场景需要进行网卡带宽调优?
A1:网卡带宽到达瓶颈会直接影响数据库性能,在组网模式远端压测(1*server端+1*压力端)中,MySQL物理机整机单实例sysbench只读(readonly)场景对网络带宽需求极高,例如,在只读高并发(>=512并发)场景,本地压测(server端与client端于一体)中数据收发达到32GE左右,在远端只能达到23.5GE,导致cpu压力没有到达100%,性能无法完全体现。
Q2:如何进行网卡时延调优?
A2:当前数据库性能测试模型为业务串行:发包之后等待回复再发下一个包,所以并发数少的情况下,对时延非常敏感 ,随着并发数上升,时延相互掩盖,影响降低;
更改网卡模式:低并发下网卡采用network-latency模式,强行使系统采用时延优化方向的策略,发现数据库性能有大幅度提升(整体7.5%);但在高并发数值下降明显,不建议在高并发场景更改为network-latency模式。
更新配套驱动,对驱动接收流程做了小幅优化,减少了一些memcpy操作,提升收包效率,小幅度降低时延,实测性能小幅提升(整体2%);
调整中断聚合和驱动一次收包的个数,小幅度降低时延,单并发场景有小幅度提升(整体2%)。
Q3:如何进行BIOS调优?
A3:对于不同的硬件设备,通过在BIOS中设置一些高级选项,可以有效提升服务器性能。
调优文档参考:https://www.hikunpeng.com/document/detail/zh/kunpengdbs/ecosystemEnable/MySQL/kunpengdbstune_05_0005.html
Q4:MySQL配置文件对数据库性能有何影响?
A4:my.cnf中一些关键的参数能对数据库性能有所提升,如buffer_pool_size,log_file_in_group等,前者对应数据库缓存池大小,在合理区间内缓存池越大,内存中能够存储的数据越多,数据读取命中率越高、数据写入容量更多,转储频率更低,整体性能越好;log_file_in_group代表redo log文件数,配合文件大小innodb_log_file_size一起对数据写入性能产生影响,事务日志文件数与文件size设置过小就会导致在sysbench写场景运行时频繁刷脏,直接影响性能。
调优文档参考:https://www.hikunpeng.com/document/detail/zh/kunpengdbs/ecosystemEnable/MySQL/kunpengmysql8017_05_0015.html
Q5:如何通过GCC反馈编译进行优化?
A5:通过GCC反馈编译可以生成更加优化的二进制代码,提升数据库的执行效率,从而提升TPS和降低延迟。PGO通过插桩编译、收集数据、反馈数据、优化编译四个步骤进行优化。对数据库性能达到以下三方面提升:
1. 提高关键路径的性能:优化热路径,降低高负载业务时延;优化分支预测,减少分支预测失败;
2. 优化缓存利用:优化访存模式,减少缓存未命中;重新排列代码和数据,增加缓存命中,提高数据局部性;
3. 优化函数内联:内联高频短小函数,减少函数调用开销;避免内联大函数,减少代码膨胀。
优化效果:显著提高复杂查询的执行效率,尤其是多表连接和聚合操作频繁的场景;提升并发事务处理性能,减少锁争用和等待时间;提高CPU和内存利用率。
在实测中,MySQL小规格4C8Tsysbench-readwrite模型,GCC反馈编译优化能达到15%的性能提升。
Q6:毕昇编译器如何进行优化?
A6:毕昇编译器除LLVM通用功能和优化外,它的工具链对中端及后端的关键技术点进行了深度优化,并集成Auto-tuner特性支持编译器自动调优。
参考链接:https://www.hikunpeng.com/document/detail/zh/kunpengdevps/compiler/ug-bisheng/kunpengbisheng_06_0003.html
Q7:如何进行Gazelle网络优化?
A7:Gazelle是一款高性能用户态协议栈,它基于DPDK(Data Plane Development Kit)在用户态直接读写网卡报文,共享内存大页传递报文,使用轻量级LwIP协议栈,能够大幅提高应用(例如MySQL、Redis等)的网络IO吞吐能力。MySQL在大负载测试中,TPC-C性能瓶颈之一为网络协议栈,传统的用户态协议栈在超过40核时性能效果不佳,往往无法满足灵活的网络线程模型的应用加速需求,而Gazelle引入影子FD(File Descriptor)机制以及跨线程异步通信机制,具有零修改、零拷贝、零锁和通用性的技术特点,可以有效提升TPC-C综合性能。通过Gazelle网络优化特性,TPC-C综合性能预计可以提升10%。
参考链接:https://www.hikunpeng.com/document/detail/zh/kunpengdbs/basicAccelFeatures/gazellenof/kunpengdbsmysqlgazelle_20_0002.html
Q8:crc32优化如何实现对数据库的性能调优?
A8:在鲲鹏处理器内,MySQL CRC32指令优化特性使用鲲鹏CRC32硬件指令替换CRC32算法的软件实现,减小了CRC32的计算开销。Linux内核中虽然包含了CRC32算法的C语言实现,但是由于性能较低,可能会成为系统性能瓶颈。特别是当内核态中CRC32函数调用占比较高时,这一问题将更加明显。为解决此问题,可以采用鲲鹏CRC32硬件指令来替换CRC32算法的软件实现,从而提高系统的性能。通过MySQL CRC32指令优化特性,Sysbench写场景性能预计提升5%。
调优文档参考:
https://www.hikunpeng.com/document/detail/zh/kunpengdbs/appAccelFeatures/crc32iof/kunpengdbsmysqlcrc32_20_0003.html
Q9:NUMA调度优化适应何种场景?
A9:当OLTP负载中存在较多写类型操作时(update/insert/delete),会产生较多redo log写请求,MySQL后台的写log线程可能压力过大,影响系统吞吐量。如果通过InnoDB Monitors的log_on_write_waits观测到日志线程繁忙,可通过本特性提高log线程效率,避免其成为系统瓶颈。此外,如果分析得出业务本身适合NUMA亲和,在NUMA架构的多路服务器上,可通过本特性提高用户线程的访存效率。
调优文档参考:
https://www.hikunpeng.com/document/detail/zh/kunpengdbs/appAccelFeatures/numastf/kunpengdbsmysqlnuma_20_0002.html
Q10:线程池优化如何使能数据库?
A10:在默认的MySQL连接器下,每个接入的连接都会分配一个线程,当连接数非常大时,线程的上下文切换及线程之间热锁的竞争将会占用大量CPU资源,导致服务性能下降。为了解决这个问题,鲲鹏BoostKit引入了线程池连接器模块,该模块基于Percona线程池,连接的建立与调度由线程池连接器接管,通过引入可动态伸缩的、多分组的线程池,使服务器即使在有大量客户端连接的情况下,也能保持最佳性能。
参考链接:https://www.hikunpeng.com/document/detail/zh/kunpengdbs/appAccelFeatures/mysqlthreadpool/kunpengolapmysqlthreadpool_20_0008.html
Q1:什么场景需要进行网卡带宽调优?
A1:网卡带宽到达瓶颈会直接影响数据库性能,在组网模式远端压测(1*server端+1*压力端)中,MySQL物理机整机单实例sysbench只读(readonly)场景对网络带宽需求极高,例如,在只读高并发(>=512并发)场景,本地压测(server端与client端于一体)中数据收发达到32GE左右,在远端只能达到23.5GE,导致cpu压力没有到达100%,性能无法完全体现。
Q2:如何进行网卡时延调优?
A2:当前数据库性能测试模型为业务串行:发包之后等待回复再发下一个包,所以并发数少的情况下,对时延非常敏感 ,随着并发数上升,时延相互掩盖,影响降低;
更改网卡模式:低并发下网卡采用network-latency模式,强行使系统采用时延优化方向的策略,发现数据库性能有大幅度提升(整体7.5%);但在高并发数值下降明显,不建议在高并发场景更改为network-latency模式。
更新配套驱动,对驱动接收流程做了小幅优化,减少了一些memcpy操作,提升收包效率,小幅度降低时延,实测性能小幅提升(整体2%);
调整中断聚合和驱动一次收包的个数,小幅度降低时延,单并发场景有小幅度提升(整体2%)。
Q3:如何进行BIOS调优?
A3:对于不同的硬件设备,通过在BIOS中设置一些高级选项,可以有效提升服务器性能。
调优文档参考:https://www.hikunpeng.com/document/detail/zh/kunpengdbs/ecosystemEnable/MySQL/kunpengdbstune_05_0005.html
Q4:MySQL配置文件对数据库性能有何影响?
A4:my.cnf中一些关键的参数能对数据库性能有所提升,如buffer_pool_size,log_file_in_group等,前者对应数据库缓存池大小,在合理区间内缓存池越大,内存中能够存储的数据越多,数据读取命中率越高、数据写入容量更多,转储频率更低,整体性能越好;log_file_in_group代表redo log文件数,配合文件大小innodb_log_file_size一起对数据写入性能产生影响,事务日志文件数与文件size设置过小就会导致在sysbench写场景运行时频繁刷脏,直接影响性能。
调优文档参考:https://www.hikunpeng.com/document/detail/zh/kunpengdbs/ecosystemEnable/MySQL/kunpengmysql8017_05_0015.html
Q5:如何通过GCC反馈编译进行优化?
A5:通过GCC反馈编译可以生成更加优化的二进制代码,提升数据库的执行效率,从而提升TPS和降低延迟。PGO通过插桩编译、收集数据、反馈数据、优化编译四个步骤进行优化。对数据库性能达到以下三方面提升:
1. 提高关键路径的性能:优化热路径,降低高负载业务时延;优化分支预测,减少分支预测失败;
2. 优化缓存利用:优化访存模式,减少缓存未命中;重新排列代码和数据,增加缓存命中,提高数据局部性;
3. 优化函数内联:内联高频短小函数,减少函数调用开销;避免内联大函数,减少代码膨胀。
优化效果:显著提高复杂查询的执行效率,尤其是多表连接和聚合操作频繁的场景;提升并发事务处理性能,减少锁争用和等待时间;提高CPU和内存利用率。
在实测中,MySQL小规格4C8Tsysbench-readwrite模型,GCC反馈编译优化能达到15%的性能提升。
Q6:毕昇编译器如何进行优化?
A6:毕昇编译器除LLVM通用功能和优化外,它的工具链对中端及后端的关键技术点进行了深度优化,并集成Auto-tuner特性支持编译器自动调优。
参考链接:https://www.hikunpeng.com/document/detail/zh/kunpengdevps/compiler/ug-bisheng/kunpengbisheng_06_0003.html
Q7:如何进行Gazelle网络优化?
A7:Gazelle是一款高性能用户态协议栈,它基于DPDK(Data Plane Development Kit)在用户态直接读写网卡报文,共享内存大页传递报文,使用轻量级LwIP协议栈,能够大幅提高应用(例如MySQL、Redis等)的网络IO吞吐能力。MySQL在大负载测试中,TPC-C性能瓶颈之一为网络协议栈,传统的用户态协议栈在超过40核时性能效果不佳,往往无法满足灵活的网络线程模型的应用加速需求,而Gazelle引入影子FD(File Descriptor)机制以及跨线程异步通信机制,具有零修改、零拷贝、零锁和通用性的技术特点,可以有效提升TPC-C综合性能。通过Gazelle网络优化特性,TPC-C综合性能预计可以提升10%。
参考链接:https://www.hikunpeng.com/document/detail/zh/kunpengdbs/basicAccelFeatures/gazellenof/kunpengdbsmysqlgazelle_20_0002.html
Q8:crc32优化如何实现对数据库的性能调优?
A8:在鲲鹏处理器内,MySQL CRC32指令优化特性使用鲲鹏CRC32硬件指令替换CRC32算法的软件实现,减小了CRC32的计算开销。Linux内核中虽然包含了CRC32算法的C语言实现,但是由于性能较低,可能会成为系统性能瓶颈。特别是当内核态中CRC32函数调用占比较高时,这一问题将更加明显。为解决此问题,可以采用鲲鹏CRC32硬件指令来替换CRC32算法的软件实现,从而提高系统的性能。通过MySQL CRC32指令优化特性,Sysbench写场景性能预计提升5%。
调优文档参考:
https://www.hikunpeng.com/document/detail/zh/kunpengdbs/appAccelFeatures/crc32iof/kunpengdbsmysqlcrc32_20_0003.html
Q9:NUMA调度优化适应何种场景?
A9:当OLTP负载中存在较多写类型操作时(update/insert/delete),会产生较多redo log写请求,MySQL后台的写log线程可能压力过大,影响系统吞吐量。如果通过InnoDB Monitors的log_on_write_waits观测到日志线程繁忙,可通过本特性提高log线程效率,避免其成为系统瓶颈。此外,如果分析得出业务本身适合NUMA亲和,在NUMA架构的多路服务器上,可通过本特性提高用户线程的访存效率。
调优文档参考:
https://www.hikunpeng.com/document/detail/zh/kunpengdbs/appAccelFeatures/numastf/kunpengdbsmysqlnuma_20_0002.html
Q10:线程池优化如何使能数据库?
A10:在默认的MySQL连接器下,每个接入的连接都会分配一个线程,当连接数非常大时,线程的上下文切换及线程之间热锁的竞争将会占用大量CPU资源,导致服务性能下降。为了解决这个问题,鲲鹏BoostKit引入了线程池连接器模块,该模块基于Percona线程池,连接的建立与调度由线程池连接器接管,通过引入可动态伸缩的、多分组的线程池,使服务器即使在有大量客户端连接的情况下,也能保持最佳性能。
参考链接:https://www.hikunpeng.com/document/detail/zh/kunpengdbs/appAccelFeatures/mysqlthreadpool/kunpengolapmysqlthreadpool_20_0008.html