sysbench使用方法

sysbench压力测试工具简介:

sysbench是一个开源的、模块化的、跨平台的多线程性能测试工具,可以用来进行CPU、内存、磁盘I/O、线程、数据库的性能测试。目前支持的数据库有MySQL、Oracle和PostgreSQL。以下操作都将以支持postgresql数据库为例进行。
Sysbench的测试主要包括以下几个方面:
1、磁盘io性能
2、cpu性能
3、内存分配及传输速度
4、POSIX线程性能
5、调度程序性能
6、数据库性能(OLTP基准测试).

一、安装sysbench

在指定的目录下解压安装

cd /tmp/
wget https://codeload.github.com/akopytov/sysbench/tar.gz/1.0.17 && mv 1.0.17 sysbench-1.0.17.tar.gz
tar -xzvf /tmp/sysbench-1.0.17.tar.gz -C /home/ && cd /home/sysbench-1.0.17

安装依赖包

RHEL/CentOS

yum -y install make automake libtool pkgconfig libaio-devel

For MySQL support, replace with mysql-devel on RHEL/CentOS 5

yum -y install mariadb-devel openssl-devel

For PostgreSQL support

yum -y install postgresql-devel

编译sysbench

Build and Install

chmod 755 -R /home/sysbench-1.0.17/ 
./autogen.sh

Add --with-pgsql to build with PostgreSQL support

可以通过./configure --help查看对应命令,通过--with-mysql/pgsql/oracle和--without-mysql/pgsql/oracle使用或者放弃对应数据库依赖。

./configure --with-pgsql

make -j 128

make install

查看版本信息,如果可以正常查看到版本信息而不报错,则说明sysbench安装成功。

sysbench --version

编译完成sysbench目录:

/usr/local/share/sysbench

压测对应sql脚本所在目录:

/usr/local/share/sysbench/tests/include/oltp_legacy

创建表对应脚本

/usr/local/share/sysbench/tests/include/oltp_legacy/common.lua

二、sysbench 参数详解

2.1 sysbench命令语法

sysbench命令语法如下:

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

options(参数选项):用于指定sysbench的并发度、压测时长等参数。
testname(测试名称):用于指定sysbench的基准测试名称,可选项包括oltp_read_ write、oltp_read_only、oltp_write_only、oltp_insert、oltp_delete、oltp_update_index、oltp_update_non_index等
command(测试命令):用于指定sysbench执行什么测试命令,可选项包括prepare、run、cleanup等。

2.2 options

下面逐一介绍相关选项。

1.常规选项

--threads=N:指定线程数,默认值为1,相当于sysbendh 0.5及之前版本中的--num-threads=N选项。
--events=N:指定总的请求数,默认值为0,表示不限制请求数,相当于sysbench 0.5及之前版本中的--max-requests选项。
--time=N:指定压测时长,默认值为10s,相当于sysbench 0.5及之前版本中的--max-time=N选项。
--forced-shutdown=STRING:有效值为off、N、N%(默认值为off)。off表示不启用强制关机功能;N表示在--time选项指定的时间到期后,再过N秒强制关机;N%表示在--time选项指定的时间到期后,再过--time*N%时间强制关机。
--thread-stack-size=SIZE:指定每个线程的堆栈大小,默认值为64KB。
--rate=N:限定事务速率(tps),默认值为0,表示不限制,相当于sysbench 0.5及之前版本中的--tx-rate=N选项。
--report-interval=N:指定中间统计结果报告的间隔时间,默认值为0,表示关闭中间统计结果报告输出。
--report-checkpoints=[LIST,...]:用逗号分隔的一组列表值,这些值在执行sysbench压测时被依次读取,表示执行多少秒就打印一次统计报告(例如--report- checkpoints=10,20,30,表示当执行10s、20s、30s时分别打印一次统计报告。注意,该数值是指从执行sysbench开始到现在的时间),默认值为空,表示在--time选项指定的时间到期后才打印统计报告。
--debug[=on|off]:是否打印调试信息,默认值为off。
--help[=on|off]:是否打印帮助信息,默认值为off。
--version[=on|off]:是否打印版本信息,默认值为off。

2.伪随机数创建选项

--rand-type=STRING:随机数分布类型,可选项包括uniform、gaussian、special、pareto,默认值为special。
--rand-spec-iter=N:随机数生成的迭代次数,默认值为12次。
--rand-spec-pct=N:对特定随机数分布来说被视为“特殊”值的百分比,默认值为1。
--rand-spec-res=N:对特定随机数分布来说“特殊”值的百分比,默认值为75。
--rand-seed=N:随机数发生器的种子。当该选项设置为0时,表示使用当前时间作为RNG种子。
--rand-pareto-h=N:用于指定pareto随机分布的h参数,默认值为0.2。

3.日志选项

--verbosity=N:日志打印的详细程度,5表示打印debug级别以上的日志,0表示只打印critical级别以上的日志。默认值为3。
--percentile=N:在延迟时间统计中选择哪个百分位数,可选范围为(1~100),默认值为95。如果设置为0,则表示禁用延迟时间统计功能。
--histogram[=on|off]:是否打印延迟时间直方图报告,默认值为off。

4.常规数据库选项

--db-driver=STRING:指定数据库驱动程序(即指定数据库类型),当前版本支持MySQL和PostgreSQL。
--db-ps-mode=STRING:prepare命令使用模式,有效值为auto和disable,默认值为auto,在高并发压力下建议使用disable。
--db-debug[=on|off]:是否打印数据库的调试信息,默认值为off。

5.MySQL选项

