MySQL 8.0.35 企业版比社区版性能高出 25%?

前言

说实话,比较一下这两个 MySQL 发行版,并不会让我很兴奋。这是因为在我关于 MySQL 的记忆中,如果是谈代码库时,两个发行版之间没有真正的区别。

据我所知,企业版的差异在于附加的插件/组件,因此除非您明确需要使用它们,否则两个版本应该是相同或接近的。

那么你可能会说,为什么要写这篇文章?😉

好吧,在一篇 Oracle 的博客及其开场白 戳中了这一点:MySQL 8.0.35 的企业版与社区版相比,性能方面是有所提高的。

以下是该文章的部分结果截图:

企业版在所有测试的线程配置中平均增益为 24%。

企业版在所有测试的线程配置中平均增益为 34%。

企业版在所有测试的线程配置中平均增益为 26%。

企业版在所有测试的线程配置中平均增益为 21%。

根据显示的结果来看,让我特别想进一步测试一下,但服务器的配置方式有点麻烦。

在博客的测试中,测试数据库总大小为 20 GB,相应的 InnoDB 缓冲池为 124 GB,其他设置与默认值不同,如 innodb_undo_log_truncate=FALSE

简而言之,这意味着所有工作都在内存中完成,一旦加载数据,磁盘上的任何操作都会减少。设置是为了满足测试基准,而不是基于定制或通用默认值的实际生产而准备。

同样令我感动的是,该文章报告 企业版的性能提高了 17% 到 25%

25% 的增长是很多了。难道不值得验证一下吗?当然,是的,我接下来就是这么做的。

测试环境准备

不测 Oracle,因此我的测试基于一个配置较差的 EC2 实例:m5.xlarge 4 个 CPU、16GB RAM。

我还使用提供的卷作为 MySQL 数据目录的位置,而用于在测试运行之间重置数据的离线数据集位于额外的块存储上。

应用程序节点位于同一网络/子网/区域中,并且也是 m5.xlarge 规格。 没有代理或中间件。

MySQL 企业版社区版 的配置主要基于默认值,但以下内容除外:

[mysqld]
basedir                                                     =/opt/mysql_templates/mysql-8P/
datadir = /opt/mysql_instances/test-sysbench-my834/data
lc_messages_dir                                             =/opt/mysql_templates/mysql-8P/share/
log-error = /opt/mysql_instances/test-sysbench-my834/mysql-3307.err
pid-file = /opt/mysql_instances/test-sysbench-my834/mysqld.pid
plugin-dir                                                  =/opt/mysql_templates/mysql-8P/lib/plugin/
port = 3307
server-id = 3307
socket = /opt/mysql_instances/test-sysbench-my834/mysql.sock
tmpdir = /opt/mysql_instances/test-sysbench-my834/temp
user                                                        =mysql
default_time_zone='+01:00'
max-connections                                             =2500
innodb-buffer-pool-instances                                =3
innodb-buffer-pool-size                                     =10G
innodb-data-file-path                                       =ibdata1:100M:autoextend
innodb_data_home_dir = /opt/mysql_instances/test-sysbench-my834/data
innodb_redo_log_capacity                                    =3355443200
innodb_log_group_home_dir = /opt/mysql_instances/test-sysbench-my834/logs
skip-log-bin

简而言之,禁用 binlog,将 redo log 设置为实际的值。当然,将缓冲池设置为适合 RAM 但不适合数据集的维度。所有其他参数都是指向 日志/二进制文件/库 的指针。

配置差异是:

:comparing_MYSQL_8_2_Comunity_VS_enterprise marcotusa$ diff mysql_8_2_community_configuration.txt mysql_8_2_enterprise_configuration.txt 
22c22
< basedir    /opt/mysql_templates/mysql-8.2.0-linux-glibc2.17-x86_64/
---
> basedir    /opt/mysql_templates/mysql-commercial-8.2.0-linux-glibc2.17-x86_64/
50c50
< build_id    c935957ee1349a3974baf2ff5568243a6ebbcd18
---
> build_id    c0de3cc4e369f54b5ab004d8731a7d7040597452
63c63
< character_sets_dir    /opt/mysql_templates/mysql-8.2.0-linux-glibc2.17-x86_64/share/charsets/
---
> character_sets_dir    /opt/mysql_templates/mysql-commercial-8.2.0-linux-glibc2.17-x86_64/share/charsets/
301c301
< license    GPL
---
> license    Commercial
629,630c629,630
< version    8.2.0
< version_comment    MySQL Community Server - GPL
---
> version    8.2.0-commercial
> version_comment    MySQL Enterprise Server - Commercial

