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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 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>
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
QT应用编程:基于QT+HTTP协议设计的屏幕共享软件(只要有浏览器就可以访问)
QT应用编程:基于QT+HTTP协议设计的屏幕共享软件(只要有浏览器就可以访问)
658 0
QT应用编程:基于QT+HTTP协议设计的屏幕共享软件(只要有浏览器就可以访问)
|
OLAP 数据库
数据仓库--维度建模
数据仓库--维度建模
|
Java 数据库连接 数据库
装饰者模式学习笔记
快速学习装饰者模式
107 0
装饰者模式学习笔记
|
API 调度 C语言
视频图像处理中的错帧同步是怎么实现的?
错帧同步,简单来说就是把当前的几帧缓冲到子线程中处理,主线程直接返回子线程之前的处理结果,属于典型的以空间换时间策略。
525 0
视频图像处理中的错帧同步是怎么实现的?
|
前端开发 NoSQL Java
2022年Java精选视频,动力节点Java自学全套视频资源
今天整理了java开发的学习路线和相关的学习视频资源,非常适合零基础入门java的小伙伴,希望大家在学习的时候,能够节省时间。 这里有你需要掌握的所有前沿技术,史上最全的Java学习路线资源,从基础到项目实战,而且是最新的教程,按照以下顺序学就完了!纯干货!
575 0
|
5天前
|
云安全 人工智能 安全
AI被攻击怎么办?
阿里云提供 AI 全栈安全能力,其中对网络攻击的主动识别、智能阻断与快速响应构成其核心防线,依托原生安全防护为客户筑牢免疫屏障。
|
15天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
9天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
589 212
下一篇
oss云网关配置