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={tables}_{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