1简介
SysBench是一个模块化的、跨平台、多线程基准测试工具,主要用于评估测试各种不同系统参数下的数据库负载情况。它主要包括以下几种方式的测试:
1、cpu性能
2、磁盘io性能
3、调度程序性能
4、内存分配及传输速度
5、POSIX线程性能
6、数据库性能(OLTP基准测试)
目前sysbench主要支持MySQL,pgsql,oracle这3种数据库。
测试mysql时,sysbench按照指定的数量开启线程,每个线程与MySQL建立一个连接,每个线程不停地进行事务操作,打开事务,然后进行一些查询、更新、插入操作,提交事务,再开始新的事务;所有的SQL只访问一个表-sbtest,是由sysbench的prepare命令建好的。其中的记录数,也是在prepare时指定好并创建的。测试结束,会有一个统计结果,包括例如每秒事务数、平均响应时间等等。
2安装
1.下载sysbench:http://sourceforge.net/projects/sysbench/
2.解压安装包:sysbench-0.4.12.tar.gz出现sysbench-0.4.12文件
tar zxvf sysbench-0.4.12.tar.gz
3.安装:
A.cdsysbench-0.4.12
B.运行autogen.sh
./autogen.sh
C.安装
./configure –prefix=/home/mysql/sysbench–with-mysql-includes=/u01/mysql/include/mysql–with-mysql-libs=/u01/mysql/lib/mysql–with-mysql
D.make
E.make install
说明:
–prefix=/home/mysql/sysbench:指定sysbench的bin目录;
–with-mysql-includes=/u01/mysql/include/mysql:指定安装mysql时候的includes目录;
–with-mysql-libs=/u01/mysql/lib/mysql:指定装mysql时候的lib目录;
–with-mysql:sysbench默认支持mysql,如果需要测试oracle或者pgsql则需要制定–with-oracle或者–with-pgsql
3实现
1 cpu
常用选项—cpu-max-prime=N,用于计算素数;--test=cpu;
2 io
模拟了很多innodb特性;--test=fileio;
分为prepare,run和cleanup,分别为生成数据,运行测试和清理数据;
--file-test-mode,分为seqrd/rndrd/seqwr/seqrewr/rndwr/rndrw,可进行顺序读写,随机读写以及混合随机读写;
输出结果显示调用fsync()频率以及使用sync或者async IO模式;
3 oltp
测试mysql,也分为三步:
3.1prepare创建表并填充数据(数据库需要手工创建),表名默认sbtest;
CREATE TABLE `sbtest` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`k` int(10) unsigned NOT NULL DEFAULT '0',
`c` char(120) NOT NULL DEFAULT '',
`pad` char(60) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
KEY `k` (`k`));
3.2run进行测试;
有3种模式:
Simple:每个线程只运行SELECT c FROM sbtest WHERE id=N
Advanced transactional:执行事务,包含查询和DML(保证数据记录不变)
Non-transactional:可自主选择要运行的query,DML会影响表记录,多次测试需要相应的cleanup/prepare;--oltp-nontrx-mode可指定测试用的sql类型
3.3 cleanup清空创建的表和数据
重要选项
--oltp-test-mode=STRINGtest type to use {simple,complex,nontrx,sp} [complex]
--oltp-reconnect-mode=STRINGreconnect mode {session,transaction,query,random} [session]
--oltp-sp-name=STRINGname of store procedure to call in SP test mode []
--oltp-read-only=[on|off]generate only 'read' queries (do not modify database) [off]
--oltp-skip-trx=[on|off]skip BEGIN/COMMIT statements [off]
--oltp-range-size=Nrange size for range queries [100]
--oltp-point-selects=Nnumber of point selects [10]
--oltp-simple-ranges=Nnumber of simple ranges [1]
--oltp-sum-ranges=Nnumber of sum ranges [1]
--oltp-order-ranges=Nnumber of ordered ranges [1]
--oltp-distinct-ranges=Nnumber of distinct ranges [1]
--oltp-index-updates=Nnumber of index update [1]
--oltp-non-index-updates=Nnumber of non-index updates [1]
--oltp-nontrx-mode=STRINGmode for non-transactional test {select, update_key, update_nokey, insert, delete} [select]
--oltp-auto-inc=[on|off]whether AUTO_INCREMENT (or equivalent) should be used on id column [on]
--oltp-connect-delay=Ntime in microseconds to sleep after connection to database [10000]
--oltp-user-delay-min=Nminimum time in microseconds to sleep after each request [0]
--oltp-user-delay-max=Nmaximum time in microseconds to sleep after each request [0]
--oltp-table-name=STRINGname of test table [sbtest]
--oltp-table-size=Nnumber of records in test table [10000]
--oltp-dist-type=STRINGrandom numbers distribution {uniform,gaussian,special} [special]
--oltp-dist-iter=Nnumber of iterations used for numbers generation [12]
--oltp-dist-pct=Npercentage of values to be treated as 'special' (for special distribution) [1]
--oltp-dist-res=Npercentage of 'special' values to use (for special distribution) [75]
附录
1 高级事务模式下执行的query列表
Point queries:
SELECT c FROM sbtest WHERE id=N
Range queries:
SELECT c FROM sbtest WHERE id BETWEEN N AND M
Range SUM() queries:
SELECT SUM(K) FROM sbtest WHERE id BETWEEN N and M
Range ORDER BY queries:
SELECT c FROM sbtest WHERE id between N and M ORDER BY c
Range DISTINCT queries:
SELECT DISTINCT c FROM sbtest WHERE id BETWEEN N and M ORDER BY c
UPDATEs on index column:
UPDATE sbtest SET k=k+1 WHERE id=N
UPDATEs on non-index column:
UPDATE sbtest SET c=N WHERE id=M
DELETE queries:
DELETE FROM sbtest WHERE id=N
INSERT queries:
INSERT INTO sbtest VALUES (...)
2 非事务模式下执行的query列表
Point queries:
SELECT pad FROM sbtest WHERE id=N
UPDATEs on index column:
UPDATE sbtest SET k=k+1 WHERE id=N
UPDATEs on non-index column:
UPDATE sbtest SET c=N WHERE id=M
DELETE queries:
DELETE FROM sbtest WHERE id=N
The generated row IDs are unique over each test run, so no row is deleted twice.
INSERT queries:
INSERT INTO sbtest (k, c, pad) VALUES(N, M, S)