--mysql-host=MySQL服务器主机,默认值为localhost。
--mysql-port=MySQL服务器端口号,默认值为3306。
--mysql-socket= MySQL服务器Socket文件目录。
--mysql-user=连接MySQL服务器的用户名,默认值为sbtest。
--mysql-password=连接MySQL服务器的密码。
--mysql-db=连接MySQL服务器的数据库名,默认值为sbtest。
--mysql-ssl[=on|off]:连接MySQL服务器是否使用SSL,默认值为off。
--mysql-ssl-cipher=连接MySQL服务器使用SSL时的Cipher。
--mysql-compression[=on|off]:连接MySQL服务器是否使用压缩,默认值为off。
--mysql-debug[=on|off]:连接MySQL服务器是否跟踪所有的客户端库调用,默认值为off。
--mysql-ignore-errors=是否忽略MySQL返回的错误,默认值为[1213,1020,1205]。
--mysql-dry-run[=on|off]:是否空跑,只是调用MySQL客户端API,但是不真正执行。

6.pgsql选项

--pgsql-host= PostgreSQL服务器主机,默认值为localhost。
--pgsql-port= PostgreSQL服务器端口,默认值为5432。
--pgsql-user=连接PostgreSQL服务器的用户名,默认值为sbtest。
--pgsql-password=连接PostgreSQL服务器的密码。
--pgsql-db=连接PostgreSQL服务器的数据库名,默认值为sbtest。

7.其他选项

通过使用如下命令来查看额外的关于测试名称(事务模型)命令选项,只需要任意指定一个测试名称即可。

指定oltp_read_write测试名称来查看额外的帮助选项

[root@localhost ]# sysbench oltp_read_write help  

oltp_read_write options:

  --distinct_ranges=N Number of SELECT DISTINCT queries per transaction [1]

  --sum_ranges=N Number of SELECT SUM() queries per transaction [1]

  --skip_trx[=on|off] Don't start explicit transactions and execute all queries in the AUTOCOMMIT mode [off]

各选项解释如下。

--distinct_ranges=N:指定在每个事务中SELECT DISTINCT查询的执行次数,默认值为1。
-sum_ranges=N:指定在每个事务中SELECT SUM()查询的执行次数,默认值为1。
--skip_trx[=on|off]:指定在AUTOCOMMIT(自动提交)模式下是否需要跳过启动显式事务(使用START语句显式启动一个事务),默认值为off。
--secondary[=on|off]:指定是否需要使用一个二级索引来代替主键索引,默认值为off。
--create_secondary[=on|off]:指定除主键之外,是否还需要创建一个二级索引,默认值为on。
--index_updates=N:指定在每个事务中使用索引执行UPDATE语句的次数,默认值为1。
--range_size=N:指定在每个事务中范围SELECT查询的条件值,默认值为100。
--auto_inc[=on|off]:指定是否需要使用自增列的自增值作为主键值,如果不使用自增值,则使用sysbench自动生成的ID值作为主键值,默认值为on。
--delete_inserts=N:指定在每个事务中DELETE/INSERT组合语句的数量,默认值为1。
--tables=N:指定并行压测的表数量。
--mysql_storage_engine=STRING:指定表的存储引擎,默认值为InnoDB。
--non_index_updates=N:指定在每个事务中不使用索引执行UPDATE语句的次数,默认值为1。
--table_size=N:指定每个表的数据总量,默认值为10 000。
--pgsql_variant=STRING:当用PostgreSQL驱动程序运行时使用此PostgreSQL变体。目前唯一支持的变体是“redshift”。启用后,将自动禁用create_secondary,并将--delete_inserts选项设置为0。
--simple_ranges=N:指定在每个事务中简单范围SELECT查询(这里指的是BETWEEN范围查询)的次数,默认值为1。
--order_ranges=N:指定在每个事务中SELECT ORDER BY查询的次数,默认值为1。
--range_selects[=on|off]:指定是否需要打开或关闭所有的范围SELECT查询,默认值为on。
--point_selects=N:指定在每个事务中单行SELECT查询的次数,默认值为10。
提示:

每一种测试名称对应的Lua脚本中都定义了需要使用的DML测试语句类型,每一种DML语句类型都可以通过选项单独指定在每一个事务中需要执行多少次。例如,在oltp_read_write测试名称中,一共有9种DML语句类型,按照默认的每一种语句的执行次数计算,在每一个事务中一共有18条语句,每一种DML语句类型的默认执行次数如下:
* 简单等值SELECT语句:默认为10次。
* 范围SELECT(BETWEEN)语句:默认为1次。
* SELECT SUM()语句:默认为1次。
* SELECT ORDER BY:默认为1次。
* SELECT DISTINCT语句:默认为1次。
* DELETE和INSERT组合语句:默认为1次。
* 使用索引的UPDATE语句:默认为1次。
* 不使用索引的UPDATE语句:默认为1次。
在执行oltp_read_write测试时,从MySQL的general_log中抓取的每个事务的语句数量也证实了,在默认的配置下一个事务中的语句数量为18条,如下图所示。

2.3 testname

testname用于指定sysbench的基准测试名称。基准测试包括:

oltp _*.lua,数据库基准测试Lua脚本集合。这是DBA日常经常需要用到的测试脚本。
fileio,文件系统级基准测试。
cpu,简单的CPU基准测试。
memory,内存访问基准测试。
threads,基于线程的调度器基准测试。
mutex,POSIX互斥基准测试。
提示:在实际执行时,对于Lua新格式脚本,可以只写脚本名称(不写.lua后缀),如oltp_read_only,不再需要像sysbench 0.5及之前版本那样使用--test选项来指定。

