版本:
sysbench 0.5
简介:
sysbench是一个开源的、模块化的、跨平台的多线程性能测试工具,可以用来进行CPU、内存、磁盘I/O、线程、数据库的性能测试。
关键参数:
sysbench --report-interval=10
--num-threads=32
--max-requests=999999999
--test=/tmp/oltp.lua
--oltp-table-size=1000000 # 每个表中插入100w行数据
--oltp-tables-count=64 # 创建64个table
--db-driver=mysql
--mysql-table-engine=innodb
结果解析:
关键指标:
IOPS,QPS, TPS, Lantency
- IOPS ---> read/write requests per sec
- QPS ---> read/(total time)
- TPS ---> transactions per sec
- Latency---> response time(avg)
OLTP test statistics:
queries performed:
read: 11600834
write: 3314524
other: 1657262
total: 16572620
transactions: 828631 (460.34 per sec.)
read/write requests: 14915358 (8286.17 per sec.)
other operations: 1657262 (920.69 per sec.)
ignored errors: 0 (0.00 per sec.)
reconnects: 0 (0.00 per sec.)
General statistics:
total time: 1800.0304s
total number of events: 828631
total time taken by event execution: 57594.0055s
response time:
min: 8.80ms
avg: 69.51ms
max: 517.28ms
approx. 95 percentile: 115.94ms
Threads fairness:
events (avg/stddev): 25894.7188/304.08
execution time (avg/stddev): 1799.8127/0.04
测试工具分析:
优点:
支持的测试对象较多,提供可调参数也较多。
缺点:
创建的表结构太简单,每个表只有4个字段(id, k, c, pad), 很多时候它并不能模拟实际线上的一些应用
其他参数:
General options: #通用选项
--num-threads=N number of threads to use [1] #创建测试线程的数目。默认为1.
--max-requests=N limit for total number of requests [10000] #请求的最大数目。默认为10000,0代表不限制。
--max-time=N limit for total execution time in seconds [0] #最大执行时间,单位是s。默认是0,不限制。
--forced-shutdown=STRING amount of time to wait after --max-time before forcing shutdown [off] #超过max-time强制中断。默认是off。
--thread-stack-size=SIZE size of stack per thread [32K] #每个线程的堆栈大小。默认是32K。
--init-rng=[on|off] initialize random number generator [off] #在测试开始时是否初始化随机数发生器。默认是off。
--test=STRING test to run #指定测试项目名称。
--debug=[on|off] print more debugging info [off] #是否显示更多的调试信息。默认是off。
--validate=[on|off] perform validation checks where possible [off] #在可能情况下执行验证检查。默认是off。
--help=[on|off] print help and exit #帮助信息。
--version=[on|off] print version and exit #版本信息。
Mysql options
--mysql-host=[LIST,...]:MySQL服务器地址[localhost]。
--mysql-port=[LIST,...]:MySQL服务器端口[3306]。
--mysql-socket=[LIST,...]:MySQL服务器的socket地址。
--mysql-user=STRING:MySQL服务器的用户名。
--mysql-password=STRING:MySQL用户名密码。
--mysql-db=STRING:MySQL数据库名称[sbtest]。
--mysql-compression[=on|off]:是否使用压缩[off]。
OLTP options
--test:指定测试模式对应的lua文件
--oltp_table_count=1:指定测试过程中表的个数
--oltp-table-size=:指定表的大小,如果指定1000,那么它会往表里初始化1000条数据
--rand-init=on:是否随机初始化数据,如果不随机化那么初始好的数据每行内容除了主键不同外其他完全相同。
--num-threads=:测试过程中并发线程数,看测试要求来定并发压力。
--otlp-read-only=off:是否只读测试
--report-interval=10:每隔多久打印一次统计信息,单位秒,0.5新增
--rand-type=special:指定随机取样类型,可选值有 uniform(均匀分布), Gaussian(高斯分布), special(空间分布)。默认是special数据分布模式,special表示存在热点数据,uniform表示非热点数据模式
--rand-spec-pct=5:
--mysql-table-engine=$type:表的存储引擎类型,innodb/myisam/tokudb/这些都可以。
--max-time=8000:这个命令跑多长时间,单位秒,与之相反的是指定请求数--max-requests
--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
--max-requests:指定命令最大请求数,与max-time共同决定运行多长时间。
Compiled-in tests: #测试项目
fileio - File I/O test #IO
cpu - CPU performance test #CPU
memory - Memory functions speed test #内存
threads - Threads subsystem performance test #线程
mutex - Mutex performance test #互斥性能测试
oltp - OLTP test # 数据库,事务处理