测试过程

测试工具是 sysbench,以下是测试计划。

正如计划中所表达的,我们将使用两个不同的数据集,一个使用更多的表和每个表更少的数据,另一个使用每个表更多的数据和更少的表。在这两种情况下,数据集维度都远远大于可用内存。

正如上面博客中提到的,我们将在三个时刻进行测试:

  1. 只读。这也是一个 Pre 操作,它将在数据加载后为我们提供 READ 统计信息,因此完全内部排序。
  2. 写操作,可能会导致(并且将会)页面拆分/合并和“碎片”。
  3. 读取后写入以确定第二个时刻的影响。

我使用 MySQL 8.2 作为测试版本,因为如果代码中推送了任何更改,该版本应该包含。

好的,是时候运行测试了。我们开始做吧!

测试结果

我知道我剥夺了所有的乐趣和悬念,但我们必须从这里开始。

Sysbench

TPCc

什么?在大多数测试中,MySQL 社区版的表现是最好的,而不是企业版。为何如此? 好吧,让我们开始深入挖掘并更好地了解这里发生了什么。

Sysbench 详解

以下是阅读下面图像的方法:

  • 绿色正值表示企业版表现更好;算作 +1。
  • 红色负值意味着社区版做得更好;算作 -1。
  • 空白处带 0 的不计算在内。

需要按列读取,只有在企业版优于社区版 50% 以上的情况下,结果才会是绿色。

现在,正如我们所看到的,企业版只希望在数据加载后并且仅当负载分布在更多表上时才能做得更好。我已经能听到噪音了…… 请耐心等待,一切很快就会清楚。

此外,对于写入而言,只有当负载分布在多个表上时,企业版似乎才能做得更好,而在其他情况下社区版更好。

TPC-c 详解

对于类似 TPC-c 的测试,我使用不同的隔离级别运行了两组测试:

  • 使用可重复读 (RR)
  • 使用读已提交 (RC)

在这方面,MySQL 企业版从来没有比社区版更好。

让我们挖掘一下!

真正的差异是什么?两者有什么区别?为了回答这个问题,我将在这里通过测试展示读取和写入图表。

在向您展示测试结果时,我不会对其进行评论。我坚信图像会说话,在这种情况下,如果 100% 真实,我只会在最后发表评论。

读操作

select_run_list

select_run_inlist_hotspot

select_run_point_select

select_run_range_all

select_run_range_distinct

select_run_range_order

select_run_range_simple

select_run_range_sum

select_run_select_scan

写入

对于写入,我将在本文仅显示累积测试,但您可以在给定的 GitHub 链接 中查看每个测试的图表。

write_run_write_all_with_trx

write_run_write_all_no_trx

TPC-c

如果你到了这一步,你自己应该已经明白了。

图表显示,这两种解决方案几乎是相同的,每当社区版或企业版有一个小的优势时,它只是线程数量的暂时性优势,因此微乎其微,无关紧要。

结论

正如所怀疑的,如果您使用普通配置/场景使用默认值来测试社区版和企业版,那么 MySQL 社区版和 MySQL 企业版之间的性能没有差异。

一些额外的组件会导致功能或性能的改进,例如线程池。

因此,除非 Oracle 使用与注册用户可用的版本不同的企业版,否则我真的不知道如何才能通过简单配置在企业版中获得 25% 的性能提升。

目前为止,我没有看到性能的显著变化。我希望 Oracle 公司继续做它迄今为止所做的事情,使用附加组件而不是闭源模式的核心来增强企业版本。

