sysbench的实现原理

1  简介

SysBench是一个模块化的、跨平台、多线程基准测试工具,主要用于评估测试各种不同系统参数下的数据库负载情况。它主要包括以下几种方式的测试:

       1cpu性能

       2、磁盘io性能

       3、调度程序性能

       4、内存分配及传输速度

       5POSIX线程性能

       6、数据库性能(OLTP基准测试)     

目前sysbench主要支持 MySQL,pgsql,oracle 3种数据库。

 

测试mysql时,sysbench按照指定的数量开启线程,每个线程与MySQL建立一个连接,每个线程不停地进行事务操作,打开事务,然后进行一些查询、更新、插入操作,提交事务,再开始新的事务;所有的SQL只访问一个表-sbtest,是由sysbenchprepare命令建好的。其中的记录数,也是在prepare时指定好并创建的。测试结束,会有一个统计结果,包括例如每秒事务数、平均响应时间等等。

 

 

 

2  安装

1.下载sysbenchhttp://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.cd  sysbench-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 :指定sysbenchbin目录;

with-mysql-includes=/u01/mysql/include/mysql :指定安装mysql时候的includes目录;

with-mysql-libs=/u01/mysql/lib/mysql:指定装mysql时候的lib目录;

with-mysqlsysbench默认支持mysql,如果需要测试oracle或者pgsql则需要制定–with-oracle或者–with-pgsql

 

 

 

3  实现

1 cpu

常用选项—cpu-max-prime=N,用于计算素数;--test=cpu

 

2 io

模拟了很多innodb特性;--test=fileio

分为prepareruncleanup,分别为生成数据,运行测试和清理数据;

--file-test-mode,分为seqrd/rndrd/seqwr/seqrewr/rndwr/rndrw,可进行顺序读写,随机读写以及混合随机读写;

输出结果显示调用fsync()频率以及使用sync或者async IO模式;

 

3 oltp

测试mysql,也分为三步:

3.1 prepare创建表并填充数据(数据库需要手工创建),表名默认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.2  run进行测试;

3种模式:

Simple:每个线程只运行SELECT c FROM sbtest WHERE id=N

Advanced transactional:执行事务,包含查询和DML(保证数据记录不变)

Non-transactional:可自主选择要运行的queryDML会影响表记录,多次测试需要相应的cleanup/prepare--oltp-nontrx-mode可指定测试用的sql类型


3.3 cleanup
  清空创建的表和数据

 

重要选项

  --oltp-test-mode=STRING         test type to use {simple,complex,nontrx,sp} [complex]

  --oltp-reconnect-mode=STRING    reconnect mode {session,transaction,query,random} [session]

  --oltp-sp-name=STRING           name 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=N             range size for range queries [100]

  --oltp-point-selects=N          number of point selects [10]

  --oltp-simple-ranges=N          number of simple ranges [1]

  --oltp-sum-ranges=N             number of sum ranges [1]

  --oltp-order-ranges=N           number of ordered ranges [1]

  --oltp-distinct-ranges=N        number of distinct ranges [1]

  --oltp-index-updates=N          number of index update [1]

  --oltp-non-index-updates=N      number of non-index updates [1]

  --oltp-nontrx-mode=STRING       mode 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=N          time in microseconds to sleep after connection to database [10000]

  --oltp-user-delay-min=N         minimum time in microseconds to sleep after each request [0]

  --oltp-user-delay-max=N         maximum time in microseconds to sleep after each request [0]

  --oltp-table-name=STRING        name of test table [sbtest]

  --oltp-table-size=N             number of records in test table [10000]

  --oltp-dist-type=STRING         random numbers distribution {uniform,gaussian,special} [special]

  --oltp-dist-iter=N              number of iterations used for numbers generation [12]

  --oltp-dist-pct=N               percentage of values to be treated as 'special' (for special distribution) [1]

  --oltp-dist-res=N               percentage 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)

 

 

http://www.cnblogs.com/minglog/archive/2011/05/10/2042143.html

http://blog.csdn.net/mchdba/article/details/8970056

http://bazaar.launchpad.net/~sysbench-developers/sysbench/0.5/files

请使用浏览器的分享功能分享到微信等