性能测试工具SysBench

sysbench是一个模块化的、跨平台、多线程基准测试工具,主要用于评估测试各种不同系统参数下的数据库负载情况。
它主要包括以下几种方式的测试:
1、cpu性能
2、磁盘io性能
3、mutex性能
4、内存分配及传输速度
5、POSIX线程性能
6、数据库性能(OLTP基准测试)
目前sysbench主要支持 MySQL,pgsql,oracle 这3种数据库。

一、安装

安装环境:CentOS7

1、二进制包安装

curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.rpm.sh | bash 
yum -y install sysbench
sysbench --version  # 验证sysbench是否安装成功

2、源码安装

(1)安装依赖包

    yum -y install make automake libtool pkgconfig libaio-devel
    yum -y install mariadb-devel openssl-devel  # 安装MySQL依赖
    yum -y install postgresql-devel # 安装PostgreSQL依赖

(2)下载源码包,解压安装

https://github.com/akopytov/sysbench  # 下载地址
unzip  sysbench-master.zip
cd sysbench-master
./autogen.sh   # 生成configure文件
./configure  
--prefix=/usr/local/sysbench/  #安装路径
--with-mysql  
--with-mysql-includes=/usr/local/mysql/include  # mysql安装在/usr/local/
--with-mysql-libs=/usr/local/mysql/lib 
make
make install

vim /etc/profile  # 添加环境变量
# sysbench path 
PATH=$PATH:/usr/local/sysbench/bin 
export PATH   #添加以上两行,路径改为自己安装的路径位置                                                                                                                                               
source /etc/profile  #生效环境变量

sysbench --version # 测试安装成功
sysbench 1.1.0

二、语法介绍

sysbench [options]... [testname] [command] 

testname 为测试对象,一般是CPU、内存、IO等

command:

  • prepare:prepare 阶段 这个阶段是用来做准备的。比如说建立好测试用的表、并向表中填充数据。
  • run: run阶段 这个阶段是才是去执行压力测试
  • cleanup: cleanup这个阶段是去清除数据的,也就是prepare阶段初始化好的表要都drop掉
  • help: 使用sysbench --help查看帮助信息

options:(下表列出了options的常用选项和默认值)

选项 描述 默认值
--threads 要创建的工作线程总数 1
--events 请求总数的限制。0(默认值)表示没有限制 0
--time 限制总执行时间(以秒为单位)。0表示没有限制 10
--warmup-time 预热时间,默认值为0 0
--rate 平均交易率。该数字指定平均每个线程每秒应执行的事件数。0(默认值)表示无限速率,即事件尽可能快地执行 0
--thread-init-timeout 工作线程初始化的等待时间(以秒为单位) 30
--thread-stack-size 每个线程的堆栈大小 32K
--report-interval 以秒为单位统计定期报告中间信息 。此选项生成的统计信息是按时间间隔而不是累积。0表示禁用中间报告 0
--debug 打印更多调试信息 off
--validate 尽可能验证测试结果 off
--help 有关一般语法或指定测试的帮助 off
--verbosity 详细级别(0 - 仅关键消息,5 - 调试) 4
--percentile sysbench测量所有已处理请求的执行时间,以显示最小,平均和最大执行时间等统计信息。此选项允许指定要计数的查询执行时间的百分比 95
--luajit-cmd 执行LuaJIT控制命令。此选项相当于luajit -j

三、使用方法

1、CPU性能测试

sysbench cpu help  # 查看帮助信息
sysbench 1.1.0 (using bundled LuaJIT 2.1.0-beta3)

cpu options:
  --cpu-max-prime=N upper limit for primes generator [10000]

测试命令 :最大质数发生器数量为2000,线程数为2

sysbench cpu --cpu-max-prime=20000 --threads=2 run
image.png

从执行结果可以看到CPU的运行速度,一些统计数据和延迟大小等信息

2、内存分配及传输速度