1.sysbench Lua脚本介绍

Sysbench 1.0.x版本中的Lua脚本代码比0.5.x版本工整得多,并且对结构进行了重新设计,大部分SQL语句都被整合到了oltp_common.lua脚本中集中定义,其他Lua脚本只需要加载这个脚本进行调用即可。另外,还对原来的delete.lua、select.lua、update*.lua、insert.lua脚本中的SQL语句进行了改进,将其嵌套到begin和commit语句中。

通过RPM包安装的sysbench 1.0.x版本中的Lua脚本有两个目录,如下所示。

[root@localhost~]# ls -lh /usr/share/sysbench/ /usr/share/sysbench/tests/include/\ oltp_legacy

/usr/share/sysbench/: #对于sysbench 1.0.x版本,建议使用这个目录下的最新的Lua脚本。不过该脚本使用prepare命令执行语句,需要创建大量的prepare命令对象,调整参数的值

total 64K

-rwxr-xr-x 1 root root 1.5K May 15 22:14 bulk_insert.lua

-rw-r--r-- 1 root root  14K May 15 22:14 oltp_common.lua

-rwxr-xr-x 1 root root 1.1K May 15 22:14 oltp_delete.lua

-rwxr-xr-x 1 root root 2.0K May 15 22:14 oltp_insert.lua

-rwxr-xr-x 1 root root 1.3K May 15 22:14 oltp_point_select.lua

-rwxr-xr-x 1 root root 1.7K May 15 22:14 oltp_read_only.lua

-rwxr-xr-x 1 root root 1.8K May 15 22:14 oltp_read_write.lua

-rwxr-xr-x 1 root root 1.1K May 15 22:14 oltp_update_index.lua

-rwxr-xr-x 1 root root 1.2K May 15 22:14 oltp_update_non_index.lua

-rwxr-xr-x 1 root root 1.5K May 15 22:14 oltp_write_only.lua

-rwxr-xr-x 1 root root 1.9K May 15 22:14 select_random_points.lua

-rwxr-xr-x 1 root root 2.1K May 15 22:14 select_random_ranges.lua

drwxr-xr-x 4 root root 4.0K Jun 15 15:53 tests

/usr/share/sysbench/tests/include/oltp_legacy: # 对于sysbench 1.0.x版本,在这个目录下保留了一些兼容之前版本写法的Lua脚本

total 52K

-rw-r--r-- 1 root root 1.2K May 15 22:14 bulk_insert.lua

-rw-r--r-- 1 root root 4.6K May 15 22:14 common.lua

-rw-r--r-- 1 root root  366 May 15 22:14 delete.lua

-rw-r--r-- 1 root root 1.2K May 15 22:14 insert.lua

-rw-r--r-- 1 root root 3.0K May 15 22:14 oltp.lua

-rw-r--r-- 1 root root  368 May 15 22:14 oltp_simple.lua

-rw-r--r-- 1 root root  527 May 15 22:14 parallel_prepare.lua

-rw-r--r-- 1 root root  369 May 15 22:14 select.lua

-rw-r--r-- 1 root root 1.5K May 15 22:14 select_random_points.lua

-rw-r--r-- 1 root root 1.6K May 15 22:14 select_random_ranges.lua

-rw-r--r-- 1 root root  369 May 15 22:14 update_index.lua

-rw-r--r-- 1 root root  578 May 15 22:14 update_non_index.lua

关于Lua语法请参考:http://www.runoob.com/lua/lua-tutorial.html

2.自定义Lua脚本

为了实现自定义测试,读者也可以自定义Lua脚本,使用sysbench进行测试。

下面是一个简单的示例。

function prepare()

    db_query("CREATE TABLE t (a INT)")

    db_query("INSERT INTO t VALUES (1)")

end



function event()

    db_query("UPDATE t SET a = a + " .. sb_rand(1, 1000))

end



function cleanup()

    db_query("DROP TABLE t")

end

使用sysbench测试如下:

# calls prepare()
[root@localhost~]# sysbench --test=test.lua prepare
# calls event() in a loop
[root@localhost~]# sysbench --test=test.lua --num-threads=16 --report-interval=1 run

[ 1s] threads: 16, tps: 0.00, reads: 0.00, writes: 13788.65, response time: 1.43ms (95%)

[ 2s] threads: 16, tps: 0.00, reads: 0.00, writes: 14067.56, response time: 1.40ms (95%)

...
$ sysbench --test=test.lua cleanup # calls cleanup()

2.4 command

command将由sysbench传递给内置的testname或testname指定的Lua脚本。该命令指定testname需要执行的操作。

以下是典型的测试命令及其描述。

prepare:执行准备工作。例如,在磁盘上创建必要的测试文件以进行fileio测试,或者在测试数据库上新建100万行数据以执行数据库基准测试。
run:使用testname参数指定的压测脚本执行对应的测试。
cleanup:在测试结束后删除临时数据或文件。
help:显示使用testname参数指定的压测脚本的相关帮助信息,包括该压测脚本参数的完整列表。例如sysbench oltp_write_only help,可以查看oltp_write_only压测脚本支持的所有可选参数。

三、sysbench压测postgresql

host=11.44.50.38 # 实例或者节点IP
port=11086 #实例或者节点端口
tables=2000 # 需要生成数据存储的表的个数
size=1000000 # 每张表数据的大小
threads=128 # 每次线程数,最好不要超过表的大小
user=tbase # 数据库用户名
passwd=Sky@2021 # 数据库用户密码
timestr=(date +"%Y%m%d%H%M%S") testdb=sysbench_{tables}_{size}_{timestr}

