使用sysbench压力测试MySQL(一)(r11笔记第3天)

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: 今天用了下新版本的sysbench,发现和早期版本的差别还不小,确实有不少有趣的地方,是的,我们继续测试下MySQL。 如果大家看过《高性能MySQL》这本书,就会发现里面对于基准测试的描述非常全面和专业,里面的测试场景都是基于早期版本,这个版本有一个不太方便的地方就是无法抓取到更细节的数据,只有平均值,所以要不需要定制脚本,要不就需要更多的测试场景和时间来得到一个报告。

今天用了下新版本的sysbench,发现和早期版本的差别还不小,确实有不少有趣的地方,是的,我们继续测试下MySQL。

如果大家看过《高性能MySQL》这本书,就会发现里面对于基准测试的描述非常全面和专业,里面的测试场景都是基于早期版本,这个版本有一个不太方便的地方就是无法抓取到更细节的数据,只有平均值,所以要不需要定制脚本,要不就需要更多的测试场景和时间来得到一个报告。

sysbench目前最新的版本是1.0.3,里面的interval参数确实很赞,也是驱动我尝试的最大动力,因为能够得到一个相对实时的数据变化。

sysbench的作者

在MySQL这个圈子里,Alexey Kopytov 很多人都知道,他是sysbench的作者,而且同时他就职于Percona,曾经在Oracle参与MySQL的研发工作。Percona Server和XtraBackup工具就是他们合理开发的。所以sysbench原生支持MySQL也就显得顺利成章,一个好的工具离不开那些低调的技术牛人。

img_2773efb6a702200de7d798e96b05abf6.jpe

Alexey Kopytov is a Principal Software Engineer at Percona. Before joining Percona in 2010 he was a member of the MySQL development team at Oracle. His focus at Percona is development of both Percona Server and Percona XtraBackup.

安装sysbench新版本的坑

安装sysbench的步骤常规就是四步:

  1. 运行autogent.sh脚本

  2. ./configure

  3. make

  4. make install

但是这样一个常规的工作在新版本中需要注意一些地方,可能会导致你安装失败,比如autoconf的版本需要在2.63以上,RedHat 5的版本中默认是2.59,满足不了,而且最重要的是如果你使用的版本低于RedHat 6,很可能遇到下面的这种错误信息:

lj_ir.c:64: error: ‘exp2’ undeclared here (not in a function)

lj_ir.c:64: error: ‘log2’ undeclared here (not in a function)

make[3]: *** [lj_ir.o] Error 1如果c功底很扎实,可以trace一把,也可能找到那些过期的设置,做一个屏蔽,我是最后果断放弃了。一来升级autoconf版本,二来调试这些边界问题,最关键的RedHat 5竟然默认没有安装Lua,这可是新版本中的标配。

所以安装新版还是直接在RedHat 6以上的版本使用为佳。

如果你使用sysbench抛出了MySQL链接库的问题,这个处理相对要常规一些。

# sysbench --test=oltp help

sysbench: error while loading shared libraries: libmysqlclient.so.20: cannot open shared object file: No such file or directory我们可以添加一个软链接

ln -s /usr/local/mysql/lib/libmysqlclient.so.20 /usr/lib/

如果没有生效,在ld.so.conf中配置生效即可

添加路径至/etc/ld.so.conf

ldconfig

Lua的安装

Lua脚本是sysbench新版本中的标配,所以你得熟悉下基本的安装,而且Lua语言相对比较简洁,源代码几百KB,用c开发,非常适合作为一门语言的完整学习捷径,总体看了下感觉很不错。

wget -c http://www.lua.org/ftp/lua-5.2.0.tar.gz

解压后切换到目录下

make linux

make install

压力参数前的准备

我们打算测试的MySQL默认的参数如下,如果猛然看看这个配置好像没有太大的问题,其实有几个,我们通过性能测试来说明。

port=3306

socket=/home/mysql/s1/s1.sock

server_id=3306

gtid_mode=ON

enforce_gtid_consistency=ON

master_info_repository=TABLE

relay_log_info_repository=TABLE

binlog_checksum=NONE

log_slave_updates=ON

