MySQL 8.0.35 企业版比社区版性能高出 25%?
前言
说实话,比较一下这两个 MySQL 发行版,并不会让我很兴奋。这是因为在我关于 MySQL 的记忆中,如果是谈代码库时,两个发行版之间没有真正的区别。
据我所知,企业版的差异在于附加的插件/组件,因此除非您明确需要使用它们,否则两个版本应该是相同或接近的。
那么你可能会说,为什么要写这篇文章?😉
好吧,在一篇 Oracle 的博客及其开场白 戳中了这一点:MySQL 8.0.35 的企业版与社区版相比,性能方面是有所提高的。
以下是该文章的部分结果截图:
根据显示的结果来看,让我特别想进一步测试一下,但服务器的配置方式有点麻烦。
在博客的测试中,测试数据库总大小为 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,以下是测试计划。
正如计划中所表达的,我们将使用两个不同的数据集,一个使用更多的表和每个表更少的数据,另一个使用每个表更多的数据和更少的表。在这两种情况下,数据集维度都远远大于可用内存。
正如上面博客中提到的,我们将在三个时刻进行测试:
- 只读。这也是一个 Pre 操作,它将在数据加载后为我们提供 READ 统计信息,因此完全内部排序。
- 写操作,可能会导致(并且将会)页面拆分/合并和“碎片”。
- 读取后写入以确定第二个时刻的影响。
我使用 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 获取

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Spring Boot 拒绝用 AI 为仓库自动生成注释
一名开发者近日在 Spring Boot 提交了一项 PR,旨在使用 AI 模型为整个 Spring Boot 代码库添加注释: 此代码变更为整个 Spring Boot 代码库添加了注释。本 PR 的内容完全由自定义微调 AI 模型创建。 我们正在对我们的工具进行大规模实验,在数百万行代码上运行该工具,以识别任何 bug 或错误。在此代码库中运行时,该工具的编译成功率高达 99.9%。 我们可以选择放弃这些代码,或者将其发布并作为一项贡献。我们选择了后者,并决定打开此 Pull Request。 但 Spring Boot 项目负责人 Phil Webb 对此进行了婉拒。并表示,相较自动生成,团队成员更喜欢人工手动的方式;且自动生成这种无差别的方式,很可能给整个仓库增添许多不必要的麻烦。 “我认为您的工具对于正在学习代码库或需要某些部分的额外帮助的人来说可能非常有用。” Reddit 上的一些讨论也表达了对这一提议的不看好: “哇,这太可怕了。我真希望这只是个玩笑,提出要求的人只是在嘲笑这个想法。” “如果这不是纯粹为了吸引眼球,那么我想公关背后的开发人员可以说是真的缺乏开发技能。”...
- 下一篇
弱结构化日志 Flink SQL 怎么写?SLS SPL 来帮忙
作者:潘伟龙(豁朗) 背景 日志服务 SLS 是云原生观测与分析平台,为 Log、Metric、Trace 等数据提供大规模、低成本、实时的平台化服务,基于日志服务的便捷的数据接入能力,可以将系统日志、业务日志等接入 SLS 进行存储、分析;阿里云 Flink 是阿里云基于 Apache Flink 构建的大数据分析平台,在实时数据分析、风控检测等场景应用广泛。阿里云 Flink 原生支持阿里云日志服务 SLS 的 Connector,用户可以在阿里云 Flink 平台将 SLS 作为源表或者结果表使用。 阿里云 Flink SLS Connector 对于结构化的日志非常直接,通过配置,SLS 的日志字段可以与 Flink SQL 的 Table 字段列一一映射;然后仍有大量的业务日志并非完全的结构化,例如会将所有日志内容写入一个字段中,需要正则提前、分隔符拆分等手段才可以提取出结构化的字段,基于这个场景,本文介绍一种使用 SLS SPL 配置 SLS Connector 完成数据结构化的方案,覆盖日志清洗与格式规整场景。 弱结构化日志处理的痛点 弱结构化日志现状与结构化处理需求的矛...
相关文章
文章评论
共有0条评论来说两句吧...