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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
EMR Serverless StarRocks,5000CU*H 48000GB*H
简介: 我们总结了在倚天上自建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通常部署在高性能的服务器上,以确保系统的稳定性和性能。它能够处理大量的并发请求,并提供高吞吐量的数据处理能力。

mysql架构.png

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

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

mysql优化.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。

micro-optimizer架构.png

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

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

测试环境及结果

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

配置说明

benchmark客户端使用了一个单独的ECS.G7.8xlarge实例。

两种服务端ECS实例类型配置如下:

Processor

ECS Type

Yitian 710

G8y.2xlarge

x86 cpu

G8i.2xlarge

MySQL软件版本:

Component Name

Version

MySQL

8.0.34

GCC version

10.2.1 20200825 (Alibaba 10.2.1-3.5 2.32)

Sysbench

1.0.20

Operating System

5.10.134-0.git.e660833cf.al8.aarch64

Sysbench测试参数:

Test Config Parameter

Value

Number of Thread

64

Number of Tables

32

Table Size

25000

Test Time

1200

Event

oltp_read_only/oltp_read_write/oltp_write_only

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

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

TPS性能数据


G8i.2xlarge

G8y.2xlarge

Perf benifit gain

Read Only

Read Write

Read Only

Read Write

Read Only

Read Write

基础性能

7253.02

5204.89

6638.50

3934.25

-8.47%

-24.40%

调优后性能

9904.48

6686.58

11822.05

6990.4

19.36%

4.54%

read_only优化.pngread_write优化.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%的提升。

frontend.pngbackend.png

总结

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

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
16天前
|
SQL 关系型数据库 MySQL
深入解析MySQL的EXPLAIN:指标详解与索引优化
MySQL 中的 `EXPLAIN` 语句用于分析和优化 SQL 查询,帮助你了解查询优化器的执行计划。本文详细介绍了 `EXPLAIN` 输出的各项指标,如 `id`、`select_type`、`table`、`type`、`key` 等,并提供了如何利用这些指标优化索引结构和 SQL 语句的具体方法。通过实战案例,展示了如何通过创建合适索引和调整查询语句来提升查询性能。
117 9
|
2月前
|
存储 缓存 前端开发
如何优化 SSR 应用以减少服务器压力
优化SSR应用以减少服务器压力,可采用代码分割、缓存策略、数据预加载、服务端性能优化、使用CDN、SSR与SSG结合、限制并发请求、SSR与CSR平滑切换、优化前端资源及利用框架特性等策略。这些方法能有效提升性能和稳定性,同时保证用户体验。
|
2月前
|
SQL 关系型数据库 MySQL
大厂面试官:聊下 MySQL 慢查询优化、索引优化?
MySQL慢查询优化、索引优化,是必知必备,大厂面试高频,本文深入详解,建议收藏。关注【mikechen的互联网架构】,10年+BAT架构经验分享。
大厂面试官:聊下 MySQL 慢查询优化、索引优化?
|
8天前
|
SQL 存储 关系型数据库
MySQL/SqlServer跨服务器增删改查(CRUD)的一种方法
通过上述方法,MySQL和SQL Server均能够实现跨服务器的增删改查操作。MySQL通过联邦存储引擎提供了直接的跨服务器表访问,而SQL Server通过链接服务器和分布式查询实现了灵活的跨服务器数据操作。这些技术为分布式数据库管理提供了强大的支持,能够满足复杂的数据操作需求。
52 12
|
20天前
|
缓存 关系型数据库 MySQL
MySQL 索引优化以及慢查询优化
通过本文的介绍,希望您能够深入理解MySQL索引优化和慢查询优化的方法,并在实际应用中灵活运用这些技术,提升数据库的整体性能。
59 18
|
19天前
|
缓存 关系型数据库 MySQL
MySQL 索引优化以及慢查询优化
通过本文的介绍,希望您能够深入理解MySQL索引优化和慢查询优化的方法,并在实际应用中灵活运用这些技术,提升数据库的整体性能。
22 7
|
18天前
|
缓存 关系型数据库 MySQL
MySQL 索引优化与慢查询优化:原理与实践
通过本文的介绍,希望您能够深入理解MySQL索引优化与慢查询优化的原理和实践方法,并在实际项目中灵活运用这些技术,提升数据库的整体性能。
50 5
|
2月前
|
SQL 关系型数据库 MySQL
MySQL慢查询优化、索引优化、以及表等优化详解
本文详细介绍了MySQL优化方案,包括索引优化、SQL慢查询优化和数据库表优化,帮助提升数据库性能。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
MySQL慢查询优化、索引优化、以及表等优化详解
|
1月前
|
存储 关系型数据库 MySQL
PHP与MySQL动态网站开发:从基础到实践####
本文将深入探讨PHP与MySQL的结合使用,展示如何构建一个动态网站。通过一系列实例和代码片段,我们将逐步了解数据库连接、数据操作、用户输入处理及安全防护等关键技术点。无论您是初学者还是有经验的开发者,都能从中获益匪浅。 ####
|
2月前
|
关系型数据库 MySQL Java
MySQL索引优化与Java应用实践
【11月更文挑战第25天】在大数据量和高并发的业务场景下,MySQL数据库的索引优化是提升查询性能的关键。本文将深入探讨MySQL索引的多种类型、优化策略及其在Java应用中的实践,通过历史背景、业务场景、底层原理的介绍,并结合Java示例代码,帮助Java架构师更好地理解并应用这些技术。
52 2

相关产品

  • 云服务器 ECS
  • 云数据库 RDS MySQL 版