架构师必备之性能测试--数据库压测工具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

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

相关推荐
indexsunny11 小时前
互联网大厂Java求职面试实战:微服务与Spring生态全攻略
java·数据库·spring boot·安全·微服务·面试·消息队列
沪漂阿龙11 小时前
别再让数据库“吃”脏数据了!一文讲透MySQL约束,从入门到精通
数据库·mysql
智算菩萨11 小时前
【计算机组成原理】5 计算机发展历程:从ENIAC到量子计算机的架构演进史
架构·发展史·计算机发展
ai_xiaogui11 小时前
AIStarter新版后端原型图详解:架构全面升级+共享环境一键部署,本地AI模型插件工作流管理新时代来临(2026开发者必看)
人工智能·架构·推动开源ai落地·原型图细节·aistarter新版·aistarter新版原型图·架构全面升级+共享环境一键部署
uzong12 小时前
AI Agent 是什么,如何理解它,未来挑战和思考
人工智能·后端·架构
2401_8735449213 小时前
使用Python进行PDF文件的处理与操作
jvm·数据库·python
虾..13 小时前
多路复用 --- select系统调用
服务器·数据库·sql
杨云龙UP13 小时前
mysqldump逻辑备份文件恢复总结:全库恢复、单库恢复,一篇讲明白
linux·运维·服务器·数据库·mysql·adb
ybwycx13 小时前
mysql重置root密码(适用于5.7和8.0)
数据库·mysql·adb