MySQL 8.0 InnoDB压缩行格式性能测试(1)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
性能测试 PTS,5000VUM额度
简介: MySQL 8.0 InnoDB压缩行格式性能测试

1. 背景信息

1. 测试环境

2. 进行测试

2.1 所有数据可以加载到buffer pool中

2.1.1 数据压缩率

2.1.2 TPS相差值

2.1.3 平均延迟差值 avg Latency (ms)

2.1.4 99%延迟差值 99th percentile Latency (ms)

2.2 数据量超过内存ibp容量

2.2.1 数据压缩率

2.2.2 TPS相差值

2.2.3 平均延迟差值 avg Latency (ms)

2.2.4 99%延迟差值 99th percentile Latency (ms)

3. 总结延伸阅读

1. 背景信息

多年前我对InnoDB表压缩格式做了个简单的测试,得到的结论大概是:

按照这个结论,压缩行格式不建议用在TPS较高的OLTP场景,如果有类似的业务需要,可以考虑用TokuDB或RocksDB引擎。

尝试过用TokuDB当做Zabbix的后端数据库,效果还不错,详情见 迁移Zabbix数据库到TokuDB

不过,TokuDB现在已经基本被Percona抛弃了,还有这类业务需求时,可以考虑改用RocksDB引擎,可以参考这篇文章 MyRocks引擎:入坑须知

随着MySQL 8.0.20的发布,我又重燃了对compressed行格式的兴趣,今日就此再做了个简单测试。

1. 测试环境

本次测试的服务器配置是腾讯云"标准型S5"型CVM主机,具体配置是:

配置项 参数
CPU 4 Core(Intel(R) Xeon(R) Platinum 8255C CPU @ 2.50GHz)
内存 16GB
数据盘 500GB SSD云硬盘(理论最大随机IOPS值 16800,实际上最高也只能跑到10000不到)



my.cnf中InnoDB相关配置参数(其余采用默认设置)

innodb_flush_log_at_trx_commit=1
innodb_buffer_pool_size=8G
innodb_log_file_size = 2G



MySQL选用最新的8.0.20版本:

Server version:        8.0.20 MySQL Community Server - GPL

2. 进行测试

本次测试计划分为两种模式

a) 所有数据可以加载到buffer pool中

b) 数据量超过内存ibp容量

针对上述两种模式再分别对dynamic、compressed行格式的区别。

2.1 所有数据可以加载到buffer pool中

相应的sysbench参数如下:

TBLCNT=50 #共50个表

DURING=900 #一次压测900秒(5分钟)
ROWS=100000 #每个表10万行数据
MAXREQ=5000000 #每个线程执行500万次请求

2.1.1 数据压缩率

未压缩格式(KB) 压缩格式(KB) 压缩率(1-压缩格式/未压缩格式)
1638456 1218588 25.63%

2.1.2 TPS相差值


image.png


数值说明:这表示 未压缩格式 相对于 压缩格式的提升比例,例如上图中第一列的 71.11%,表示 在OLTP模式下,并发256线程压测时,未压缩行格式的TPS相对于压缩行格式增加71.11%,下同。

2.1.3 平均延迟差值 avg Latency (ms)


image.png


2.1.4 99%延迟差值 99th percentile Latency (ms)


image.png


根据测试结果的几点结论:

a) 当数据都能放在buffer pool中的时候,是否采用压缩格式对于读的业务场景影响很小。

b) 当数据都能放在buffer pool中的时候,混合OLTP业务场景或者以更新为主的业务场景中,Dynamic行格式明显要比Compressed行格式的性能更好。