准备创建表和数据:

sysbench --db-driver=pgsql --time=1 --threads=10 --report-interval=5 --pgsql-host=192.168.12.128 --pgsql-port=5432 --pgsql-user=sysbenchuser --pgsql-password=sysbench@123 --pgsql-db=sysbench --tables=1 --table_size=10 oltp_read_write --db-ps-mode=disable prepare
[root@database sysbench-1.0.17]# sysbench --db-driver=pgsql --time=1 --threads=10 --report-interval=5 --pgsql-host=192.168.12.128 --pgsql-port=5432 --pgsql-user=sysbenchuser --pgsql-password=sysbench@123 --pgsql-db=sysbench --tables=1 --table_size=10 oltp_read_write --db-ps-mode=disable prepare
sysbench 1.0.17 (using bundled LuaJIT 2.1.0-beta2)

Initializing worker threads...

Creating table 'sbtest1'...
Inserting 10 records into 'sbtest1'
Creating a secondary index on 'sbtest1'...

测试数据库的只读性能,使用的是oltp_read_only模式:

sysbench --db-driver=pgsql --time=10 --threads=10 --report-interval=1 --pgsql-host=192.168.12.128 --pgsql-port=5432 --pgsql-user=sysbenchuser --pgsql-password=sysbench@123 --pgsql-db=sysbench --tables=1 --table_size=10  oltp_read_only --db-ps-mode=disable run
[root@database oltp_legacy]# sysbench --db-driver=pgsql --time=10 --threads=10 --report-interval=1 --pgsql-host=192.168.12.128 --pgsql-port=5432 --pgsql-user=sysbenchuser --pgsql-password=sysbench@123 --pgsql-db=sysbench --tables=1 --table_size=10  oltp_read_only --db-ps-mode=disable run
sysbench 1.0.17 (using bundled LuaJIT 2.1.0-beta2)

Running the test with following options:
Number of threads: 10
Report intermediate results every 1 second(s)
Initializing random number generator from current time


Initializing worker threads...

Threads started!

[ 1s ] thds: 10 tps: 419.20 qps: 6773.15 (r/w/o: 5925.76/0.00/847.39) lat (ms,95%): 28.67 err/s: 0.00 reconn/s: 0.00
[ 2s ] thds: 10 tps: 451.23 qps: 7223.75 (r/w/o: 6321.28/0.00/902.47) lat (ms,95%): 25.74 err/s: 0.00 reconn/s: 0.00
[ 3s ] thds: 10 tps: 447.98 qps: 7197.62 (r/w/o: 6300.67/0.00/896.95) lat (ms,95%): 26.20 err/s: 0.00 reconn/s: 0.00
[ 4s ] thds: 10 tps: 416.95 qps: 6653.14 (r/w/o: 5820.25/0.00/832.89) lat (ms,95%): 28.67 err/s: 0.00 reconn/s: 0.00
[ 5s ] thds: 10 tps: 420.01 qps: 6701.15 (r/w/o: 5861.13/0.00/840.02) lat (ms,95%): 28.16 err/s: 0.00 reconn/s: 0.00
[ 6s ] thds: 10 tps: 396.04 qps: 6384.62 (r/w/o: 5591.54/0.00/793.08) lat (ms,95%): 34.33 err/s: 0.00 reconn/s: 0.00
[ 7s ] thds: 10 tps: 441.83 qps: 7071.29 (r/w/o: 6187.63/0.00/883.66) lat (ms,95%): 26.68 err/s: 0.00 reconn/s: 0.00
[ 8s ] thds: 10 tps: 440.11 qps: 6966.72 (r/w/o: 6087.50/0.00/879.22) lat (ms,95%): 27.17 err/s: 0.00 reconn/s: 0.00
[ 9s ] thds: 10 tps: 430.86 qps: 6977.79 (r/w/o: 6115.07/0.00/862.73) lat (ms,95%): 26.20 err/s: 0.00 reconn/s: 0.00
[ 10s ] thds: 10 tps: 458.94 qps: 7305.02 (r/w/o: 6387.15/0.00/917.88) lat (ms,95%): 25.28 err/s: 0.00 reconn/s: 0.00
SQL statistics:
    queries performed:
        read:                            60676
        write:                           0
        other:                           8668
        total:                           69344
    transactions:                        4334   (432.36 per sec.)
    queries:                             69344  (6917.70 per sec.)
    ignored errors:                      0      (0.00 per sec.)
    reconnects:                          0      (0.00 per sec.)

General statistics:
    total time:                          10.0230s
    total number of events:              4334

Latency (ms):
         min:                                   18.37
         avg:                                   23.10
         max:                                   71.77
         95th percentile:                       27.66
         sum:                               100126.01

Threads fairness:
    events (avg/stddev):           433.4000/2.62
    execution time (avg/stddev):   10.0126/0.01


测试数据库的删除性能,使用的是oltp_delete模式:

sysbench --db-driver=pgsql --time=1 --threads=10 --report-interval=5 --pgsql-host=192.168.12.128 --pgsql-port=5432 --pgsql-user=sysbenchuser --pgsql-password=sysbench@123 --pgsql-db=sysbench --tables=1 --table_size=10  oltp_delete --db-ps-mode=disable run
[root@database oltp_legacy]# sysbench --db-driver=pgsql --time=1 --threads=10 --report-interval=5 --pgsql-host=192.168.12.128 --pgsql-port=5432 --pgsql-user=sysbenchuser --pgsql-password=sysbench@123 --pgsql-db=sysbench --tables=1 --table_size=10  oltp_delete --db-ps-mode=disable run
sysbench 1.0.17 (using bundled LuaJIT 2.1.0-beta2)

