千家信息网

如何在安装与使用sysbench数据库性能测试工具

发表于:2025-11-09 作者:千家信息网编辑
千家信息网最后更新 2025年11月09日,这篇文章将为大家详细讲解有关如何在安装与使用sysbench数据库性能测试工具,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1.简介和安装sysben
千家信息网最后更新 2025年11月09日如何在安装与使用sysbench数据库性能测试工具

这篇文章将为大家详细讲解有关如何在安装与使用sysbench数据库性能测试工具,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

1.简介和安装

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

  • 如果是编译安装,需要先安装好mysql的开发包(尽管编译错误时提示的是缺少Mysql库文件)。

yum -y install mysql-community-develtar xf 1.0.15.tar.gzcd sysbench-1.0.15./autogen.sh./configuremake -jmake install

安装后,只有一个二进制文件sysbench,还提供了很多个lua脚本。

[root@s1 ~]# rpm -ql sysbench | grep 'bin\|lua' /usr/bin/sysbench/usr/share/sysbench/bulk_insert.lua/usr/share/sysbench/oltp_common.lua/usr/share/sysbench/oltp_delete.lua/usr/share/sysbench/oltp_insert.lua/usr/share/sysbench/oltp_point_select.lua/usr/share/sysbench/oltp_read_only.lua/usr/share/sysbench/oltp_read_write.lua/usr/share/sysbench/oltp_update_index.lua/usr/share/sysbench/oltp_update_non_index.lua/usr/share/sysbench/oltp_write_only.lua/usr/share/sysbench/select_random_points.lua/usr/share/sysbench/select_random_ranges.lua/usr/share/sysbench/tests/include/inspect.lua/usr/share/sysbench/tests/include/oltp_legacy/bulk_insert.lua/usr/share/sysbench/tests/include/oltp_legacy/common.lua/usr/share/sysbench/tests/include/oltp_legacy/delete.lua/usr/share/sysbench/tests/include/oltp_legacy/insert.lua/usr/share/sysbench/tests/include/oltp_legacy/oltp.lua/usr/share/sysbench/tests/include/oltp_legacy/oltp_simple.lua/usr/share/sysbench/tests/include/oltp_legacy/parallel_prepare.lua/usr/share/sysbench/tests/include/oltp_legacy/select.lua/usr/share/sysbench/tests/include/oltp_legacy/select_random_points.lua/usr/share/sysbench/tests/include/oltp_legacy/select_random_ranges.lua/usr/share/sysbench/tests/include/oltp_legacy/update_index.lua/usr/share/sysbench/tests/include/oltp_legacy/update_non_index.lua