更多技术文章,请访问:https://opensource.actionsky.com/

关于 SQLE

SQLE 是一款全方位的 SQL 质量管理平台,覆盖开发至生产环境的 SQL 审核和管理。支持主流的开源、商业、国产数据库,为开发和运维提供流程自动化能力,提升上线效率,提高数据质量。

SQLE 获取

类型地址
版本库https://github.com/actiontech/sqle
文档https://actiontech.github.io/sqle-docs/
发布信息https://github.com/actiontech/sqle/releases
数据审核插件开发文档https://actiontech.github.io/sqle-docs/docs/dev-manual/plugins/howtouse

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/709379.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

简单版 git快速上手使用 clone项目 新建/切换分支 提交修改

Git是一个广泛使用的版本控制系统&#xff0c;允许多个用户跟踪文件的更改&#xff0c;并协作开发项目。 首先确定自己电脑已经安装了git&#xff0c;具体安装步骤请查找教程&#xff0c;应该不难。 以windows电脑为例&#xff0c;安装完后在搜索栏搜索git会出现 先解释一下这…

C# OpenVINO Nail Seg 指甲分割 指甲检测

目录 效果 模型信息 项目 代码 数据集 下载 C# OpenVINO Nail Seg 指甲分割 指甲检测 效果 模型信息 Model Properties ------------------------- date&#xff1a;2024-02-29T16:41:28.273760 author&#xff1a;Ultralytics task&#xff1a;segment version&#…

【GitHub】修改默认分支

GitHub的默认分支为main&#xff0c;但我们常常习惯使用master作为默认分支&#xff0c;那在GitHub上如何将master修改为默认分支呢&#xff1f; 全局修改 点击头像&#xff0c;选择菜单栏中的设置 输入master作为默认分支&#xff0c;然后执行updating即可&#xff01; 单项…

springboot+vue实现oss文件存储

前提oss准备工作 进入阿里云官网&#xff1a;阿里云oss官网 注册 搜OSS&#xff0c;点击“对象存储OSS” 第一次进入需要开通&#xff0c;直接点击立即开通&#xff0c;到右上角AccessKey管理中创建AccessKey&#xff0c;并且记住自己的accessKeyId和accessKeySecret&#…

【Unity】构建简单实用的年份选择器(简单原理示范)

在许多应用程序和游戏中&#xff0c;年份选择是一个常见的需求。无论是在日历应用程序中查看事件&#xff0c;还是在历史类游戏中选择时间段&#xff0c;年份选择器都是用户体验的重要组成部分&#xff0c;下面实现一个简易的年份选择器。 一、效果预览&#xff1a; 目录 一、…

树莓派驱动编译

驱动编译前提&#xff1a;驱动代码的编译需要提前编译号的内核 驱动&#xff08;3种实现方法&#xff0c;2条路线&#xff09;_驱动编写三种方法-CSDN博客 驱动的编写_驱动编写-CSDN博客 一、概念 1.1、驱动认识 1、裸机程序中是直接操控硬件的&#xff0c;操作系统…

力扣-跳跃游戏

问题 给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标&#xff0c;如果可以&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 解答 class Solu…

C++ 入门(八)— 常量和字符串

常量和字符串 常量变量常量表达式编译时优化 Constexpr 变量std::string字符串输出 std::coutstd::string可以处理不同长度的字符串字符串输入 std::cin用于输入文本std::getline()不要按值传递Constexpr 字符串 std::string_view可以使用许多不同类型的字符串进行初始化可以接…

v69.字符

1.字符类型 1.1 可以将char类型的变量赋值为整数&#xff0c;也可以赋值为字符! 注意字符要用单引号 ’ ’ 而不是双引号 每一个字符在计算机内部都有一个值去表达它。字符’1’ 在计算机里表示的十进制的整数值为49&#xff0c;就像’A’表示十进制值65。 1.2 scanf 与 p…

C++面试宝典第33题:数组组成最大数

题目 给定一组非负整数nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。 示例1: 输入:nums = [10, 2] 输出:"210" 示例2: 输入:nums = [3, 30, 34, 5, 9] 输出:"…

