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

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

相关推荐
Suwg2092 分钟前
《手写Mybatis渐进式源码实践》实践笔记(第七章 SQL执行器的创建和使用)
java·数据库·笔记·后端·sql·mybatis·模板方法模式
雪球不会消失了2 分钟前
MVC架构模式
架构·mvc
丁总学Java5 分钟前
优化 invite_codes 表的 SQL 创建语句
java·数据库·sql
hmbbpdx19 分钟前
MySql B树 B+树
数据库·b树·mysql
编程阿布34 分钟前
Python基础——多线程编程
java·数据库·python
冰镇毛衣36 分钟前
4.5 数据表的外连接
数据库·sql·mysql
又蓝36 分钟前
使用 Python 操作 MySQL 数据库的实用工具类:MySQLHandler
数据库·python·mysql
庄小焱42 分钟前
Java开发经验——数据库开发经验
数据库·系统设计·代码重构
开心工作室_kaic43 分钟前
springboot498基于javaweb的宠物猫认养系统(论文+源码)_kaic
java·开发语言·数据库·美食
mqiqe1 小时前
Linux 安装rpm
linux·运维·数据库