架构师必备之性能测试--数据库压测工具sysbench的安装及使用

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

好了,数据库测试流程基本就是这些,对于新搭建好的数据库服务,可以参考整个流程进行一个简单的性能压测,以便对数据库的基本指标信息有个大概的了解。如果这篇文章对你有所帮助的话,希望可以一件三连哦

相关推荐
松果猿1 分钟前
空间数据库学习(二)—— PostgreSQL数据库的备份转储和导入恢复
数据库
c无序4 分钟前
【Docker-7】Docker是什么+Docker版本+Docker架构+Docker生态
docker·容器·架构
无名之逆10 分钟前
Rust 开发提效神器:lombok-macros 宏库
服务器·开发语言·前端·数据库·后端·python·rust
s91236010110 分钟前
rust 同时处理多个异步任务
java·数据库·rust
数据智能老司机18 分钟前
CockroachDB权威指南——CockroachDB 架构
数据库·分布式·架构
IT成长日记23 分钟前
【Kafka基础】Kafka工作原理解析
分布式·kafka
矿渣渣34 分钟前
RM Cortex-A7 架构中“SEV”汇编指令解析
汇编·架构
hzulwy40 分钟前
Redis常用的数据结构及其使用场景
数据库·redis
程序猿熊跃晖1 小时前
解决 MyBatis-Plus 中 `update.setProcInsId(null)` 不生效的问题
数据库·tomcat·mybatis
uhakadotcom2 小时前
Flutter入门指南:快速构建高性能移动应用
面试·架构·github