16

啥都吃的豆芽 · 6月7日 · 黑龙江

开源MySQL在倚天ECS上的最佳优化实践

简介: 我们总结了在倚天上自建MySQL的基本优化手段,并在阿里云ECS G8y实例(基于Armv9的倚天710处理器)和G8i实例(x86)上做了开源8.0.34版本的MySQL的性能测试对比,优化后MySQL在G8y上的性能相对于未优化在G8i上的性能在只读场景有63%的性能优势,在读写混合场景有35%的性能优势;相对于优化后的G8i仍能保持只读场景20%的性能优势,读写混合场景5%的性能优势。

MySQL是一个开源的关系型数据库管理系统(Relational Database Management System,RDBMS),是业界最流行的RDBMS之一,广泛用于Web应用程序的后端数据存储。它是一种轻量级、快速、可靠的数据库解决方案,被广泛应用于各个行业领域,包括电子商务、金融服务、制造业和社交媒体等。

MySQL具有很高的可扩展性和稳定性,能够应对大规模数据存储和处理需求。它支持复杂的查询语言,事务处理和数据安全功能,为开发人员提供了一个强大的工具来管理和操作大规模数据。

与Redis等内存型数据库不同,MySQL的数据通常存储在磁盘上,这意味着它可以处理大量数据并且不会受到内存容量的限制。在生产环境中,MySQL通常部署在高性能的服务器上,以确保系统的稳定性和性能。它能够处理大量的并发请求,并提供高吞吐量的数据处理能力。

image.png

基于倚天710的数据中心服务器具备很强的单核计算能力,我们也通过微架构、编译、内核、操作系统、应用层等的全面优化大大提升了MySQL在倚天上的性能。

在本文中,我们总结了在倚天上自建MySQL的基本优化手段,并在阿里云ECS G8y实例(基于Armv9的倚天710处理器)和G8i实例(x86)上做了开源8.0.34版本的MySQL的性能测试对比,优化后MySQL在G8y上的性能相对于未优化在G8i上的性能在只读场景有63%的性能优势,在读写混合场景有35%的性能优势;相对于优化后的G8i仍能保持只读场景20%的性能优势,读写混合场景5%的性能优势。

image.png

优化手段

平头哥解决方案应用优化团队对MySQL应用进行了自顶向下的全面优化,具体包括应用层参数优化、系统层及OS层配置优化、编译器层优化、微架构分析优化、硬件能力优化等。

  • 应用层:

    • 对MySQL应用侧关键参数进行分析,针对倚天机器进行适配优化。结合当前机器内存、cache等配置合适的buffer size、innodb pool size、logfile等方式激发硬件性能潜力。
  • 系统及OS层:

    • 通过分析MySQL运行时系统特征,针对应用侧无关的系统参数如调度参数等进行优化,提升CPU利用率,最大程度发挥倚天性能优势。
    • 通过开启代码段大页,将应用程序代码段 (.text) 通过file THP映射,减少TLB entry开销,显著降低iTLB miss,降低了整个系统中的资源竞争。
  • 编译器层:

    • 启用LSE指令扩展,使用原生的CAS 等指令实现数据库的原子操作,优化了加锁、解锁等操作的性能,极大提高了数据库高并发场景下的性能。
    • 使用链接时优化(LTO)技术,扩展了编译器过程间分析的范围,全局优化数据库代码。
    • 对OS内核及MySQL服务端应用进行PGO优化。通过更优的代码冷热重新布局,降低在典型场景运行时应用的Frontend Bound。
  • 微架构分析优化:

    • 基于解决方案团队自主研发的Micro-Optimizer微架构分析优化工具,通过抓取运行时指令流,进行分支跳转分析,建立基于Basic Block的分析模型,可以获取更精确的代码冷热情况,可以在PGO的基础上进一步降低i-cache miss率。
    • 基于Micro-Optimizer,通过对指令流中的ldr str等访存指令进行分析建模,通过配置硬件参数进行仿真或直接采样抓取SPE数据的方式可以获取应用在运行时的d-cache miss情况。抓取热点并通过合适的指令预取或缓存锁定优化手段可针对特定PC进行缓存优化,从而降低应用整体d-cache miss率,进而在微架构层面降低backend bound。

image.png

  • 硬件能力优化:

    • 通过合适的硬件预取策略配置,可以进一步发挥倚天710的硬件能力。数据库的内存访问与常见workload不同,访问模式更加随机,不适合通用的数据预取策略。在数据库场景下,过于激进的数据预取可能无法提高缓存命中率,反而会增加内存带宽的使用,并且在缓存中填充无效的数据。调整预取策略,为缓存设置合理的指令预留,能给MySQL带来显著的性能收益。

综合以上各种不同层面的优化,可以在自建的开源版本MySQL同样达到很高的性能水平。其中有部分优化手段也适用于x86,我们在x86上也进行了同样的优化,也获取了一定的性能收益,但是综合来看在倚天上优化效果更佳,性能也最终得以反超x86。

测试环境及结果

我们使用sysbench作为负载生成器和性能基准测试工具。在数据库领域中,Sysbench经常被用来测试各种数据库管理系统(如MySQL、PostgreSQL等)在不同负载下的性能表现。它可以模拟并发用户访问数据库,测量数据库的读写能力、事务处理性能和并发连接处理能力等指标。

配置说明

benchmark客户端使用了一个单独的ECS.G7.8xlarge实例。
两种服务端ECS实例类型配置如下:

image.png

我们将MySQL优化手段集成在ptg-accelerator中,可以在自建MySQL基础上一键调优。

注意部分优化手段也可应用在G8i上,但是整体收益依然不如G8y

TPS性能数据

image.png

微架构性能数据

这里对比了在倚天环境优化前后的前后端微架构指标变化数据。
指标说明:

  • Frontend Stall-Rate = Frontend Stalls / (Frontend Stalls + Backend Stalls)
  • Backend Stall-Rate = Backend Stalls / (Frontend Stalls + Backend Stalls)
  • 基准场景的Instruction TLB Miss、Instruction L1 Miss、Branch Miss、Data TLB Miss、Data L1 Cache Miss、Data L2 Cache Miss都设置为100%,方便优化状态下作对比。
  • 优化场景的以上数据为[优化/基准]的结果,以更方便地体现优化的比例
  • 可以看到经过我们整体的优化,MySQL在g8y上的微架构性能表现有明显的提升
  • 前端Bound的比例有一定的降低,在Instruction TLB Miss率上相对优化前有43.9%的提升,Instruction L1 Miss率相对优化前有25.8%的提升,Branch Miss率相对优化前有 56.3%的提升。
  • 后端数据也体现出一定的性能提升,Data TLB Miss率相对优化前有47.3%的提升,Data L2 Cache Miss率有18.5%的提升。

image.png

总结

通过优化MySQL在倚天上的性能达到并反超x86的性能水平,叠加倚天在价格上的优势可获取更高的性价比优势。

来源:阿里云

推荐阅读

欢迎大家点赞留言,更多Arm技术文章动态请关注极术社区Arm服务器专栏欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。
推荐阅读
关注数
17395
内容数
80
分享arm服务器软件应用经验、测试方法、优化思路、工具使用等。
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息