【查漏补缺你的Vue基础】Vue数据监听深度解析

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

【rust】10 project、crate、mod、pub、use、项目目录层级组织、概念和实战

文章目录 一、项目目录层级组织概念1.1 cargo new 创建同名 的 Project 和 crate1.2 多 crate 的 package1.3 mod 模块1.3.1 创建嵌套 mod1.3.2 mod 树1.3.3 用路径引用 mod1.3.3.1 使用绝对还是相对? 1.3.4 代码可见性1.3.4.1 pub 关键字1.3.4.2 用 super 引用 mod1.3.4.3 用…

阿里Java开发手册(黄山版) LeetCode刷题手册 免费下载

目录 一、阿里Java开发手册(黄山版) 二、LeetCode刷题手册 三、获取方式 今天给大家推荐两个程序员的辅助利器&#xff01;都是平时开发&#xff0c;刷算法能经常用到的书籍&#xff0c;怕百度云分享会失效&#xff0c;获取方式在最下面&#xff0c;永久有效。 一、阿里Jav…

C++ 反向迭代器的设计与实现

在本文开始之前&#xff0c;先明晰几个 关键词 的含义&#xff08;T : 模板参数&#xff09;&#xff1a; Ref : T& / const T&Ptr : T* / const T* 一、反向迭代器设计的上帝视角 我们希望将 反向迭代器 设计成一种适配器——传 list::iterator 得到 list 的反向迭代…

Lastools工具使用

Lastools工具使用 1、介绍 官网链接 常用的功能 las2las可以进行点云拼接las2txt可以将点云中的有效信息转换为txt文档&#xff08;如xyz坐标&#xff09;lasmerge可以将多个LAS/LAZ文件合并为一个文件Laszip将LAS文件高速压缩到LAZ而不会丢失信息las2text将LAS/LAZ转换为可…

C++初阶:模版相关知识的进阶内容(非类型模板参数、类模板的特化、模板的分离编译)

结束了常用容器的介绍&#xff0c;今天继续模版内容的讲解&#xff1a; 文章目录 1.非类型模版参数2.模板的特化2.1模版特化引入和概念2.2函数模版特化2.3类模板特化2.3.1全特化2.3.1偏特化 3. 模板分离编译3.1分离编译概念3.2**模板的分离编译**分析原因 1.非类型模版参数 模板…

设计模式(五)-观察者模式

前言 实际业务开发过程中&#xff0c;业务逻辑可能非常复杂&#xff0c;核心业务 N 个子业务。如果都放到一块儿去做&#xff0c;代码可能会很长&#xff0c;耦合度不断攀升&#xff0c;维护起来也麻烦&#xff0c;甚至头疼。还有一些业务场景不需要在一次请求中同步完成&…

如何在Linux系统Docker部署Wiki.js容器并结合内网穿透实现远程访问本地知识库

文章目录 1. 安装Docker2. 获取Wiki.js镜像3. 本地服务器打开Wiki.js并添加知识库内容4. 实现公网访问Wiki.js5. 固定Wiki.js公网地址 不管是在企业中还是在自己的个人知识整理上&#xff0c;我们都需要通过某种方式来有条理的组织相应的知识架构&#xff0c;那么一个好的知识整…

适用Java SpringBoot项目的分布式锁

在分布式系统中&#xff0c;常用到分布式锁&#xff0c;它有多中实现方式&#xff0c;如&#xff1a;基于redis&#xff0c;database&#xff0c;zookeeper等。Spring integration组件有这三种服务的分布式锁实现&#xff0c;今天来看看用的比较多的redis和database实现方式。 …

【EI会议征稿通知】2024年第三届生物医学与智能系统国际学术会议(IC-BIS 2024)

2024年第三届生物医学与智能系统国际学术会议&#xff08;IC-BIS 2024&#xff09; 2024 3rd International Conference on Biomedical and Intelligent Systems (IC-BIS 2024) 2024年第三届生物医学与智能系统国际学术会议&#xff08;IC-BIS 2024&#xff09; 将于2024年4月…