CherieLi Student

sysbench安装使用和测试

2019-09-26
CherieLi

sysbench是一个开源的、模块化的、跨平台的多线程性能测试工具,可以用来进行CPU、内存、磁盘I/O、线程、数据库的性能测试。目前支持的数据库有MySQL、Oracle和PostgreSQL。当前功能允许测试的系统参数有:

file I/O performance (文件I / O性能)

scheduler performance (调度性能)

memory allocation and transfer speed (内存分配和传输速度)

POSIX threads implementation performance (POSIX线程执行绩效)

database server performance (OLTP benchmark) (数据库服务器性能)

下载sysbench的源代码: https://github.com/akopytov/sysbench/archive/1.0.17.zip
将sysbench-1.0.17.zip上传到安装目录。 使用如下命令解压: unzip sysbench-1.0.17.zip
进入sysbench-1.0.17目录中
cd sysbench-1.0.17/
然后执行
./autogen.sh
然后执行如下命令 ./configure –with-mysql-includes=/home3/mysql/include –with-mysql-libs=/home3/mysql/lib
Sysbench编译时需要通过 –-with-mysql-includes 和 –with-mysql-libs 选项对相关路径进行指定。
然后就可以执行
make 和make install

可测试的类型

fileio

cpu

memory

threads

mutex

测试CPU

查看CPU相关信息:cat /proc/cpuinfo

./sysbench –test=cpu –cpu-max-prime=2000 run

测试线程

./sysbench –test=threads –num-threads=500 –thread-yields=100 –thread-locks=4 run

测试IO

seqwr顺序写入

seqrewr 顺序重写

seqrd 顺序读取

rndrd 随机读取

rndwr 随机写入

rndrw 混合随机读、写

./sysbench –test=fileio –num-threads=16 –file-total-size=2G –file-test-mode=rndrw prepare

./sysbench –test=fileio –num-threads=16 –file-total-size=2G –file-test-mode=rndrw run

./sysbench –test=fileio –num-threads=16 –file-total-size=2G –file-test-mode=rndrw cleanup

测试内存

./sysbench –test=memory –memory-block-size=8k –memory-total-size=1G run

测试mutex

查找帮助:

./sysbench –test=mutex help

./sysbench –test=mutex –num-threads=100 –mutex-num=1000 –mutex-locks=100000 –mutex-loops=10000 run

sysbench 0.5 oltp测试结合了lua脚本

用lua脚本测试

1) Prepare 操作。在这个步骤中,会对将要进行的测试进行数据准备,包括创建表和向表中插入数据。
2) Run 操作。主要测试步骤,在这个步骤中可以指定多种选项来,以对不同的测试情况进行模拟。
3) Cleanup 操作。将测试数据删除,主要是删除表。

./sysbench –test=/home/lzy/code/src/tools/sysbench0.5/share/sysbench/oltp.lua –mysql-host=127.0.0.1 –mysql-port=33071 –mysql-user=root –mysql-password= –mysql-db=test –mysql-table-engine=innodb –oltp-table-size=25000 –oltp-tables-count=50 –db-driver=mysql prepare

./sysbench –test=/home/lzy/code/src/tools/sysbench0.5/share/sysbench/oltp.lua –mysql-host=127.0.0.1 –mysql-port=33071 –mysql-user=root –mysql-password= –mysql-db=test –mysql-table-engine=innodb –oltp-table-size=25000 –oltp-tables-count=50 –db-driver=mysql run

/sysbench –test=/home/lzy/code/src/tools/sysbench0.5/share/sysbench/oltp.lua –mysql-host=127.0.0.1 –mysql-port=33071 –mysql-user=root –mysql-password= –mysql-db=test –mysql-table-engine=innodb –oltp-table-size=25000 –oltp-tables-count=50 –db-driver=mysql cleanup

–test=tests/db/oltp.lua 表示调用 tests/db/oltp.lua 脚本进行 oltp 模式测试

–mysql-table-engine=innodb 表示选择测试表的存储引擎 –oltp_tables_count=10 表示会生成 10 个测试表 –oltp-table-size=100000 表示每个测试表产生的记录行数为 100000 –rand-init=on 表示每个测试表都是用随机数据来填充的 –oltp-read-only=off:表示不止产生只读SQL,也就是使用oltp.lua时会采用读写混合模式。默认 off,如果设置为on,则不会产生update,delete,insert的sql –num-threads=8 表示发起 8个并发连接

–oltp-test-mode=nontrx:执行模式,这里是非事务式的。可选值有simple,complex,nontrx。默认是complex

  • simple:简单查询,SELECT c FROM sbtest WHERE id=N
  • complex (advanced transactional):事务模式在开始和结束事务之前加上begin和commit, 一个事务里可以有多个语句,如点查询、范围查询、排序查询、更新、删除、插入等,并且为了不破坏测试表的数据,该模式下一条记录删除后会在同一个事务里添加一条相同的记录。
  • nontrx (non-transactional):与simple相似,但是可以进行update/insert等操作,所以如果做连续的对比压测,你可能需要重新cleanup,prepare。