Running the test with following options:
Number of threads: 10
Report intermediate results every 5 second(s)
Initializing random number generator from current time


Initializing worker threads...

Threads started!

SQL statistics:
    queries performed:
        read:                            0
        write:                           5
        other:                           6032
        total:                           6037
    transactions:                        6037   (6000.24 per sec.)
    queries:                             6037   (6000.24 per sec.)
    ignored errors:                      0      (0.00 per sec.)
    reconnects:                          0      (0.00 per sec.)

General statistics:
    total time:                          1.0048s
    total number of events:              6037

Latency (ms):
         min:                                    0.15
         avg:                                    1.64
         max:                                   67.06
         95th percentile:                        2.43
         sum:                                 9898.02

Threads fairness:
    events (avg/stddev):           603.7000/16.21
    execution time (avg/stddev):   0.9898/0.01

测试数据库的更新索引字段的性能,使用的是oltp_update_index模式:

sysbench --db-driver=pgsql --time=1 --threads=10 --report-interval=5 --pgsql-host=192.168.12.128 --pgsql-port=5432 --pgsql-user=sysbenchuser --pgsql-password=sysbench@123 --pgsql-db=sysbench --tables=1 --table_size=10  oltp_update_index --db-ps-mode=disable run
[root@database oltp_legacy]# sysbench --db-driver=pgsql --time=1 --threads=10 --report-interval=5 --pgsql-host=192.168.12.128 --pgsql-port=5432 --pgsql-user=sysbenchuser --pgsql-password=sysbench@123 --pgsql-db=sysbench --tables=1 --table_size=10  oltp_update_index --db-ps-mode=disable run
sysbench 1.0.17 (using bundled LuaJIT 2.1.0-beta2)

Running the test with following options:
Number of threads: 10
Report intermediate results every 5 second(s)
Initializing random number generator from current time


Initializing worker threads...

Threads started!

SQL statistics:
    queries performed:
        read:                            0
        write:                           1
        other:                           4944
        total:                           4945
    transactions:                        4945   (4916.78 per sec.)
    queries:                             4945   (4916.78 per sec.)
    ignored errors:                      0      (0.00 per sec.)
    reconnects:                          0      (0.00 per sec.)

General statistics:
    total time:                          1.0045s
    total number of events:              4945

Latency (ms):
         min:                                    0.14
         avg:                                    2.01
         max:                                   65.96
         95th percentile:                        3.75
         sum:                                 9956.49

Threads fairness:
    events (avg/stddev):           494.5000/15.68
    execution time (avg/stddev):   0.9956/0.00

测试数据库的更新非索引字段的性能,使用的是oltp_update_non_index模式:

sysbench --db-driver=pgsql --time=1 --threads=10 --report-interval=5 --pgsql-host=192.168.12.128 --pgsql-port=5432 --pgsql-user=sysbenchuser --pgsql-password=sysbench@123 --pgsql-db=sysbench --tables=1 --table_size=10  oltp_update_non_index --db-ps-mode=disable run
[root@database oltp_legacy]# sysbench --db-driver=pgsql --time=1 --threads=10 --report-interval=5 --pgsql-host=192.168.12.128 --pgsql-port=5432 --pgsql-user=sysbenchuser --pgsql-password=sysbench@123 --pgsql-db=sysbench --tables=1 --table_size=10  oltp_update_non_index --db-ps-mode=disable run
sysbench 1.0.17 (using bundled LuaJIT 2.1.0-beta2)

Running the test with following options:
Number of threads: 10
Report intermediate results every 5 second(s)
Initializing random number generator from current time


Initializing worker threads...

Threads started!

SQL statistics:
    queries performed:
        read:                            0
        write:                           2
        other:                           5257
        total:                           5259
    transactions:                        5259   (5230.03 per sec.)
    queries:                             5259   (5230.03 per sec.)
    ignored errors:                      0      (0.00 per sec.)
    reconnects:                          0      (0.00 per sec.)

General statistics:
    total time:                          1.0041s
    total number of events:              5259

Latency (ms):
         min:                                    0.14
         avg:                                    1.90
         max:                                   56.59
         95th percentile:                        2.97
         sum:                                10007.87

Threads fairness:
    events (avg/stddev):           525.9000/8.47
    execution time (avg/stddev):   1.0008/0.00

测试数据库的插入性能,使用的是oltp_insert模式:

sysbench --db-driver=pgsql --time=1 --threads=10 --report-interval=5 --pgsql-host=192.168.12.128 --pgsql-port=5432 --pgsql-user=sysbenchuser --pgsql-password=sysbench@123 --pgsql-db=sysbench --tables=1 --table_size=10  oltp_insert --db-ps-mode=disable run
[root@database oltp_legacy]# sysbench --db-driver=pgsql --time=1 --threads=10 --report-interval=5 --pgsql-host=192.168.12.128 --pgsql-port=5432 --pgsql-user=sysbenchuser --pgsql-password=sysbench@123 --pgsql-db=sysbench --tables=1 --table_size=10  oltp_insert --db-ps-mode=disable run
sysbench 1.0.17 (using bundled LuaJIT 2.1.0-beta2)

Running the test with following options:
Number of threads: 10
Report intermediate results every 5 second(s)
Initializing random number generator from current time


Initializing worker threads...

Threads started!

