sysbench是一款多线程系统压测工具,可以执行多种类型的基准测试,它不仅设计用来测试数据的性能,也可以测试运行数据库的服武器的性能
一,CPU基准测试
最典型的子系统测试
该测试使用64位整数,测试计算素数直到某个最大值所需要的时间
GNU/Linux服务器:
查看CPU配置:cat /proc/cpuinfo
分别在不同CPU配置的服务器中运行测试
sysbench --test=cpu --cpu-max-prime=20000 run
查看各自计算出素数的时间,进行比较
二,sysbench的文件I/O基准测试
fileio基准测试可以测试系统在不同I/O负载下的性能。这对于比较不同的硬盘驱动器,不同的RAID卡,不同的RAID模式,都很有帮助。
可以根据测试结果来调整I/O子系统。文件I/O基准测试模拟了很多InnoDB的I/O特性
测试的第一步是准备(prepare)阶段,生成测试用到的数据文件,生成的数据文件至少要比内存大。如果文件中的数据能完全放入内存中,则操作系统缓存大部分的数据,导致测试结果无法体现I/O密集型的工作负载。
通过下面的命令创建一个数据集:
sysbench --test=fileio --file-total-size=150G prepare
这个命令会在当前的工作目录下创建测试文件,后续的运行(run)阶段将通过读写这些文件进行测试。
第二部就是运行(run)阶段,针对不同的I/O类型有不同的测试选项:
seqwr 顺序写入
seqrewr 顺序重写
seqrd 顺序读取
rndrd 随机读取
rndwr 随机写入
rndrw 混合随机读/写
下面的命令运行文件I/O混合随机读/写基准测试
sysbench --test=fileio --file-total-size=150G --file-test-mode=rndrw --init-rng=on --max-time=300 --max-requests=0 run
结果:。。。
输出结果中包含了大量的信息。和I/O子系统密切相关的包括每秒请求数和总吞吐量。
时间信息也非常有用,尤其是大约95%的时间分布。这些数据对于评估磁盘性能十分有用。
测试完成后,运行清楚(cleanup) 操作删除第一步生成的测试文件:
sysbench --test=fileio --file-total-size=150G cleanup
三,sysbench的OLTP基准测试
OLTP基准测试模拟了一个简单的事务处理系统的工作负载
下面的例子使用的是一张超过百万行记录的表,第一步是先生成这张表:
sysbench --test=oltp --oltp-table-size=1000000 --mysql-db=test --mysql-user=root prepare
生成测试数据只需要上面这条简单的命令即可。接下来可以运行测试,这个例子采用了8个并发线程,只读模式,测试时长60秒:
sysbench --test=oltp --oltp-table-size=1000000 --mysql-db=test --mysql-db=test --mysql-user=root --max-time=60 --oltp-read-only=on --max-requests=0 --num-threads=8 run
结果:。。。
结果中包含了相当多的信息。其中最有价值的信息:
总的事务数
每秒事务数
时间统计信息()
线程公平性统计信息,用于表示模拟负载的公平性
----------------
sysbench还有一些其他的基准测试,但和数据库性能没有直接关系
内存(memory)
测试内存的连续读写性能
线程(thread)
测试线程调度器的性能。对于高负载情况下测试线程调度器的行为非常有用
互斥锁(mutex)
测试互斥锁的性能,方式是模拟所有线程在同一时刻并发运行,并都短暂请求互斥锁(互斥锁是一种数据结构,用来对某些资源进行排他性访问控制,防止因并发访问导致问题)
顺序写(seqwr)
测试顺序写的性能。这对于测试系统的实际性能瓶颈很重要。可以用来测试RAID控制器的告诉缓存的性能状况,如果测试结果异常则需要引起重视。例如,如果RAID控制器写缓存没有电池保护,而磁盘的压力达到了3000次请求/秒,就是一个问题,数据可能是不安全的。