–oltp-skip-trx=[on off]:省略begin/commit语句。默认是off

–report-interval=10 表示每10秒输出一次测试进度报告 –rand-type=uniform 表示随机类型为固定模式,其他几个可选随机模式:uniform(均匀分布),gaussian(高斯分布),special(空间分布),pareto(帕累托),默认为special –max-time=120 表示最大执行时长为 120秒 –max-requests=0 表示总请求数为 0,因为上面已经定义了总执行时长,所以总请求数可以设定为 0;也可以只设定总请求数,不设定最大执行时长 –percentile=99 表示设定采样比例,默认是 95%,即丢弃1%的长请求,在剩余的99%里取最大值

结果分析

OLTP test statistics:
	Queries performed:
       read:          140000 //读总数
       write:          40000 //写总数
       other:          20000 //其他操作总数(SELECT、INSERT、UPDATE、DELETE之外的操作,例如COMMIT等)
       total:          200000 //全部总数
   transactions:       10000 (30.04 per sec.) // TPS 总事务数(每秒事务数)
   read/write requests: 180000 (540.77 per sec.) //QPS 读写总数(每秒读写次数)
   other operations:    20000 (60.09 per sec.)//其他操作总数(每秒其他操作次数)
   ignored errors:       0 (0.00 per sec.) //忽略的错误数
   reconnects:         0(0.00 per sec.)

General statistics:
total time:                          332.8696s //总耗时。可以通过max-time参数指定
total number of events:              10000 //总事件数,一般与transactions相同
total time taken by event execution: 332.8291s //所有事务耗时相加(不考虑并行因素),如果不并发执行需要花的时长
response time:(单个请求的时间)
min:                                  15.24ms //最小耗时
avg:                                  33.28ms //平均耗时
max:                               60018.48ms //最大耗时
approx.  95 percentile:               40.64ms //超过95%平均耗时

Threads fairness:
events (avg/stddev):           10000.0000/0.00
execution time (avg/stddev):    332.8291/0.00

测试指标

· TPS:Transaction Per Second,数据库每秒执行的事务数,每个事务中包含18条SQL语句。

  • transactions: 精确的说是这一项后面的TPS 。但如果使用了-oltp-skip-trx=on,这项事务数恒为0,需要用total number of events 去除以总时间,得到tps(其实还可以分为读tps和写tps)

· QPS:Query Per Second,数据库每秒执行的SQL数,包含insert、select、update、delete等。

  • read/write requests: 用它除以总时间,得到吞吐量QPS

各个脚本含义

1) common.lua 脚本。这个公用的脚本,所有其他的脚本(除了select_random_points.lua和select_random_ranges.lua )都加载了这个脚本。在这个脚本中主要实现了 prepare 命令和 cleanup 命令的功能。而其他脚本就对应了具体 run 令时要做的工作。所以在 prepare 和 run 命令时,可以选用任意一个脚本运行,但是需要指定除表的个数,即 oltp-tables-count 选项。创建的表的结构(MySQL数据库)
2) select.lua 脚本。这个脚本是在表中进行单点查询。(随机用的是uniform策略)
3) insert.lua 脚本。这个脚本是在表中进行 insert 操作。(随机用的是uniform策略)
4) delete.lua 脚本。这个脚本是在表中进行 delete 操作。(随机用的是uniform策略)
5) parallel_prepare.lua 脚本。这个脚本是多线程创建表,根据线程数选项,开多个线程进行数据库表的创建。
6) oltp_simple 脚本。同 select.lua。
7) oltp.lua 脚本。如果数据库支持事务,就使用 BEGIN/COMMIT语句,如果不支持,就使用 LOCK TABLES/UNLOCK TABLES 语句,可以使用 –oltp-skip-trx 选项,跳过。在这个模式中,操作不会对原本的数据库产生影响,因为插入一个数据,之后就会立即删除这个数据,所以数据库可以重复使用。可以指定在一次事务中,指定单点查询、简单范围查询(between)、聚集函数 SUM()、Order by、distinct c、索引更新或非索引更新语句的数目。
8) update_index.lua 脚本。这个脚本是对表中的索引字段进行更新。如果基准测试的时候,你只想比较两个项目的update(或insert)效率,那可以不使用oltp脚本,而直接改用update_index.lua

9) update_non_index.lua 脚本。这个脚本对表中的非索引字段进行更新。

参考文档

1.sysbench 安装、使用和测试


上一篇 可变参数模板

Comments

Content