综上,当数据量比较小的时候,并且读多写少的业务场景中,可以考虑使用Compressed行格式。而如果是写多读少的业务场景,则最好使用Dynamic行格式。


            </div>
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
9天前
|
Java 关系型数据库 MySQL
自动化测试项目实战笔记(一):JDK、Tomcat、MySQL、Jpress环境安装和搭建
这篇文章是关于自动化测试项目实战笔记,涵盖了JDK、Tomcat、MySQL、Jpress环境的安装和搭建过程,以及测试用例和常见问题总结。
21 1
自动化测试项目实战笔记(一):JDK、Tomcat、MySQL、Jpress环境安装和搭建
|
17天前
|
存储 缓存 关系型数据库
详细解析MySQL中的innodb和myisam
总之,InnoDB和MyISAM各有千秋,选择合适的存储引擎应基于对应用程序特性的深入理解,以及对性能、数据完整性和可扩展性的综合考量。随着技术发展,InnoDB因其全面的功能和日益优化的性能,逐渐成为更广泛场景下的首选。然而,在特定条件下,MyISAM依然保留其独特的价值。
56 0
|
2月前
|
监控 关系型数据库 MySQL
在Linux中,mysql的innodb如何定位锁问题?
在Linux中,mysql的innodb如何定位锁问题?
|
2月前
|
SQL 存储 关系型数据库
"MySQL增列必锁表?揭秘InnoDB在线DDL,让你的数据库操作飞一般,性能无忧!"
【8月更文挑战第11天】在数据库领域,MySQL凭借其稳定高效的表现深受开发者喜爱。对于是否会在给数据表添加列时锁表的问题,MySQL的行为受版本、存储引擎等因素影响。从5.6版起,InnoDB支持在线DDL,可在改动表结构时保持表的可访问性,避免长时间锁表。而MyISAM等则需锁表完成操作。例如,在使用InnoDB的表上运行`ALTER TABLE users ADD COLUMN email VARCHAR(255);`时,通常不会完全锁表。虽然在线DDL提高了灵活性,但复杂操作或大表变更仍可能暂时影响性能。因此,进行结构变更前应评估其影响并择机执行。
62 6
|
2月前
|
关系型数据库 MySQL OLTP
性能工具之 MySQL OLTP Sysbench BenchMark 测试示例
【8月更文挑战第6天】使用 pt-query-digest 工具分析 MySQL 慢日志性能工具之 MySQL OLTP Sysbench BenchMark 测试示例
234 0
性能工具之 MySQL OLTP Sysbench BenchMark 测试示例
|
3月前
|
存储 SQL 关系型数据库
(十三)MySQL引擎篇:半道出家的InnoDB为何能替换官方的MyISAM?
MySQL是一款支持拔插式引擎的数据库,在开发过程中你可以根据业务特性,从支持的诸多引擎中选择一款适合的,例如MyISAM、InnoDB、Merge、Memory(HEAP)、BDB(BerkeleyDB)、Example、Federated、Archive、CSV、Blackhole.....
|
2月前
|
关系型数据库 MySQL 测试技术
使用docker部署MySQL测试环境
使用docker部署MySQL测试环境
30 0
|
3月前
|
数据库
基于PHP+MYSQL开发制作的趣味测试网站源码
基于PHP+MYSQL开发制作的趣味测试网站源码。可在后台提前设置好缘分, 自己手动在数据库里修改数据,数据库里有就会优先查询数据库的信息, 没设置的话第一次查询缘分都是非常好的 95-99,第二次查就比较差 , 所以如果要你女朋友查询你的名字觉得很好 那就得是她第一反应是查和你的缘分, 如果查的是别人,那不好意思,第二个可能是你。
57 3
|
2月前
|
SQL 缓存 关系型数据库
MySQL配置简单优化与读写测试
MySQL配置简单优化与读写测试
|
3月前
|
存储 关系型数据库 MySQL
MySQL InnoDB存储引擎的优点有哪些?
上述提到的特性和优势使得InnoDB引擎非常适合那些要求高可靠性、高性能和事务支持的场景。在使用MySQL进行数据管理时,InnoDB通常是优先考虑的存储引擎选项。
140 0