SQL statistics:
    queries performed:
        read:                            0
        write:                           2908
        other:                           0
        total:                           2908
    transactions:                        2908   (2880.19 per sec.)
    queries:                             2908   (2880.19 per sec.)
    ignored errors:                      0      (0.00 per sec.)
    reconnects:                          0      (0.00 per sec.)

General statistics:
    total time:                          1.0082s
    total number of events:              2908

Latency (ms):
         min:                                    0.58
         avg:                                    3.38
         max:                                   58.93
         95th percentile:                        5.88
         sum:                                 9819.41

Threads fairness:
    events (avg/stddev):           290.8000/3.06
    execution time (avg/stddev):   0.9819/0.02

测试数据库的写入性能,使用的是oltp_write_only模式:

sysbench --db-driver=pgsql --time=1 --threads=10 --report-interval=5 --pgsql-host=192.168.12.128 --pgsql-port=5432 --pgsql-user=sysbenchuser --pgsql-password=sysbench@123 --pgsql-db=sysbench --tables=1 --table_size=10  oltp_write_only --db-ps-mode=disable run
[root@database oltp_legacy]# sysbench --db-driver=pgsql --time=1 --threads=10 --report-interval=5 --pgsql-host=192.168.12.128 --pgsql-port=5432 --pgsql-user=sysbenchuser --pgsql-password=sysbench@123 --pgsql-db=sysbench --tables=1 --table_size=10  oltp_write_only --db-ps-mode=disable run
sysbench 1.0.17 (using bundled LuaJIT 2.1.0-beta2)

Running the test with following options:
Number of threads: 10
Report intermediate results every 5 second(s)
Initializing random number generator from current time


Initializing worker threads...

Threads started!

[ 5s ] thds: 10 tps: 2.40 qps: 24.38 (r/w/o: 0.00/6.80/17.59) lat (ms,95%): 125.52 err/s: 2.20 reconn/s: 0.00
[ 10s ] thds: 10 tps: 0.00 qps: 1.40 (r/w/o: 0.00/0.20/1.20) lat (ms,95%): 0.00 err/s: 1.20 reconn/s: 0.00
SQL statistics:
    queries performed:
        read:                            0
        write:                           65
        other:                           117
        total:                           182
    transactions:                        22     (2.14 per sec.)
    queries:                             182    (17.67 per sec.)
    ignored errors:                      19     (1.85 per sec.)
    reconnects:                          0      (0.00 per sec.)

General statistics:
    total time:                          10.2965s
    total number of events:              22

Latency (ms):
         min:                                    5.58
         avg:                                 4670.70
         max:                                10296.08
         95th percentile:                    10343.39
         sum:                               102755.39

Threads fairness:
    events (avg/stddev):           2.2000/1.60
    execution time (avg/stddev):   10.2755/0.01

测试数据库的综合读写TPS,使用的是oltp_read_write模式

sysbench --db-driver=pgsql --time=1 --threads=10 --report-interval=5 --pgsql-host=192.168.12.128 --pgsql-port=5432 --pgsql-user=sysbenchuser --pgsql-password=sysbench@123 --pgsql-db=sysbench --tables=1 --table_size=10  oltp_read_write --db-ps-mode=disable run
[root@database oltp_legacy]# sysbench --db-driver=pgsql --time=1 --threads=10 --report-interval=5 --pgsql-host=192.168.12.128 --pgsql-port=5432 --pgsql-user=sysbenchuser --pgsql-password=sysbench@123 --pgsql-db=sysbench --tables=1 --table_size=10  oltp_read_write --db-ps-mode=disable run
sysbench 1.0.17 (using bundled LuaJIT 2.1.0-beta2)

Running the test with following options:
Number of threads: 10
Report intermediate results every 5 second(s)
Initializing random number generator from current time


Initializing worker threads...

Threads started!

SQL statistics:
    queries performed:
        read:                            210
        write:                           38
        other:                           36
        total:                           284
    transactions:                        11     (9.27 per sec.)
    queries:                             284    (239.34 per sec.)
    ignored errors:                      4      (3.37 per sec.)
    reconnects:                          0      (0.00 per sec.)

General statistics:
    total time:                          1.1851s
    total number of events:              11

Latency (ms):
         min:                                  126.42
         avg:                                 1056.22
         max:                                 1182.56
         95th percentile:                     1170.65
         sum:                                11618.38

Threads fairness:
    events (avg/stddev):           1.1000/0.30
    execution time (avg/stddev):   1.1618/0.02

测试数据库的综合读写TPS,使用的是oltp_read_write模式:

sysbench --db-driver=pgsql --time=10 --threads=5 --report-interval=1 --pgsql-host=192.168.12.128 --pgsql-port=5432 --pgsql-user=sysbenchuser --pgsql-password=sysbench@123 --pgsql-db=sysbench --tables=1 --table_size=10  oltp_read_write --db-ps-mode=disable run
[root@database oltp_legacy]# sysbench --db-driver=pgsql --time=10 --threads=5 --report-interval=1 --pgsql-host=192.168.12.128 --pgsql-port=5432 --pgsql-user=sysbenchuser --pgsql-password=sysbench@123 --pgsql-db=sysbench --tables=1 --table_size=10  oltp_read_write --db-ps-mode=disable run
sysbench 1.0.17 (using bundled LuaJIT 2.1.0-beta2)

Running the test with following options:
Number of threads: 5
Report intermediate results every 1 second(s)
Initializing random number generator from current time


Initializing worker threads...

Threads started!

