【MySQL】数据库压测神器之sysbench

写在开头

说起数据库的性能,我们一般都会说到这个数据库处理读写的能力怎么样,以及磁盘会有SSDHDD的区别,以及数据库的类型,关系还是内存等等多个分类,但是对于我们来说如果要去熟悉一个新的数据库来说,肯定得先知道这个数据库的性能,不管哪个数据库,都离不开一个非常重要的part----压测,而且数据库的使用程度也会和这个part非常息息相关,所以这次和大家介绍一个数据库性能压测工具—sysbench

sysbench 简介

sysbench是一个模块化的,跨平台的,多线程基准测试工具,主要用于评估测试各种不同系统下数据库的不同参数情况下的表现性能。

sysbench安装

本文章基于最新版本1.0.20版本
1.tar包安装
wget https://github.com/akopytov/sysbench/archive/refs/tags/1.0.20.tar.gz
tar -xvf 1.0.20.tar.gz

2.yum安装
curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.rpm.sh | sudo bash
sudo yum -y install sysbench

sysbench主要功能

主要功能:
1.oltp_*.lua:类似 OLTP 的数据库基准测试集合
2.fileio:文件系统级别的基准测试
3.cpu:一个简单的 CPU 基准测试
4.内存:内存访问基准
5.线程:基于线程的调度程序基准
6.互斥量:POSIX 互斥量基准

可以看到sysbench的功能非常丰富,我们主要介绍用于压测数据库性能。

sysbench使用介绍示例

sysbench 使用流程
sysbench一般使用都经过下面三个步骤:

  1. PREPARE准备测试的环境
  2. RUN开始进行测试,获取测试数据
  3. CLEANUP 清理测试环境生成的数据以及文件

下面是一些系统方面的压测示例:
压测FileIO

sysbench fileio --threads=1 --file-total-size=10G --file-test-mode=rndrw --file-num=n prepare/run/cleanup 
#这里主要说一下网上很多说错了这几个的含义,这里纠正一下
seqrd Doing sequential read test --顺序读
seqwr Doing sequential write test --顺序写
seqrewr Doing sequential rewrite test --顺序重写
rndrd Doing random read test --随机读
rndwr Doing random write test --随机写
rndrw Doing random r/w test --随机读写

压测CPU性能

sysbench cpu --cpu-max-prime=20000 --threads=n run

压测内存读写性能

sysbench memory --threads=8 --memory-access-mode=seq --memory-oper=read/write/none run

压测线程调度

sysbench threads --threads=800 --thread-yields=100 --thread-locks=2 run

压测互斥量

sysbench mutex --threads=100 --mutex-num=1000 --mutex-locks=100000 --mutex-loops=10000 run

sysbench压测之OLTP数据库性能

这part是我们的重点,这里先介绍什么叫做OLTPOLTP指的就是数据库事务处理性能,一般数据库我们大方面可以分为两种方式OLTP事务性OLAP分析型.
sysbench实现数据库压测主要是通过一系列的 lua脚本实现的,如下:

$ whereis sysbench
sysbench: /usr/bin/sysbench /usr/share/sysbench
$ cd /usr/share/sysbench
$ ll
总用量 60
-rwxr-xr-x 1 root root  1452 425 2020 bulk_insert.lua
-rw-r--r-- 1 root root 14369 425 2020 oltp_common.lua
-rwxr-xr-x 1 root root  1290 425 2020 oltp_delete.lua
-rwxr-xr-x 1 root root  2415 425 2020 oltp_insert.lua
-rwxr-xr-x 1 root root  1265 425 2020 oltp_point_select.lua
-rwxr-xr-x 1 root root  1649 425 2020 oltp_read_only.lua
-rwxr-xr-x 1 root root  1824 425 2020 oltp_read_write.lua
-rwxr-xr-x 1 root root  1118 425 2020 oltp_update_index.lua
-rwxr-xr-x 1 root root  1127 425 2020 oltp_update_non_index.lua
-rwxr-xr-x 1 root root  1440 425 2020 oltp_write_only.lua
-rwxr-xr-x 1 root root  1919 425 2020 select_random_points.lua
-rwxr-xr-x 1 root root  2118 425 2020 select_random_ranges.lua

可以看到有很多种类型,这里我们简单介绍下这些lua脚本对应的功能:

脚本名称脚本作用
bulk_insert压测批量插入的性能脚本
oltp_common初始化脚本,表结构初始化,字段数据填充方式都在里面,很多脚本都会调用这个common脚本
oltp_delete事务性删除性能
oltp_insert事务性插入性能
oltp_point_select数据库点查性能
oltp_read_only数据库读性能
oltp_read_write数据库读写性能
oltp_update_index有索引情况下更新性能
oltp_update_non_index无索引情况下更新性能
oltp_write_only数据库写性能
select_random_points随机点查
select_random_ranges随机范围查询性能

可以看到可以sysbench可以实现非常多的维度场景下数据库的压测性能。
具体的sql我们也可以从oltp_common脚本中看到如下:
在这里插入图片描述

sysbench OLTP使用示例

sysbench /usr/share/sysbench/oltp_read_write.lua --mysql-host=localhost --mysql-port=6606 --mysql-socket=/data/mysql/mysql.sock --mysql-db=test1 --mysql-user=sys --mysql-password=1111 --tables=1 --table_size=1000 --time=10 --threads=2 prepare/run/cleanup
对于参数,大家可以在使用脚本--help查看具体有哪些参数

自定义压测

大家都知道,sysbench默认使用的表结构非常简单,可能压测出来的性能和我们真正的数据库表现性能有所差距,那么,我们要如何自定义呢?
前面我们说过oltp_common是初始化,那么其实只需要修改其中几段代码即可。
1.修改表结构为我们的复杂表结构
在这里插入图片描述
2.修改插入语句以及对应列数据生成方式
增加对应想有值的列:
在这里插入图片描述
增加随机字符串生成的列值:
在这里插入图片描述

最后

最后说一句,作为一个DBA来说,sysbench是一个非常好的协助工具,但是有一点需要补充的是,我们刚才可以看到有很多维度的压测,
一般来说作为DBA我们会去压测除读写性能和索引更新性能外,更重要的一点是根据大家自己的业务场景去做压测,然后选择合适的数据库

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

渔不是鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值