【精选问答系列】第六期:鲲鹏数据库调优手段
收藏回复举报
【精选问答系列】第六期:鲲鹏数据库调优手段
新人帖
发表于2024-06-24 17:46:26
0 查看

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

本帖最后由 匿名用户2024/06/28 11:33:41 编辑

我要发帖子