[ 1s ] thds: 5 tps: 24.88 qps: 629.90 (r/w/o: 459.74/91.55/78.61) lat (ms,95%): 66.84 err/s: 2.99 reconn/s: 0.00
[ 2s ] thds: 5 tps: 17.92 qps: 390.20 (r/w/o: 278.71/63.71/47.78) lat (ms,95%): 1069.86 err/s: 1.99 reconn/s: 0.00
[ 3s ] thds: 5 tps: 13.03 qps: 293.64 (r/w/o: 210.46/50.11/33.07) lat (ms,95%): 1050.76 err/s: 2.00 reconn/s: 0.00
[ 4s ] thds: 5 tps: 0.00 qps: 15.01 (r/w/o: 14.01/0.00/1.00) lat (ms,95%): 0.00 err/s: 1.00 reconn/s: 0.00
[ 5s ] thds: 5 tps: 29.95 qps: 668.88 (r/w/o: 475.20/113.81/79.87) lat (ms,95%): 2082.91 err/s: 3.99 reconn/s: 0.00
[ 6s ] thds: 5 tps: 6.04 qps: 138.86 (r/w/o: 98.61/24.15/16.10) lat (ms,95%): 1069.86 err/s: 1.01 reconn/s: 0.00
[ 7s ] thds: 5 tps: 25.01 qps: 553.24 (r/w/o: 392.17/98.04/63.03) lat (ms,95%): 1069.86 err/s: 3.00 reconn/s: 0.00
[ 8s ] thds: 5 tps: 0.00 qps: 15.00 (r/w/o: 14.00/0.00/1.00) lat (ms,95%): 0.00 err/s: 1.00 reconn/s: 0.00
[ 9s ] thds: 5 tps: 5.00 qps: 150.99 (r/w/o: 111.99/19.00/20.00) lat (ms,95%): 2009.23 err/s: 3.00 reconn/s: 0.00
[ 10s ] thds: 5 tps: 0.00 qps: 15.00 (r/w/o: 14.00/0.00/1.00) lat (ms,95%): 0.00 err/s: 1.00 reconn/s: 0.00
[ 11s ] thds: 4 tps: 1.00 qps: 24.01 (r/w/o: 14.00/6.00/4.00) lat (ms,95%): 4055.23 err/s: 1.00 reconn/s: 0.00
[ 12s ] thds: 4 tps: 0.00 qps: 14.99 (r/w/o: 13.99/0.00/1.00) lat (ms,95%): 0.00 err/s: 1.00 reconn/s: 0.00
SQL statistics:
    queries performed:
        read:                            2114
        write:                           481
        other:                           352
        total:                           2947
    transactions:                        127    (9.98 per sec.)
    queries:                             2947   (231.47 per sec.)
    ignored errors:                      24     (1.89 per sec.)
    reconnects:                          0      (0.00 per sec.)

General statistics:
    total time:                          12.7304s
    total number of events:              127

Latency (ms):
         min:                                   12.86
         avg:                                  485.06
         max:                                 6084.90
         95th percentile:                     2082.91
         sum:                                61602.90

Threads fairness:
    events (avg/stddev):           25.4000/2.42
    execution time (avg/stddev):   12.3206/0.81


使用上面的命令,sysbench工具会根据你的指令构造出各种各样的SQL语句去更新或者查询1张测试表里的数据,同时监测出数据库的压测性能指标,最后完成压测之后,可以执行下面的cleanup命令,清理数据。

sysbench --db-driver=pgsql --time=1 --threads=10 --report-interval=5 --pgsql-host=192.168.12.128 --pgsql-port=5432 --pgsql-user=sysbenchuser --pgsql-password=sysbench@123 --pgsql-db=sysbench --tables=1 --table_size=10  oltp_read_write --db-ps-mode=disable cleanup

[root@database oltp_legacy]# sysbench --db-driver=pgsql --time=1 --threads=10 --report-interval=5 --pgsql-host=192.168.12.128 --pgsql-port=5432 --pgsql-user=sysbenchuser --pgsql-password=sysbench@123 --pgsql-db=sysbench --tables=1 --table_size=10  oltp_read_write --db-ps-mode=disable cleanup
sysbench 1.0.17 (using bundled LuaJIT 2.1.0-beta2)

Dropping table 'sbtest1'...

其中数据生成大小可以参考如下(具体数据大小可以根据下列数据构造):

2481GB:
tables=100,size=100000000

248GB:
tables=1000,size=1000000

25GB:
tables=100,size=1000000

2562MB:
tables=10,size=1000000

2554MB:
tables=1,size=10000000

四、数据库测试输出信息详解

下面详细介绍使用sysbench测试MySQL数据库的输出结果。

[root@database oltp_legacy]# sysbench --db-driver=pgsql --time=10 --threads=10 --report-interval=1 --pgsql-host=192.168.12.128 --pgsql-port=5432 --pgsql-user=sysbenchuser --pgsql-password=sysbench@123 --pgsql-db=sysbench --tables=1 --table_size=10  oltp_read_only --db-ps-mode=disable run
sysbench 1.0.17 (using bundled LuaJIT 2.1.0-beta2)

Running the test with following options:
Number of threads: 10
Report intermediate results every 1 second(s)
Initializing random number generator from current time


Initializing worker threads...

Threads started!

