sysbench
针对数据库系统的多线程基准测试工具(benchmark tool)
命令格式
sysbench [common-options] --test=name [test-options] <command>
Command有: prepare run cleanup help version
详解
- sysbench是一个模块化、跨平台以及多线程的基准测试工具
- 用来评估操作系统参数,这些参数对于正在运行一个高负载的数据库的系统非常重要
- 这个benchmark组件的核心思想是快速获取系统性能的印象,而不需要安装复杂的数据库benchmark或者甚至根本不需要安装数据库。
- 设计非常简单。Sysbench运行指定数量的线程,这些线程并发地执行请求。
- 请求产生的实际工作负载取决于特定的测试模式
- 你可以限制要么是请求的总数,或者是benchmark的总运行时间,或者两者都行
内置数据库驱动
- mysql MySQL驱动
- pgsql PostgreSQL驱动
内置测试
- fileio 文件IO测试
- cpu CPU性能测试
- memory 内存功能速度测试
- threads 线程子系统性能测试
- mutex 互斥锁性能测试
- 注意:
- 可用的测试模式是通过内置模块实现的。并且Sysbench被设计成非常容易去添加新的测试模式。
- 每个测试模式都有额外的其他选项的
通用选项
- –num-threads=N 使用的线程数[1]
- –max-requests=N 请求总数的限制[10000]
- –max-time=N 以秒为单位的总的执行时间 [0]
- –forced-shutdown=STRING 在等了
--max-time
的时间之后,才强制关闭[off] - –thread-stack-size=SIZE 每个线程的线程栈大小64K]
- –tx-rate=N 目标事务处理速率就是tps(tps)[0]
- –report-interval=N 定期以指定的时间间隔(以秒为单位)报告中间统计信息。 0禁用中间报告[0]
- –report-checkpoints=转储完整的统计信息并在指定的时间点重置所有计数器。 该参数是逗号分隔值的列表,表示当必须执行
checkpoint(s)
时,从开始测试到此刻所经过的秒数。 默认情况下,报告检查点处于关闭状态。[] - –test=STRING 要运行的测试
- –debug=[on|off] 打印更多的调试信息[off]
- –validate=[on|off] 当可能的时候执行有效性检查[off]
- –help=[on|off] 答应help菜单并退出
- –version=[on|off] 打印版本信息并退出[off]
- –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 [0]时忽略
- –rand-pareto-h=N 参数h用于pareto分布[0.2]
- –config-file=FILENAME 包含命令行选项的文件名
日志选项
- –verbosity=N 啰嗦级别{5 - debug, 0 - only critical messages} [3]
- –percentile=N 查询响应时间的百分数排名,使用0可以关掉百分位统计。[95] percentile rank of query response times to count. Use the special value of 0 to disable percentile statistics. [95]
通用数据库选项
- –db-driver=STRING 指定要用的数据库驱动
- –db-ps-mode=STRING 使用prepared语句模式(防sql注入攻击的那种东西) {auto, disable} [auto]
- –db-debug=[on|off] 打印数据库特定的调试信息 [off]
mysql选项
- –mysql-host=[LIST,…] 服务端主机[localhost]
- –mysql-port=[LIST,…] 服务端端口[3306]
- –mysql-socket=[LIST,…] MySQL套接字
- –mysql-user=STRING MySQL用户[sbtest]
- –mysql-password=STRING MySQL密码[]
- –mysql-db=STRING MySQL数据库名[sbtest]
- –mysql-table-engine=STRING 测试表使用的存储引擎{myisam,innodb,bdb,heap,ndbcluster,federated} [innodb]
- –mysql-engine-trx=STRING 使用的存储引擎是否是事务性的{yes,no,auto} [auto]
- –mysql-ssl=[on|off] 如果客户端库支持SSL连接的话,使用SSL连接[off]
- –mysql-compression=[on|off] 如果客户端库支持的话,使用压缩[off]
- –myisam-max-rows=N MyISAM表的最大行参数 [1000000]
- –mysql-debug=[on|off] dump所有的客户端库的调用[off]
- –mysql-ignore-errors=[LIST,…] 要忽略的错误的列表,或者写成all [1213,1020,1205]
- –mysql-dry-run=[on|off] 空运行,装作所有的MySQL客户端API调用都是成功的,而不执行他们[off]
文件IO选项
- –file-num=N 创建的文件数[128]
- –file-block-size=N 在所有的IO操作中使用的块大小[16384]
- –file-total-size=SIZE 要创建的文件大小的总数[2G]
- –file-test-mode=STRING 测试模式{seqwr, seqrewr, seqrd, rndrd, rndwr, rndrw}
- –file-io-mode=STRING 文件操作模式{sync,async,mmap} [sync]
- –file-async-backlog=N 每线程排队的异步操作数[128]
- –file-extra-flags=STRING 文件打开时使用的额外的标志{sync,dsync,direct} []
- –file-fsync-freq=N 在多少个请求之后做fsync() (0 - don’t use fsync()) [100]
- –file-fsync-all=[on|off] 在每个写操作之后做fsync() [off]
- –file-fsync-end=[on|off] 在测试结束的时候做fsync[on]
- –file-fsync-mode=STRING 使用哪种方式进行同步{fsync, fdatasync} [fsync]
- –file-merged-requests=N 如果可能的话,合并最多N次IO请求 (0 - don’t merge) [0]
- –file-rw-ratio=N 读/写的比率[1.5]
CPU选项
- –cpu-max-prime=N 素数发生器的上限[10000]
内存选项
- –memory-block-size=SIZE 测试用的内存块大小[1K]
- –memory-total-size=SIZE 总的要变换的数据大小[100G]
- –memory-scope=STRING 内存访问作用域{global,local} [global]
- –memory-hugetlb=[on|off] 从HugeTLB池中分配内存[off]
- –memory-oper=STRING 内存操作的类型{read,write,none} [write]
- –memory-access-mode=STRING 内存访问模式{seq,rnd} [seq]
线程选项
- –thread-yields=N 每个请求做的yields数量[1000]
- –thread-locks=N 每个线程的锁的数量[8]
互斥锁选项
- –mutex-num=N mutex数组的大小[4096]
- –mutex-locks=N 每个线程做的互斥锁加锁操作[50000]
- –mutex-loops=N 在互斥锁加锁内做的空的循环次数[10000]