sysbench memory help # 查看帮助信息
sysbench 1.1.0 (using bundled LuaJIT 2.1.0-beta3)

memory options:
  --memory-block-size=SIZE    size of memory block for test [1K]
  --memory-total-size=SIZE    total size of data to transfer [100G]
  --memory-scope=STRING       memory access scope {global,local} [global]
  --memory-hugetlb[=on|off]   allocate memory from HugeTLB pool [off]
  --memory-oper=STRING        type of memory operations {read, write, none} [write]
  --memory-access-mode=STRING memory access mode {seq,rnd} [seq]

测试命令 :测试整个过程是在内存中传输 2G 的数据量,每个 block 大小为 8K。

sysbench memory --memory-block-size=8k --memory-total-size=2G run
image.png

3、磁盘IO性能测试

sysbench fileio help  # 查看帮助信息
sysbench 1.1.0 (using bundled LuaJIT 2.1.0-beta3)

fileio options:
  --file-num=N                  number of files to create [128]
  --file-block-size=N           block size to use in all IO operations [16384]
  --file-total-size=SIZE        total size of files to create [2G]
  --file-test-mode=STRING       test mode {seqwr, seqrewr, seqrd, rndrd, rndwr, rndrw}
  --file-io-mode=STRING         file operations mode {sync,async,mmap} [sync]
  --file-async-backlog=N        number of asynchronous operatons to queue per thread [128]
  --file-extra-flags=[LIST,...] list of additional flags to use to open files {sync,dsync,direct} []
  --file-fsync-freq=N           do fsync() after this number of requests (0 - don't use fsync()) [100]
  --file-fsync-all[=on|off]     do fsync() after each write operation [off]
  --file-fsync-end[=on|off]     do fsync() at the end of test [on]
  --file-fsync-mode=STRING      which method to use for synchronization {fsync, fdatasync} [fsync]
  --file-merged-requests=N      merge at most this number of IO requests if possible (0 - don't merge) [0]
  --file-rw-ratio=N             reads/writes ratio for combined test [1.5]
  • 测试命令
  • (1)prepare阶段,生成需要的测试文件,完成后会在当前目录下生成很多小文件
sysbench  fileio --threads=2 --file-total-size=1G --file-test-mode=rndrw prepare
image.png
  • (2)run阶段
sysbench  fileio --threads=2 --file-total-size=1G --file-test-mode=rndrw run
image.png
  • (3)清理测试时生成的文件
sysbench  fileio --threads=2 --file-total-size=1G --file-test-mode=rndrw cleanup
image.png

4、mutex性能测试

sysbench mutex help  # 查看帮助信息
sysbench 1.1.0 (using bundled LuaJIT 2.1.0-beta3)

mutex options:
  --mutex-num=N   total size of mutex array [4096]
  --mutex-locks=N number of mutex locks to do per thread [50000]
  --mutex-loops=N number of empty loops to do outside mutex lock [10000]

命令测试:线程数为2,数组互斥的总大小4096,每个线程互斥锁的数量为50000,内部互斥锁的空循环数量为10000

sysbench mutex --threads=2 --mutex-num=4096 --mutex-locks=50000 --mutex-loops=10000 run
image.png

5、POSXI线程性能

sysbench threads help  # 查看帮助信息
sysbench 1.1.0 (using bundled LuaJIT 2.1.0-beta3)

threads options:
  --thread-yields=N number of yields to do per request [1000]
  --thread-locks=N  number of locks per thread [8]

命令测试:线程数为2,每个请求产生多少个线程为100,每个线程的锁的数量为4

sysbench threads --threads=2 --thread-yields=100 --thread-locks=4 run
image.png

6、数据库性能(OLTP基准测试)

装完sysbench后,/usr/local/sysbench/ share/sysbench下对数据库压力测试的lua文件。
image.png
数据库压力测试通常三个阶段,准备数据、压测数据、清理数据
  • 第一阶段数据准备
mysql -uroot -p               #进入数据库
> create database sbtest;     #创建测试数据库

sysbench /usr/local/sysbench/share/sysbench/oltp_read_write.lua  
--mysql-host=localhost   #数据库的IP
--mysql-port=3306    #数据库的端口
--mysql-user=root    #数据库用户名
--mysql-password='test'  #用户密码
--mysql-socket=/data/mysql/mysql.sock   #socket的路径
--mysql-db=sbtest   #数据库名字,默认为sysbench,需要提前创建创好
--db-driver=mysql  #用到的数据库类型 
--tables=10    #生成10张表
--table-size=50000   #每个表的行数
--threads=4    #启动多少个线程,即模拟多少个用户
prepare
image.png

登录数据库检查生成表和数据情况,已经生成了10张表
image.png
  • 第二阶段数据运行测试
情况一:查询
sysbench /usr/local/sysbench/share/sysbench/oltp_read_write.lua  
--mysql-host=localhost  
--mysql-port=3306   
--mysql-user=root  
--mysql-password='test'  
--mysql-socket=/data/mysql/mysql.sock   
--mysql-db=sbtest  
--db-driver=mysql   
--tables=10  
--table-size=50000    
--report-interval=10  
--threads=128  
--time=600  
run
image.png

备注:重要指标
QPS(Query per second) 每秒查询量:639.04
TPS(Transaction per second)每秒事务量 12766.92

情况二:在每个查询的事物里面添加 INSERT/UPDATE/DELDETE 操作
sysbench /usr/local/sysbench/share/sysbench/oltp_read_write.lua  
--mysql-host=localhost  
--mysql-port=3306   
--mysql-user=root  
--mysql-password='Live400.Com'  
--mysql-socket=/data/mysql/mysql.sock   
--mysql-db=sbtest  
--db-driver=mysql   
--tables=10  
--table-size=50000   
--delete_inserts=10  
--index_updates=10  
--non_index_updates=10   
--report-interval=10  
--threads=4  
--time=60  
run 
image.png
  • 第三阶段删除测试数据
sysbench /usr/local/sysbench/share/sysbench/oltp_read_write.lua  
--mysql-host=localhost  
--mysql-port=3306   
--mysql-user=root  
--mysql-password='test'  
--mysql-socket=/data/mysql/mysql.sock   
--mysql-db=sbtest  
--db-driver=mysql   
--tables=10  
--table-size=50000   
--delete_inserts=10  
--index_updates=10  
--non_index_updates=10   
--report-interval=10  
--threads=4  
--time=60   
cleanup
image.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,186评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,858评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,620评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,888评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,009评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,149评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,204评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,956评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,385评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,698评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,863评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,544评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,185评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,899评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,141评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,684评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,750评论 2 351

推荐阅读更多精彩内容

  • 一、Sysbench介绍 SysBench是一个模块化的、跨平台、多线程基准测试工具,主要用于评估测试各种不同系统...
    张伟科阅读 9,234评论 0 5
  • sysbench是一个模块化的、跨平台、多线程基准测试工具,主要用于评估测试各种不同系统参数下的数据库负载情况。它...
    一起代码_尼科阅读 11,142评论 0 53
  • 前言 作为一名后台开发,对数据库进行基准测试,以掌握数据库的性能情况是非常必要的。本文介绍了MySQL基准测试的基...
    hekang01阅读 1,021评论 0 1
  • 洗脸的时候学校广播放起新裤子《没有理想的人不伤心》,跟着唱起来。 “没有文化的人不伤心,他不伤心。”愁然,怒意和悲...
    深海垃圾場阅读 163评论 0 0
  • 以自己浅薄学识,谈谈简单入门的体育锻炼小知识。上文所说,我们应该怎么知道自己运动的强度是不是适中呢?有氧耐力和...
    晨风er阅读 370评论 9 4