#log_bin=binlog

binlog_format=ROWsysbench中原来的test选项已经失效。

# sysbench --test=oltp help

WARNING: the --test option is deprecated. You can pass a name or path on the command line without any options.我们开启sysbench的测试,可以使用如下的命令生成数据。

sysbench /home/sysbench/sysbench-1.0.3/src/lua/oltp_read_write.lua --mysql-user=root --mysql-port=3306 --mysql-socket=/home/mysql/s1/s1.sock --mysql-host=localhost --mysql-db=sysbenchtest --tables=10 --table-size=5000000 --threads=30 --events=5000000 --report-interval=5prepare

这里有几个地方要提一下,首先新版的sysbench需要指定一个Lua模板,在sysbench安装目录下自带了一批模板,src/lua目录的文件如下,我们选择读写的oltp模板。

bulk_insert.lua

internal

Makefile

Makefile.am

Makefile.in

oltp_common.lua

oltp_delete.lua

oltp_insert.lua

oltp_point_select.lua

oltp_read_only.lua

oltp_read_write.lua

oltp_update_index.lua

oltp_update_non_index.lua

oltp_write_only.lua

select_random_points.lua

select_random_ranges.lua

原本的参数

--oltp-test-mode=complex已经失效,

--mysql-table-engine=innodb 选项也不存在

--oltp-num-tables=10 需要改为--tables=10

--oltp-table-size=5000000 需要改为--table-size=5000000

测试场景对比1

对于数据库是否开启binlog,开启前后对于数据库本身的性能影响到底有多大,这个我一直没有一个相对清晰的感受,决定逐步来测试一下,我首先设置了线程数为30,50,100,150为样本进行测试。

开启30个线程的测试。,对于50个,100个只需要调整--threads即可。

sysbench /home/sysbench/sysbench-1.0.3/src/lua/oltp_read_write.lua --mysql-user=root --mysql-port=3306 --mysql-socket=/home/mysql/s1/s1.sock --mysql-host=localhost --mysql-db=sysbenchtest --tables=10 --table-size=5000000 --threads=30--report-interval=5 --time=300 run得到的结果类似下面的输出,每5秒钟输出一次,tps,qps这些一目了然。

img_ac3e67d4fa38d974190757ddfe3388fa.png

我测试了3分钟之内(说实话时间有点短)。但是还能看出一些效果。对于线程30,线程50等的场景测试下,可以看到在线程100~150之间测试结果的数据结果有些不稳定,逐步呈现下降趋势。

img_05ff4926f0ca14563edb64d21d407be4.png

然后我测试了开启binlog之后的数据。

img_116f9083339b9cfe00b9178a23b498e9.png

这个数据可以基本看出线程100和线程150的TPS差别不大。

而是否开启binlog的差别在短时间内的比较来看,差别到底有多少?这样对比来看相对就清晰一些了。左边是未开启binlog,右边是开启之后的。

img_8f0bf48c8e13a841fba78d0870700203.jpe

通过上面的测试我们可以看到一些瓶颈,而且在后期加压的时候,发现加不上去了,一个主要原因就在于支持的最大连接数不够。我们对此做了一个简单的优化,那就是调节innodb_buffer_pool_size,默认竟然是100多M,支持的连接数是151个。

调整innodb_buffer_pool_size为24G,支持的连接数为3000个,我们继续测试。

其它条件不变的情况下,TPS可以翻一倍,达到1200~1500,QPS为20000左右。

img_60aacf2f4a09c2f0495d1e789cd1ed96.jpe

当然按照这种加压方式,当加压测试到线程数300就又扛不住了。所以通过这些测试能够马上发现很多潜在的问题。

FATAL: mysql_stmt_prepare() failed

FATAL: MySQL error: 1461 "Can't create more than max_prepared_stmt_count statements (current value: 16382)"