本文介绍的是新版本sysbench oltp lua脚本的用法(/usr/share/sysbench/*.lua),所以不涉及传统的lua(tests/include/oltp_legacy/*.lua),如果想要了解这些传统Lua脚本的用法,网上随便找。

2.sysbench使用方法

以下列出了sysbench对测试mysql时常用的选项。

[root@xuexi ~]# sysbench --helpUsage: sysbench [options]... [test_lua] [lua_options] [command]Commands implemented by most tests: prepare run cleanup help

通用选项:以下中括号中的值表示默认值

--threads=N 指定线程数[1]
--events=N 限制最大请求数,0表示不限制[0]
--time=N 限制最长执行时间,0表示不限制[10]
--events和--time二者选一即可
--forced-shutdown=STRING 达到最长执行时间后还需等待多久关闭sysbench
off表示禁用该功能[off]
--thread-stack-size=SIZE 每个线程使用的栈空间大小[64K]
--rate=N 平均事务处理速率,0表示不限制[0]
--report-interval=N 每隔几秒报告一次结果,0表示禁用间隔报告[0]
--config-file=FILENAME 从文件中读取命令行选项
--tx-rate=N 已废弃,是--rate的别名[0]
--max-requests=N 已废弃,是--events的别名[0]
--max-time=N 已废弃,是--time的别名[0]
--num-threads=N 已废弃,是--threads的别名[1]

mysql相关选项:

--mysql-host=[LIST,...] MySQL server host [localhost]
--mysql-port=[LIST,...] MySQL server port [3306]
--mysql-socket=[LIST,...] MySQL socket
--mysql-user=STRING MySQL user [sbtest]
--mysql-password=STRING MySQL password []
--mysql-db=STRING MySQL database name [sbtest]
--mysql-ignore-errors=[LIST,...] 要忽略的错误代码,值可为"all" [1213,1020,1205]

Compiled-in tests:
fileio - File I/O test
cpu - CPU performance test
memory - Memory functions speed test
threads - Threads subsystem performance test
mutex - Mutex performance test

其中,command部分有4类:prepare run cleanup和help:

  • prepare:准备数据的命令。例如,在sysbench压力测试之前,需要先准备好测试库、测试表以及测试表中的数据。具体用法见后文。

  • run:表示进行压力测试。

  • cleanup:清除测试时产生的数据。

  • help:输出给定lua脚本的帮助信息。

test_lua是想要使用的lua脚本,如果是rpm包安装的sysbench,则这些脚本都是/usr/share/sysbench目录下。对于一般的数据库测试,只需使用和oltp有关的lua脚本就足够。

options和lua_options是不同的,options是sysbench的选项,lua_options是lua脚本的选项,lua_options应该要放在test_lua的后面(非必需,但建议)。

例如,要查看oltp_common.lua的用法,可以:

sysbench /usr/share/sysbench/oltp_common.lua help

3.准备测试数据

首先创建sysbench所需数据库sbtest(这是sysbench默认使用的库名,必须创建测试库)。

mysqladmin -h227.0.0.1 -uroot -pP@ssword1! -P3306 create sbtest;

然后,准备测试所用的表,这些测试表放在测试库sbtest中。这里使用的lua脚本为/usr/share/sysbench/oltp_common.lua。

sysbench --mysql-host=127.0.0.1 \   --mysql-port=3306 \   --mysql-user=root \   --mysql-password=P@ssword1! \   /usr/share/sysbench/oltp_common.lua \   --tables=10 \   --table_size=100000 \   prepare

其中--tables=10表示创建10个测试表,--table_size=100000表示每个表中插入10W行数据,prepare表示这是准备数的过程。

mysql> show tables from sbtest;+------------------+| Tables_in_sbtest |+------------------+| sbtest1   || sbtest10   || sbtest2   || sbtest3   || sbtest4   || sbtest5   || sbtest6   || sbtest7   || sbtest8   || sbtest9   |+------------------+mysql> select count(*) from sbtest.sbtest1;+----------+| count(*) |+----------+| 100000 |+----------+

如果想要清除这10个表,可使用cleanup命令。

sysbench --mysql-host=127.0.0.1 \   --mysql-port=3306 \   --mysql-user=root \   --mysql-password=P@ssword1! \   /usr/share/sysbench/oltp_common.lua \   --tables=10 \   cleanup

4.数据库测试和结果分析

稍微修改下之前准备数据的语句,就可以拿来测试了。

需要注意的是,之前使用的lua脚本为oltp_common.lua,它是一个通用脚本,是被其它lua脚本调用的,它不能直接拿来测试。

所以,我这里用oltp_read_write.lua脚本来做读、写测试。还有很多其它类型的测试,比如只读测试、只写测试、删除测试、大批量插入测试等等。可找到对应的lua脚本进行调用即可。

sysbench --threads=4 \   --time=20 \   --report-interval=5 \   --mysql-host=127.0.0.1 \   --mysql-port=3306 \   --mysql-user=root \   --mysql-password=P@ssword1! \   /usr/share/sysbench/oltp_read_write.lua \   --tables=10 \   --table_size=100000 \   run

以下是测试返回的结果:

Initializing worker threads...

Threads started!


####以下是每5秒返回一次的结果,统计的指标包括:
#### 线程数、tps(每秒事务数)、qps(每秒查询数)、
#### 每秒的读/写/其它次数、延迟、每秒错误数、每秒重连次数
[ 5s ] thds: 4 tps: 130.16 qps: 2606.30 (r/w/o: 1824.51/520.66/261.13) lat (ms,95%): 104.84 err/s: 0.00 reconn/s: 0.00
[ 10s ] thds: 4 tps: 126.74 qps: 2539.17 (r/w/o: 1778.17/507.52/253.47) lat (ms,95%): 108.68 err/s: 0.00 reconn/s: 0.00
[ 15s ] thds: 4 tps: 136.54 qps: 2736.34 (r/w/o: 1915.25/548.01/273.07) lat (ms,95%): 102.97 err/s: 0.00 reconn/s: 0.00
[ 20s ] thds: 4 tps: 107.44 qps: 2148.65 (r/w/o: 1505.60/428.17/214.89) lat (ms,95%): 132.49 err/s: 0.00 reconn/s: 0.00

SQL statistics:
queries performed:
read: 35098 # 执行的读操作数量
write: 10028 # 执行的写操作数量
other: 5014 # 执行的其它操作数量
total: 50140
transactions: 2507 (124.29 per sec.) # 执行事务的平均速率
queries: 50140 (2485.82 per sec.) # 平均每秒能执行多少次查询
ignored errors: 0 (0.00 per sec.)
reconnects: 0 (0.00 per sec.)

General statistics:
total time: 20.1694s # 总消耗时间
total number of events: 2507 # 总请求数量(读、写、其它)

Latency (ms):
min: 2.32
avg: 32.13
max: 575.78
95th percentile: 118.92 # 采样计算的平均延迟
sum: 80554.96

Threads fairness:
events (avg/stddev): 626.7500/2.49
execution time (avg/stddev): 20.1387/0.04

5.cpu/io/内存等测试

sysbench内置了几个测试指标。

Compiled-in tests:
fileio - File I/O test
cpu - CPU performance test
memory - Memory functions speed test
threads - Threads subsystem performance test
mutex - Mutex performance test

可直接help输出测试方法。例如,fileio测试。

[root@xuexi ~]# sysbench fileio helpsysbench 1.0.15 (using bundled LuaJIT 2.1.0-beta2)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]

例如,创建5个文件,总共1G,每个文件大概200M。

sysbench fileio --file-num=5 --file-total-size=1G prepare[root@xuexi ~]# ls -lh test*-rw------- 1 root root 205M Jul 8 12:15 test_file.0-rw------- 1 root root 205M Jul 8 12:15 test_file.1-rw------- 1 root root 205M Jul 8 12:15 test_file.2-rw------- 1 root root 205M Jul 8 12:15 test_file.3-rw------- 1 root root 205M Jul 8 12:15 test_file.4

然后,运行测试。

sysbench --events=5000 \   --threads=16 \   fileio \   --file-num=5 \   --file-total-size=G \   --file-test-mode=rndrw \   --file-fsync-freq=0 \   --file-block-size=16384 \   run

结果:

File operations:
reads/s: 98.67
writes/s: 66.85
fsyncs/s: 6.26

Throughput: # 吞吐量
read, MiB/s: 1.54 # 表示读的带宽
written, MiB/s: 1.04 # 表示读的带宽

General statistics:
total time: 12.7426s
total number of events: 2117

Latency (ms):
min: 0.00
avg: 86.66
max: 2919.41
95th percentile: 646.19
sum: 183460.80

Threads fairness:
events (avg/stddev): 132.3125/24.19
execution time (avg/stddev): 11.4663/1.09

再比例cpu性能测试:

[root@xuexi ~]# sysbench cpu --threads=40 --events=10000 --cpu-max-prime=20000 runsysbench 1.0.15 (using bundled LuaJIT 2.1.0-beta2)Running the test with following options:Number of threads: 40Initializing random number generator from current timePrime numbers limit: 20000Initializing worker threads...Threads started!CPU speed: events per second: 2127.81General statistics: total time:       4.986s total number of events:    10000Latency (ms):   min:         1.72   avg:         18.16   max:         302.17   5th percentile:      110.66   sum:        181628.49Threads fairness: events (avg/stddev):   250.0000/30.81 execution time (avg/stddev): 4.5407/0.10

关于如何在安装与使用sysbench数据库性能测试工具就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

测试 脚本 数据 数据库 准备 性能 线程 结果 限制 别名 数量 文件 工具 测试工具 事务 命令 时间 错误 最长 传统 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 数据库级安全主体 清华数据库设计 网络安全应该知道哪些知识 重庆市服务器代理公司 网络安全道德品质手抄报内容 方舟进服务器需要买dlc吗 用天然气的网络安全是指 上海孝宝网络技术有限公司 数据库货币字段类型 sql数据库什么地方会用到 网络安全中的不可否认是什么 护航网络安全注意事项 安全工程专业数据库 怎么通过点击照片连接到数据库 安卓手机网络安全认证 摄像头 p2p服务器搭建 庭教育与网络安全 远程提示加密数据库修正 焦点科技互联网保险 网络安全技术专业就业怎么样 浅谈计算机病毒与网络安全 汽车零部件软件开发标准 春考网络技术历年考了哪一科 win服务器系统配置要求 生成 提取数据库 南京网络安全方案 计算机网络安全新问题研究 软件开发基本设计和功能设计 数据库表怎么增加一个字段 海康威视软件开发工作怎么样
0