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

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

相关推荐
kakacc:4 分钟前
记录一次巧妙的SQL:一对多关联导致的 sum () 、count()等group函数重复计算问题
数据库·sql
心随雨下24 分钟前
Redis中Geospatial 实际应用指南
数据库·redis·分布式·缓存
thginWalker26 分钟前
《架构设计精讲》学习笔记
架构
黑夜管理员27 分钟前
Sql Server安装报错“服务没有及时响应启动或控制请求”
数据库·sql server
文火冰糖的硅基工坊38 分钟前
《投资-113》价值投资者的认知升级与交易规则重构 - 复利故事终止的前兆
重构·架构·投资
NineData1 小时前
NineData云原生智能数据管理平台新功能发布|2025年9月版
数据库·云原生·devops·ninedata·数据库迁移·数据复制·风险sql管控
junnhwan1 小时前
【苍穹外卖笔记】Day04--套餐管理模块
java·数据库·spring boot·后端·苍穹外卖·crud
妖孽白YoonA2 小时前
NestJS - 循环依赖地狱及其避免方法
架构·nestjs
一枚正在学习的小白2 小时前
PG数据文件位置迁移
linux·运维·服务器·数据库
真的想不出名儿2 小时前
上传头像到腾讯云对象存储-前端基于antdv
java·数据库·腾讯云