返回列表

PolarDB TPC-C性能优化挑战赛参赛攻略:大火收汁队

2024年第6届天池全球数据库大赛——PolarDB TPC-C性能优化挑战赛 | 532276

开始: 2024-11-08 结束: 2024-12-17 数据库与存储 工程开发赛
2024天池全球数据库大赛 · PolarDB TPC-C性能优化 · 大火收汁队参赛攻略
🏆 2024天池全球数据库大赛 · PolarDB TPC-C性能优化 👥 大火收汁队 · 浙江大学 📍 浙江省 👁️ 264

优化之路——2024年第6届天池全球数据库大赛——PolarDB TPC-C性能优化挑战赛参赛攻略

大火收汁队 · 参数调优 + Intel硬件特性(QAT/DSA) + 火焰图分析

1. 队伍介绍——大火收汁队

我们是来自浙江大学的年轻团队,由两位大三学生徐梓毓、李安旭和一位研一关子安学生组成。我们对数据库内核和优化技术充满热情,因此组队参加了本次数据库大赛。

我们的目标是通过这次比赛深入探索数据库领域的前沿技术,将理论知识应用于实际问题中,并向业界的前辈们学习。

我们期待在决赛中与数据库领域的专家们进行更多的交流和学习。

2. 准备工作

首先,我们研究了基准测试的赛题,了解了TPCC的相关简介和数据载入阶段以及评测的相关得分策略逻辑。

TPCC基准测试说明

随后对于压测阶段,我们分别从业务场景和瓶颈分析了相关的内容。

压测阶段瓶颈分析

最后,我们在本地构建了流水线以完成更完善的评测和代码修缮,通过火焰图等方式来优化我们的参数和代码。

本地流水线与火焰图优化

3. 系统优化

我们的参数优化策略以及实现:

基础优化方案

初赛与复赛初始,参考 Intel 的 MySQL 泛优化方案,为参数优化筑牢根基,收获良好成效。
基础参数调整:设置如 skip-log-bininnodb_flush_method=O_DIRECTinnodb_doublewrite=0 等提升基础性能表现。

基础参数优化

场景适配调参

构建多套参数方案,确保不同阶段(如数据导入与压测运行阶段)系统稳定高效。

使用 Vtune 的 Hotspots Analysis 定位 CPU 瓶颈。通过分析火焰图,我们发现主要消耗在 spin lock 上。相关参数修改为:

  • innodb_spin_wait_delay=0
  • innodb_log_spin_cpu_pct_hwm=0
  • innodb_sync_spin_loops=0

调整后,性能有所提升,可能是因为部分锁快速获取对性能有益。

Intel 硬件特性利用

我们还利用了 Intel 的一些硬件特性,例如 PGO、QAT 和 DSA,尝试对于我们的优化效果进行精进。

QAT 压缩性能

为了较好的利用到 QAT 的压缩性能,我们首先进行了数据表的压缩尝试。由于 MySQL 8.4 对于 compression 参数的取消,使用 start_db.sh 脚本的修改进行定向的数据表修改。在 wh=500 的测试中,我们采用压缩方法能够有超过 30% 的性能提升,但由于压缩造成的导入速度下降,我们在后续的方案中没有继续采用,但相信结合 QAT 的性能提升,在 wh 并非很大的场景下该方法可以有不错的效果。

DSA 加速

DSA 我们则是引入 DTO 仓库源码,通过修改 start_db.sh 以及 build.sh,在 build.sh 中进行编译,在 start_db.sh 中进行环境变量的设置,并在 my.cnf 中进行 NUMA 配置以配合 DTO 使用。

探索中的失败尝试与反思

AHI 优化和 tcmalloc 替换。在这两件事上我们并没有完成。同时,相比于其他队伍收益比较大的地方,例如线程池和 tls 这两个很重要的地方,我们没能拿到很高的收益也是略显可惜。

4. 参赛总结

在参加第6届天池全球数据库大赛的这段时间里,我们怀着学习与探索的初心,一路走来收获满满,不仅提升了专业能力,更在团队合作中体会到了成长的力量。

这次比赛是我们第一次深入参与数据库内核优化的实际问题。通过分析题目和查阅资料,我们不仅对数据库的整体架构有了更深刻的理解,也在数据库架构、代码优化和性能分析能力上有了显著的提升。

除了技术上的成长,这次比赛也让我们意识到团队协作和时间管理的重要性,尤其是在一个技术性极强的团队竞赛中。

我们也将把这次比赛中学到的知识与经验应用到更广泛的技术实践中,继续探索数据库领域的更多可能性。

我们要感谢比赛主办方提供的这个宝贵平台,让我们能够学习和实践,感谢导师和学校对我们的支持,也感谢队友们的共同努力和学长学姐们给我们的帮助!