[ 1s ] thds: 10 tps: 419.20 qps: 6773.15 (r/w/o: 5925.76/0.00/847.39) lat (ms,95%): 28.67 err/s: 0.00 reconn/s: 0.00
[ 2s ] thds: 10 tps: 451.23 qps: 7223.75 (r/w/o: 6321.28/0.00/902.47) lat (ms,95%): 25.74 err/s: 0.00 reconn/s: 0.00
[ 3s ] thds: 10 tps: 447.98 qps: 7197.62 (r/w/o: 6300.67/0.00/896.95) lat (ms,95%): 26.20 err/s: 0.00 reconn/s: 0.00
[ 4s ] thds: 10 tps: 416.95 qps: 6653.14 (r/w/o: 5820.25/0.00/832.89) lat (ms,95%): 28.67 err/s: 0.00 reconn/s: 0.00
[ 5s ] thds: 10 tps: 420.01 qps: 6701.15 (r/w/o: 5861.13/0.00/840.02) lat (ms,95%): 28.16 err/s: 0.00 reconn/s: 0.00
[ 6s ] thds: 10 tps: 396.04 qps: 6384.62 (r/w/o: 5591.54/0.00/793.08) lat (ms,95%): 34.33 err/s: 0.00 reconn/s: 0.00
[ 7s ] thds: 10 tps: 441.83 qps: 7071.29 (r/w/o: 6187.63/0.00/883.66) lat (ms,95%): 26.68 err/s: 0.00 reconn/s: 0.00
[ 8s ] thds: 10 tps: 440.11 qps: 6966.72 (r/w/o: 6087.50/0.00/879.22) lat (ms,95%): 27.17 err/s: 0.00 reconn/s: 0.00
[ 9s ] thds: 10 tps: 430.86 qps: 6977.79 (r/w/o: 6115.07/0.00/862.73) lat (ms,95%): 26.20 err/s: 0.00 reconn/s: 0.00
[ 10s ] thds: 10 tps: 458.94 qps: 7305.02 (r/w/o: 6387.15/0.00/917.88) lat (ms,95%): 25.28 err/s: 0.00 reconn/s: 0.00
SQL statistics:
    queries performed:
        read:                            60676
        write:                           0
        other:                           8668
        total:                           69344
    transactions:                        4334   (432.36 per sec.)
    queries:                             69344  (6917.70 per sec.)
    ignored errors:                      0      (0.00 per sec.)
    reconnects:                          0      (0.00 per sec.)

General statistics:
    total time:                          10.0230s
    total number of events:              4334

Latency (ms):
         min:                                   18.37
         avg:                                   23.10
         max:                                   71.77
         95th percentile:                       27.66
         sum:                               100126.01

Threads fairness:
    events (avg/stddev):           433.4000/2.62
    execution time (avg/stddev):   10.0126/0.01


4.1 输出结果概述

Sysbench测试输出结果主要分为三部分:

版本及关键测试参数输出。
中间统计结果输出。
整体统计结果输出。

4.2 版本及关键测试参数输出

在sysbench测试正常开始以后,首先输出的是sysbench的版本、压测线程个数、每隔几秒输出一次中间结果、随机数初始化等相关信息。

4.3 中间统计结果输出

在指定了--report-interval参数以后,每隔report-interval时间输出一次中间统计结果,如下所示。

[ 6s ] thds: 4 tps: 334.99 qps: 6712.77 (r/w/o: 4698.84/929.97/1083.96) lat (ms,95%): 19.65 err/s: 0.00 reconn/s: 0.00

[ 6s ]:表示当前已经压测6s。
thds: 4:表示4个线程并发压测。
tps: 334.99:表示在report-interval时间间隔内的每秒事务数。
qps: 6712.77:表示在report-interval时间间隔内的每秒查询数。
(r/w/o: 4698.84/929.97/1083.96):表示在report-interval时间间隔内的每秒读/写/其他请求数,用于补充说明qps。
lat (ms,95%):19.65:表示在report-interval时间间隔内的请求95%的延迟时间在19.65ms以下。
err/s: 0.00:表示在report-interval时间间隔内的每秒失败请求数。
reconn/s: 0.00:表示在report-interval时间间隔内的每秒重连接数。

4.4 整体统计结果输出

在sysbench全部测试完成以后,将输出整体压测的统计结果。主要分为四部分:

(1)SQL统计结果

该项输出结果包括sysbench发起的读/写/其他/总计SQL查询数量、总计事务数及每秒事务数、总计请求数及每秒请求数、总计错误数及每秒错误数、总计重连接数及每秒重连接数。

SQL statistics:
    queries performed:
        read:                            60676
        write:                           0
        other:                           8668
        total:                           69344
    transactions:                        4334   (432.36 per sec.)
    queries:                             69344  (6917.70 per sec.)
    ignored errors:                      0      (0.00 per sec.)
    reconnects:                          0      (0.00 per sec.)
(2)通用统计值

该项输出结果包括总计执行的时间、所有的事件数量(这里对应的是发起的MySQL事务数)。

General statistics:
    total time:                          10.0230s
    total number of events:              4334
(3)延迟时间统计结果

该项输出结果包括延迟时间最低值、平均值、最高值、第95%位值、总计值。


Latency (ms):
         min:                                   18.37
         avg:                                   23.10
         max:                                   71.77
         95th percentile:                       27.66
         sum:                               100126.01
(4)压测线程统计结果

该项输出结果包括每个压测线程的平均事件数及标准差、每个事务的平均执行时间及标准差。

Threads fairness:
    events (avg/stddev):           433.4000/2.62
    execution time (avg/stddev):   10.0126/0.01

来源:CSDN 1.[暴走萝莉厶] 2.[花花世界芸芸众生]3.「沃趣QFusion数据库私有云」
4.「做测试的喵酱」
原文连接:
1.https://blog.csdn.net/m0_55977762/article/details/124450920
2.https://blog.csdn.net/qq_36805343/article/details/114691980
3.https://blog.csdn.net/weixin_48804451/article/details/125516206
4.https://blog.csdn.net/qq_39208536/article/details/119672946

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容