FATAL: `thread_init' function failed: /usr/local/share/sysbench/oltp_common.lua:282: SQL API error

FATAL: mysql_stmt_prepare() failed后续进行更多的测试,也会延长时间来得到一个相对更细致的报告。


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
20天前
|
关系型数据库 MySQL
【MySQL实战笔记】07 | 行锁功过:怎么减少行锁对性能的影响?-01
【4月更文挑战第18天】MySQL的InnoDB引擎支持行锁,而MyISAM只支持表锁。行锁在事务开始时添加,事务结束时释放,遵循两阶段锁协议。为减少锁冲突影响并发,应将可能导致最大冲突的锁操作放在事务最后。例如,在电影票交易中,应将更新影院账户余额的操作安排在事务末尾,以缩短锁住关键行的时间,提高系统并发性能。
15 4
|
5天前
|
存储 SQL 关系型数据库
MySQL万字超详细笔记❗❗❗
MySQL万字超详细笔记❗❗❗
43 1
MySQL万字超详细笔记❗❗❗
|
9天前
|
SQL 关系型数据库 MySQL
【MySQL系列笔记】MySQL总结
MySQL 是一种关系型数据库,说到关系,那么就离不开表与表之间的关系,而最能体现这种关系的其实就是我们接下来需要介绍的主角 SQL,SQL 的全称是 Structure Query Language ,结构化的查询语言,它是一种针对表关联关系所设计的一门语言,也就是说,学好 MySQL,SQL 是基础和重中之重。SQL 不只是 MySQL 中特有的一门语言,大多数关系型数据库都支持这门语言。
181 8
|
9天前
|
SQL 关系型数据库 MySQL
【MySQL系列笔记】常用SQL
常用SQL分为三种类型,分别为DDL,DML和DQL;这三种类型的SQL语句分别用于管理数据库结构、操作数据、以及查询数据,是数据库操作中最常用的语句类型。 在后面学习的多表联查中,SQL是分析业务后业务后能否实现的基础,以及后面如何书写动态SQL,以及完成级联查询的关键。
163 6
|
9天前
|
存储 关系型数据库 MySQL
【MySQL系列笔记】InnoDB引擎-数据存储结构
InnoDB 存储引擎是MySQL的默认存储引擎,是事务安全的MySQL存储引擎。该存储引擎是第一个完整ACID事务的MySQL存储引擎,其特点是行锁设计、支持MVCC、支持外键、提供一致性非锁定读,同时被设计用来最有效地利用以及使用内存和 CPU。因此很有必要学习下InnoDB存储引擎,它的很多架构设计思路都可以应用到我们的应用系统设计中。
156 4
|
9天前
|
SQL 存储 关系型数据库
【MySQL系列笔记】SQL优化
SQL优化是通过调整数据库查询、索引、表结构和配置参数等方式,提高SQL查询性能和效率的过程。它旨在减少查询执行时间、减少系统资源消耗,从而提升数据库系统整体性能。优化方法包括索引优化、查询重写、表分区、适当选择和调整数据库引擎等。
188 3
|
11天前
|
关系型数据库 MySQL 测试技术
sysbench 对MySQL压测100分钟的命令
使用 `sysbench` 对 MySQL 数据库进行性能测试(压测)时,首先确保 `sysbench` 和 MySQL 数据库已经安装,并且你有一个测试数据库可以使用。下面是一个针对 MySQL 数据库进行压测的示例命令,测试时长为 100 分钟(6000 秒)。 在运行此命令之前,请确保以下内容: - 使用适当的数据库连接参数(主机、端口、用户名、密码、数据库名)。 - 根据你的需求调整测试参数(如并发数、线程数、事务数等)。 以下是一个示例命令,使用 `sysbench` 对 MySQL 数据库进行压测 100 分钟: ```shell sysbench --db-driver=m
|
11天前
|
DataWorks NoSQL 关系型数据库
DataWorks操作报错合集之在使用 DataWorks 进行 MongoDB 同步时遇到了连通性测试失败,实例配置和 MongoDB 白名单配置均正确,且同 VPC 下 MySQL 可以成功连接并同步,但 MongoDB 却无法完成同样的操作如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
29 1
|
12天前
|
存储 关系型数据库 MySQL
RDS for MySQL测试
【4月更文挑战第28天】
|
17天前
|
存储 SQL 关系型数据库
Mysqlslap性能测试MySQL三种存储引擎
Mysqlslap性能测试MySQL三种存储引擎