sysbench是一款开源的多线程性能测试工具,可以执行CPU/内存/线程/IO/数据库等方面的性能测试。
作为开发人员,需要对服务的性能有所了解,qps、tps、rt等是检验一个服务的基本性能指标,本文重点从sysbench的安装及实际测试大概掌握下数据库的压测流程和数据库的性能指标信息
1.sysbench软件安装
安装分为两种情况:在线安装和离线安装
- 1.1 在线安装(centos系统):
ruby
curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.rpm.sh | sudo bash
sudo dnf -y install sysbench
不同系统可以参考官方链接进行安装:sysbench开源git地址
- 1.2 离线安装
1、将安装包放到服务器并解压
tar -xvzf sysbench-xxxx.tar.gz
安装包下载地址:sysbench1.0.20软件包
2、安装相关组件
yum install m4 autoconf automake libtool
yum -y install mysql-devel(mysql数据库依赖库,其他数据库要换成对应的xxx-devel)
3、运行自动生成脚本
bash
./autogen.sh
如果没权限用chmod +x autogen.sh命令修改
4、检查并安装编译
go
./configure
make && make install
5、验证是否安装成功
bash
进入到安装目录,执行命令
cd /usr/bin/
./sysbench --version
至此,安装流程已完成,可以在/usr/share/sysbench目录下看到相关脚本文件
2.性能测试流程
本文以测试数据库测试为例进行说明,大致分为三大步,prepare(建库建表及初始化数据阶段)、run(测试阶段)和cleanup(清除库表和对应的数据信息)阶段
2.1 初始化
首先,进入到sysbench的安装目录下
bash
cd /usr/bin
运行如下初始化命令,执行命令前,需要提前在数据库上创建好sbtest数据库,因为lua脚本中默认连接的是该数据库,如果库不存在,对应的命令可能会报错
ini
sysbench \
--mysql-host=${tidb_host} \
--mysql-port=4000 \
--mysql-user=root \
--mysql-db=sbtest \
--time=100 \
--threads=16 \
--report-interval=10 \
--db-driver=mysql \
--rand-type=uniform \
--rand-seed=$RANDOM \
--tables=16 \
--table-size=10000000
\ oltp_common
\ prepare
命令行中的参数根据自己的实际情况进行设置,如果数据库使用了haproxy进行了负载代理,对应的host和port换成负载的端口,上述对应的是tidb数据库的端口。
上述命令中,含义是创建 16 张表。每张表1000w行数据。运行时每10秒报告一次实时性能情况。并发访问的线程数有16个。总运行时100秒,其他代表数据库连接信息
2.2 数据预热
ini
sysbench \
--mysql-host=${tidb_host} \
--mysql-port=4000 \
--mysql-user=root \
--mysql-db=sbtest \
--time=100 \
--threads=16 \
--report-interval=10 \
--db-driver=mysql \
--rand-type=uniform \
--rand-seed=$RANDOM \
--tables=16 \
--table-size=10000000 \
oltp_common \
prewarm
2.3压测
ini
sysbench \
--mysql-host=${tidb_host} \
--mysql-port=4000 \
--mysql-user=root \
--mysql-db=sbtest \
--time=100 \
--threads=${threads} \
--report-interval=10 \
--db-driver=mysql \
--rand-type=uniform \
--rand-seed=$RANDOM \
--tables=16 \
--table-size=10000000 \
${test} \
run
<math xmlns="http://www.w3.org/1998/Math/MathML"> t e s t 变量换成 s y s b e n c h 对应的 l u a 脚本名称,可以在 / u s r / s h a r e / s y s b e n c h 目录下查看脚本名称,可以分别测试下 o l t p p o i n t s e l e c t 、 o l t p u p d a t e i n d e x 、 o l t p u p d a t e n o n i n d e x 、 o l t p r e a d w r i t e 几种情况下的性能指标,将 {test}变量换成sysbench对应的lua脚本名称,可以在/usr/share/sysbench目录下查看脚本名称,可以分别测试下oltp_point_select、oltp_update_index、oltp_update_non_index、oltp_read_write 几种情况下的性能指标,将 </math>test变量换成sysbench对应的lua脚本名称,可以在/usr/share/sysbench目录下查看脚本名称,可以分别测试下oltppointselect、oltpupdateindex、oltpupdatenonindex、oltpreadwrite几种情况下的性能指标,将{test}依次换成相应名称执行多次即可看到控制台的输出信息 比如
ini
sysbench \
--mysql-host=${tidb_host} \
--mysql-port=4000 \
--mysql-user=root \
--mysql-db=sbtest \
--time=100 \
--threads=${threads} \
--report-interval=10 \
--db-driver=mysql \
--rand-type=uniform \
--rand-seed=$RANDOM \
--tables=16 \
--table-size=10000000 \
oltp_point_select \
run
2.4 清除数据
ini
sysbench \
--mysql-host=${tidb_host} \
--mysql-port=4000 \
--mysql-user=root \
--mysql-password='xxxxxx' \
--mysql-db=sbtest \
--time=100 \
--threads=16 \
--report-interval=20 \
--db-driver=mysql \
--rand-type=uniform \
--rand-seed=$RANDOM \
--tables=16 \
--table-size=10000000 \
oltp_common \
cleanup
好了,数据库测试流程基本就是这些,对于新搭建好的数据库服务,可以参考整个流程进行一个简单的性能压测,以便对数据库的基本指标信息有个大概的了解。如果这篇文章对你有所帮助的话,希望可以一件三连哦