MySQL性能测试工具sysbench的安装和使用

sysbench是一个开源的、模块化的、跨平台的多线程性能测试工具,可以用来进行CPU、内存、磁盘I/O、线程、数据库的性能测试。目前支持的数据库有MySQL、Oracle和PostgreSQL。当前功能允许测试的系统参数有:

file I/O performance (文件I / O性能)
scheduler performance (调度性能)
memory allocation and transfer speed (内存分配和传输速度)
POSIX threads implementation performance (POSIX线程执行绩效)
database server performance (OLTP benchmark) (数据库服务器性能)

安装:
      1):Ubuntu系统可以直接apt,如:

apt-get install sysbench

2):其他系统的则可以编译安装[在/home/zhoujy/目录下]:(安装前先装automake,libtool)

wget http://nchc.dl.sourceforge.net/project/sysbench/sysbench/0.4.12/sysbench-0.4.12.tar.gz
tar zxvf sysbench-0.4.12.tar.gz
进入解压目录,并且创建安装目录:
root@m2:/home/zhoujy# cd sysbench-0.4.12/
root@m2:/home/zhoujy/sysbench-0.4.12# mkdir /usr/sysbench/
准备编译
root@m2:/home/zhoujy/sysbench-0.4.12# apt-get install automake
root@m2:/home/zhoujy/sysbench-0.4.12#apt-get install libtool
root@m2:/home/zhoujy/sysbench-0.4.12# ./autogen.sh

要是出现:perl: warning: Falling back to the standard locale ("C")。则需要设置locale:

echo "export LC_ALL=C" >> /root/.bashrc
source /root/.bashrc

要是没有安装开发包,即/usr/include/ 目录下面没有mysql文件夹。则需要执行安装(版本为12.04):

sudo apt-get install libmysqlclient-dev
sudo apt-get install libmysqld-dev
sudo apt-get install libmysqld-pic

执行configure操作:

./configure --prefix=/usr/sysbench/ --with-mysql-includes=/usr/include/mysql/ --with-mysql-libs=/usr/lib/mysql/ --with-mysql
说明:
--prefix=/usr/sysbench/                    :指定sysbench的安装目录。
--with-mysql-includes=/usr/include/mysql/  :指定安装mysql时候的includes目录。
--with-mysql-libs=/usr/lib/mysql/          :指定装mysql时候的lib目录。
--with-mysql                               :sysbench默认支持mysql,如果需要测试oracle或者pgsql则需要制定–with-oracle或者–with-pgsql。

在这里需要先执行:

cp /usr/bin/libtool /home/zhoujy/sysbench-0.4.12/libtool

再make和make install。否者会出现 libtool 报出的 Xsysbench: command not found  错误,则表示编译文件包的libtool版本太低,需要替换。

选项说明(通用):

root@db2:~# sysbench
Missing required command argument.
Usage: #使用方法
  sysbench [general-options]... --test=<test-name> [test-options]... command

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 #版本信息。

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 # 数据库,事务处理

Commands: prepare:测试前准备工作; run:正式测试 cleanup:测试后删掉测试数据 help version

See ‘sysbench --test=<name> help‘ for a list of options for each test. #查看每个测试项目的更多选项列表

更多选项:
1):sysbench  --test=fileio help

root@db2:~# sysbench  --test=fileio help
sysbench 0.4.12:  multi-threaded system evaluation benchmark

fileio options:
  --file-num=N   创建测试文件的数量。默认是128
  --file-block-size=N  测试时文件块的大小。默认是16384(16K)
  --file-total-size=SIZE   测试文件的总大小。默认是2G
  --file-test-mode=STRING  文件测试模式{seqwr(顺序写), seqrewr(顺序读写), seqrd(顺序读), rndrd(随机读), rndwr(随机写), rndrw(随机读写)}
  --file-io-mode=STRING   文件操作模式{sync(同步),async(异步),fastmmap(快速map映射),slowmmap(慢map映射)}。默认是sync
  --file-extra-flags=STRING   使用额外的标志来打开文件{sync,dsync,direct} 。默认为空
  --file-fsync-freq=N   执行fsync()的频率。(0 – 不使用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   如果可以,合并最多的IO请求数(0 – 表示不合并)。默认是0
  --file-rw-ratio=N     测试时的读写比例。默认是1.5

root@db2:~# sysbench  --test=fileio help
sysbench 0.4.12:  multi-threaded system evaluation benchmark

fileio options:
  --file-num=N   创建测试文件的数量。默认是128
  --file-block-size=N  测试时文件块的大小。默认是16384(16K)
  --file-total-size=SIZE   测试文件的总大小。默认是2G
  --file-test-mode=STRING  文件测试模式{seqwr(顺序写), seqrewr(顺序读写), seqrd(顺序读), rndrd(随机读), rndwr(随机写), rndrw(随机读写)}
  --file-io-mode=STRING   文件操作模式{sync(同步),async(异步),fastmmap(快速map映射),slowmmap(慢map映射)}。默认是sync
  --file-extra-flags=STRING   使用额外的标志来打开文件{sync,dsync,direct} 。默认为空
  --file-fsync-freq=N   执行fsync()的频率。(0 – 不使用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   如果可以,合并最多的IO请求数(0 – 表示不合并)。默认是0
  --file-rw-ratio=N     测试时的读写比例。默认是1.5

2):sysbench  --test=cpu help

--cpu-max-prime=N  最大质数发生器数量。默认是10000
--cpu-max-prime=N  最大质数发生器数量。默认是10000

3):sysbench  --test=memory help

root@db2:~# sysbench  --test=memory help
sysbench 0.4.12:  multi-threaded system evaluation benchmark

memory options:
  --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

root@db2:~# sysbench  --test=memory help
sysbench 0.4.12:  multi-threaded system evaluation benchmark

memory options:
  --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

4):sysbench  --test=threads help

sysbench 0.4.12:  multi-threaded system evaluation benchmark

threads options:
  --thread-yields=N   每个请求产生多少个线程。默认是1000
  --thread-locks=N    每个线程的锁的数量。默认是8
sysbench 0.4.12:  multi-threaded system evaluation benchmark

threads options:
  --thread-yields=N   每个请求产生多少个线程。默认是1000
  --thread-locks=N    每个线程的锁的数量。默认是8

5):sysbench  --test=mutex help

root@db2:~# sysbench  --test=mutex help
sysbench 0.4.12:  multi-threaded system evaluation benchmark

mutex options:

  --mutex-num=N    数组互斥的总大小。默认是4096
  --mutex-locks=N    每个线程互斥锁的数量。默认是50000
  --mutex-loops=N    内部互斥锁的空循环数量。默认是10000

root@db2:~# sysbench  --test=mutex help
sysbench 0.4.12:  multi-threaded system evaluation benchmark

mutex options:

  --mutex-num=N    数组互斥的总大小。默认是4096
  --mutex-locks=N    每个线程互斥锁的数量。默认是50000
  --mutex-loops=N    内部互斥锁的空循环数量。默认是10000

6): sysbench --test=oltp help

root@db2:~# sysbench --test=oltp help
sysbench 0.4.12:  multi-threaded system evaluation benchmark

oltp options:
  --oltp-test-mode=STRING    执行模式{simple,complex(advanced transactional),nontrx(non-transactional),sp}。默认是complex
  --oltp-reconnect-mode=STRING 重新连接模式{session(不使用重新连接。每个线程断开只在测试结束),transaction(在每次事务结束后重新连接),query(在每个SQL语句执行完重新连接),random(对于每个事务随机选择以上重新连接模式)}。默认是session
  --oltp-sp-name=STRING   存储过程的名称。默认为空
  --oltp-read-only=[on|off]  只读模式。Update,delete,insert语句不可执行。默认是off
  --oltp-skip-trx=[on|off]   省略begin/commit语句。默认是off
  --oltp-range-size=N      查询范围。默认是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   查询类型对于非事务执行模式{select, update_key, update_nokey, insert, delete} [select]
  --oltp-auto-inc=[on|off]      AUTO_INCREMENT是否开启。默认是on
  --oltp-connect-delay=N     在多少微秒后连接数据库。默认是10000
  --oltp-user-delay-min=N    每个请求最短等待时间。单位是ms。默认是0
  --oltp-user-delay-max=N    每个请求最长等待时间。单位是ms。默认是0
  --oltp-table-name=STRING  测试时使用到的表名。默认是sbtest
  --oltp-table-size=N         测试表的记录数。默认是10000
  --oltp-dist-type=STRING    分布的随机数{uniform(均匀分布),Gaussian(高斯分布),special(空间分布)}。默认是special
  --oltp-dist-iter=N    产生数的迭代次数。默认是12
  --oltp-dist-pct=N    值的百分比被视为‘special‘ (for special distribution)。默认是1
  --oltp-dist-res=N    ‘special’的百分比值。默认是75

General database options:
  --db-driver=STRING  指定数据库驱动程序(‘help‘ to get list of available drivers)
  --db-ps-mode=STRING编制报表使用模式{auto, disable} [auto]
Compiled-in database drivers:
    mysql - MySQL driver
mysql options:
  --mysql-host=[LIST,...]       MySQL server host [localhost]
  --mysql-port=N                MySQL server port [3306]
  --mysql-socket=STRING         MySQL socket
  --mysql-user=STRING           MySQL user [sbtest]
  --mysql-password=STRING       MySQL password []
  --mysql-db=STRING             MySQL database name [sbtest]
  --mysql-table-engine=STRING   storage engine to use for the test table {myisam,innodb,bdb,heap,ndbcluster,federated} [innodb]
  --mysql-engine-trx=STRING     whether storage engine used is transactional or not {yes,no,auto} [auto]
  --mysql-ssl=[on|off]          use SSL connections, if available in the client library [off]
  --myisam-max-rows=N           max-rows parameter for MyISAM tables [1000000]
  --mysql-create-options=STRING additional options passed to CREATE TABLE []

测试: 
1)测试CPU: sysbench --test=cpu --cpu-max-prime=2000 run

root@db2:~# sysbench --test=cpu --cpu-max-prime=2000 run
sysbench 0.4.12:  multi-threaded system evaluation benchmark

Running the test with following options:
Number of threads: 1

Doing CPU performance benchmark

Threads started!
Done.

Maximum prime number checked in CPU test: 2000

Test execution summary:
    total time:                          3.7155s
    total number of events:              10000
    total time taken by event execution: 3.7041
    per-request statistics:
         min:                                  0.36ms
         avg:                                  0.37ms
         max:                                  2.53ms
         approx.  95 percentile:               0.37ms

Threads fairness:
    events (avg/stddev):           10000.0000/0.00
    execution time (avg/stddev):   3.7041/0.00

2)测试线程:sysbench  --test=threads --num-threads=500 --thread-yields=100 --thread-locks=4 run

root@db2:~# sysbench  --test=threads --num-threads=500 --thread-yields=100 --thread-locks=4 run
sysbench 0.4.12:  multi-threaded system evaluation benchmark

Running the test with following options:
Number of threads: 500

Doing thread subsystem performance test
Thread yields per test: 100 Locks used: 4
Threads started!
Done.

Test execution summary:
    total time:                          1.0644s
    total number of events:              10000
    total time taken by event execution: 501.3952
    per-request statistics:
         min:                                  0.05ms
         avg:                                 50.14ms
         max:                                587.05ms
         approx.  95 percentile:             190.28ms

Threads fairness:
    events (avg/stddev):           20.0000/4.72
    execution time (avg/stddev):   1.0028/0.01

3)测试IO:--num-threads 开启的线程     --file-total-size 总的文件大小
1,prepare阶段,生成需要的测试文件,完成后会在当前目录下生成很多小文件。
sysbench --test=fileio --num-threads=16 --file-total-size=2G --file-test-mode=rndrw prepare     
2,run阶段
sysbench --test=fileio --num-threads=20 --file-total-size=2G --file-test-mode=rndrw run
3,清理测试时生成的文件
sysbench --test=fileio --num-threads=20 --file-total-size=2G --file-test-mode=rndrw cleanup

root@db2:~/io# sysbench --test=fileio --num-threads=16 --file-total-size=2G --file-test-mode=rndrw prepare
sysbench 0.4.12:  multi-threaded system evaluation benchmark

128 files, 16384Kb each, 2048Mb total
Creating files for the test...
root@db2:~/io# sysbench --test=fileio --num-threads=20 --file-total-size=2G --file-test-mode=rndrw run
sysbench 0.4.12:  multi-threaded system evaluation benchmark

Running the test with following options:
Number of threads: 20

Extra file open flags: 0
128 files, 16Mb each
2Gb total file size
Block size 16Kb
Number of random requests for random IO: 10000
Read/Write ratio for combined random IO test: 1.50
Periodic FSYNC enabled, calling fsync() each 100 requests.
Calling fsync() at the end of test, Enabled.
Using synchronous I/O mode
Doing random r/w test
Threads started!
Done.

Operations performed:  6010 Read, 3997 Write, 12803 Other = 22810 Total
Read 93.906Mb  Written 62.453Mb  Total transferred 156.36Mb  (6.6668Mb/sec)
  426.68 Requests/sec executed

Test execution summary:
    total time:                          23.4534s
    total number of events:              10007
    total time taken by event execution: 111.5569
    per-request statistics:
         min:                                  0.01ms
         avg:                                 11.15ms
         max:                                496.18ms
         approx.  95 percentile:              53.05ms

Threads fairness:
    events (avg/stddev):           500.3500/37.50
    execution time (avg/stddev):   5.5778/0.21

root@db2:~/io# sysbench --test=fileio --num-threads=20 --file-total-size=2G --file-test-mode=rndrw cleanup
sysbench 0.4.12:  multi-threaded system evaluation benchmark

Removing test files...

4)测试内存:sysbench --test=memory --memory-block-size=8k --memory-total-size=1G run

sysbench 0.4.12:  multi-threaded system evaluation benchmark
Operations performed: 1310720 (396525.32 ops/sec)
10240.00 MB transferred (3097.85 MB/sec)
Test execution summary:
total time:                          3.3055s
total number of events:              1310720
total time taken by event execution: 205.0560
per-request statistics:
min:                                  0.00ms
avg:                                  0.16ms
max:                               1066.04ms
approx.  95 percentile:               0.02ms
Threads fairness:
events (avg/stddev):           13107.2000/3870.38
execution time (avg/stddev):   2.0506/0.28

5)测试mutex:sysbench –test=mutex –num-threads=100 –mutex-num=1000 –mutex-locks=100000 –mutex-loops=10000 run

Test execution summary:
total time:                          12.5606s
total number of events:              100
total time taken by event execution: 1164.4236
per-request statistics:
min:                               9551.87ms
avg:                              11644.24ms
max:                              12525.32ms
approx.  95 percentile:           12326.25ms
Threads fairness:
events (avg/stddev):           1.0000/0.00
execution time (avg/stddev):   11.6442/0.59

6)测试OLTP:
1,prepare阶段,生成需要的测试表
sysbench --test=oltp --mysql-table-engine=innodb --mysql-host=192.168.X.X --mysql-db=test --oltp-table-size=500000 --mysql-user=root --mysql-password=123456 prepare
2,run阶段
sysbench --num-threads=16 --test=oltp --mysql-table-engine=innodb --mysql-host=192.168.x.x --mysql-db=test --oltp-table-size=500000 --mysql-user=root --mysql-password=123456 run
3,清理测试时生成的测试表
sysbench --num-threads=16 --test=oltp --mysql-table-engine=innodb --mysql-host=192.168.x.x --mysql-db=test --oltp-table-size=500000 --mysql-user=root --mysql-password=123456 cleanup

root@db2:~# sysbench --test=oltp --mysql-table-engine=innodb --mysql-host=192.168.x.x --mysql-db=rep_test --oltp-table-size=1000000 --mysql-user=root --mysql-password=123456 prepare
sysbench 0.4.12:  multi-threaded system evaluation benchmark

No DB drivers specified, using mysql
Creating table ‘sbtest‘...
Creating 1000000 records in table ‘sbtest‘...
root@db2:~# sysbench --num-threads=16 --test=oltp --mysql-table-engine=innodb --mysql-host=192.168.x.x --mysql-db=rep_test --oltp-table-size=1000000 --mysql-user=root --mysql-password=123456 run
sysbench 0.4.12:  multi-threaded system evaluation benchmark

No DB drivers specified, using mysql
Running the test with following options:
Number of threads: 16

Doing OLTP test.
Running mixed OLTP test
Using Special distribution (12 iterations,  1 pct of values are returned in 75 pct cases)
Using "BEGIN" for starting transactions
Using auto_inc on the id column
Maximum number of requests for OLTP test is limited to 10000
Threads started!
Done.

OLTP test statistics:
    queries performed:
        read:                            140000
        write:                           50000
        other:                           20000
        total:                           210000
#—-事务数总计,每秒的事务处理量
    transactions:                        10000  (356.98 per sec.)
    deadlocks:                           0      (0.00 per sec.)
    read/write requests:                 190000 (6782.56 per sec.)
    other operations:                    20000  (713.95 per sec.)

Test execution summary:
    total time:                          28.0130s
    total number of events:              10000
    total time taken by event execution: 447.7731
    per-request statistics:
         min:                                  3.91ms
         avg:                                 44.78ms
         max:                                207.61ms
         approx.  95 percentile:              76.48ms

Threads fairness:
    events (avg/stddev):           625.0000/22.96
    execution time (avg/stddev):   27.9858/0.01

root@db2:~# sysbench --num-threads=16 --test=oltp --mysql-table-engine=innodb --mysql-host=192.168.x.x --mysql-db=rep_test --oltp-table-size=1000000 --mysql-user=root --mysql-password=123456 cleanup
sysbench 0.4.12:  multi-threaded system evaluation benchmark

No DB drivers specified, using mysql
Dropping table ‘sbtest‘...
Done.

测试表信息:

mysql> desc sbtest;
+-------+------------------+------+-----+---------+----------------+
| Field | Type             | Null | Key | Default | Extra          |
+-------+------------------+------+-----+---------+----------------+
| id    | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| k     | int(10) unsigned | NO   | MUL | 0       |                |
| c     | char(120)        | NO   |     |         |                |
| pad   | char(60)         | NO   |     |         |                |
+-------+------------------+------+-----+---------+----------------+
4 rows in set (0.01 sec)

mysql> show create table sbtest\G;
*************************** 1. row ***************************
       Table: sbtest
Create Table: 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`)
) ENGINE=InnoDB AUTO_INCREMENT=1000001 DEFAULT CHARSET=utf8
1 row in set (0.01 sec)

ERROR:
No query specified

mysql> select count(*) from sbtest;
+----------+
| count(*) |
+----------+
|  1000000 |
+----------+
1 row in set (0.30 sec)
mysql> desc sbtest;
ERROR 1146 (42S02): Table ‘rep_test.sbtest‘ doesn‘t exist

可以用这个测试:

sysbench --num-threads=4 --test=oltp --oltp-reconnect-mode=random --mysql-table-engine=innodb --mysql-host=192.168.200.201 --mysql-db=rep_test --ol
tp-table-size=500000 --mysql-user=zjy --mysql-password=1234#

一. 安装解压后:
  1. $ cd sysbench-0.5
  2. $ ./autogen.sh
  3. $ ./configure --prefix=(选择sysbench安装在哪) (如果需要测试oltp可以加后面的选项)--with-mysql-includes=/usr/local/mysql/include(换成你自己的) --with-mysql-libs=/usr/local/mysql/lib --with-mysql (还可以支持oracle和pgsql
  4. $ make && make install
可能需要安装一下环境:
  1. $ sudo yum -y install libtool automake
源码来安装autoconf和automake

附带这两个源码包url
http://mirrors.kernel.org/gnu/autoconf/autoconf-2.65.tar.gz
http://mirrors.kernel.org/gnu/automake/automake-1.15.tar.gz

配置环境变量:
  1. $ vi ~/.bash_profile
sysbench --version 或者直接 sysbench 可以看到版本信息或者帮助信息
  1. $ source ~/.bash_profile
  2. $ sysbench --version
  3. sysbench 0.5
如果报错:sysbench: error while loading shared libraries: libmysqlclient_r.so.15: cannot open shared object file: No such file or directory则有可能是lib路径不对

  1. $ sudo vi /etc/ld.so.conf
  2. 添加 /usr/local/mysql/lib 保存退出
  3. $ sudo /sbin/ldconfig -v


二. file IO 指定--test=fileio即可。

fileio options:  --file-num=N                  number of files to create [128]        // 创建的文件数  --file-block-size=N           block size to use in all IO operations [16384]        // 块大小,比如4096为4K  --file-total-size=SIZE        total size of files to create [2G]        // 要创建文件的总大小  --file-test-mode=STRING       test mode {seqwr, seqrewr, seqrd, rndrd, rndwr, rndrw}        // 磁盘访问模式,分别为顺序写,顺序读写,顺序读,随机写,随机读写,随机读  --file-io-mode=STRING           file operations mode {sync,async,mmap} [sync]        // 文件操作模式,分别为同步,异步,映射至内存,缺省为同步  --file-extra-flags=STRING     additional flags to use on opening files {sync,dsync,direct} []        //  打开文件的附加标识  --file-fsync-freq=N           do fsync() after this number of requests (0 - don‘t use fsync()) [100]        // 在某个数请求之后做fsync(),缺省为100  --file-fsync-all=[on|off]     do fsync() after each write operation [off]        // 打开或关闭在每个写操作后执行fsync(),缺省为OFF  --file-fsync-end=[on|off]     do fsync() at the end of test [on]        // 打开或关闭结束test时执行fsync(),缺省为ON  --file-fsync-mode=STRING      which method to use for synchronization {fsync, fdatasync} [fsync]        // 使用什么方法同步,缺省为fsync  --file-merged-requests=N      merge at most this number of IO requests if possible (0 - don‘t merge) [0]        // 尽可能合并IO请求的数量,缺省为0  --file-rw-ratio=N             reads/writes ratio for combined test [1.5]        // 读写比例,默认为1.5

测试例子:
  1. $ sysbench --test=fileio --file-num=10 --file-total-size=1G --file-block-size=4096 --file-test-mode=seqwr --file-io-mode=sync prepare        // 先做文件准备 参数为prepare 创建10个文件 每个102.4MB 文件块为4K
  2. sysbench 0.5: multi-threaded system evaluation benchmark
  3. 10 files, 104857Kb each, 1023Mb total
  4. Creating files for the test...
  5. Extra file open flags: 0
  6. Creating file test_file.0
  7. Creating file test_file.1
  8. Creating file test_file.2
  9. Creating file test_file.3
  10. Creating file test_file.4
  11. Creating file test_file.5
  12. Creating file test_file.6
  13. Creating file test_file.7
  14. Creating file test_file.8
  15. Creating file test_file.9
  16. 1073766400 bytes written in 12.11 seconds (84.56 MB/sec).
  17. $ sysbench --test=fileio --file-num=10 --file-total-size=1G --file-block-size=4096 --file-test-mode=seqwr --file-io-mode=sync run    // 开始测试,参数改为run
  18. sysbench 0.5: multi-threaded system evaluation benchmark
  19. Running the test with following options:
  20. Number of threads: 1
  21. Random number generator seed is 0 and will be ignored
  22. Extra file open flags: 0
  23. 10 files, 102.4Mb each
  24. 1024Mb total file size
  25. Block size 4Kb
  26. Periodic FSYNC enabled, calling fsync() each 100 requests.
  27. Calling fsync() at the end of test, Enabled.
  28. Using synchronous I/O mode
  29. Doing sequential write (creation) test
  30. Threads started!
  31. Operations performed: 0 reads, 10000 writes, 1000 Other = 11000 Total
  32. Read 0b Written 39.062Mb Total transferred 39.062Mb (8.3495Mb/sec)
  33. 2137.47 Requests/sec executed
  34. General statistics:
  35. total time: 4.6784s
  36. total number of events: 10000
  37. total time taken by event execution: 0.0767s
  38. response time:
  39. min: 0.00ms
  40. avg: 0.01ms
  41. max: 0.08ms
  42. approx. 95 percentile: 0.01ms
  43. Threads fairness:
  44. events (avg/stddev): 10000.0000/0.00
  45. execution time (avg/stddev): 0.0767/0.00
  46. $ sysbench --test=fileio --file-num=10 --file-total-size=1G --file-block-size=4096 --file-test-mode=seqwr --file-io-mode=sync cleanup    // 参数为cleanup 清除测试文件
  47. sysbench 0.5: multi-threaded system evaluation benchmark
  48. Removing test files...


三. CPU test指定--test=cpu即可。

cpu options:  --cpu-max-prime=N      upper limit for primes generator [10000]        // 设置素数最大上限值,缺省为10000 

测试例子:
  1. $ sysbench --test=cpu --cpu-max-prime=1024 run
  2. sysbench 0.5: multi-threaded system evaluation benchmark
  3. Running the test with following options:
  4. Number of threads: 1
  5. Random number generator seed is 0 and will be ignored
  6. Primer numbers limit: 1024
  7. Threads started!
  8. General statistics:
  9. total time: 0.4622s
  10. total number of events: 10000
  11. total time taken by event execution: 0.4561s
  12. response time:
  13. min: 0.04ms
  14. avg: 0.05ms
  15. max: 0.15ms
  16. approx. 95 percentile: 0.05ms
  17. Threads fairness:
  18. events (avg/stddev): 10000.0000/0.00
  19. execution time (avg/stddev): 0.4561/0.00


四. memory test指定--test=memory即可。

memory options:  --memory-block-size=SIZE    size of memory block for test [1K]         // 内存块的大小,缺省为1K  --memory-total-size=SIZE    total size of data to transfer [100G]        // 总共需要传输的大小,缺省为100G  --memory-scope=STRING       memory access scope {global,local} [global]// 内存访问是全局还是本地,缺省为全局  --memory-hugetlb=[on|off]   allocate memory from HugeTLB pool [off]// 是否从HugeTLB中分配内存,缺省为否  --memory-oper=STRING        type of memory operations {read, write, none} [write]// 内存的操作方式,读,写,或none,缺省为写  --memory-access-mode=STRING memory access mode {seq,rnd} [seq]// 内存访问模式,顺序或随机,默认为序列

测试例子:
  1. $ sysbench --test=memory --memory-block-size=4096 --memory-total-size=50G --memory-oper=read --memory-access-mode=rnd run
  2. sysbench 0.5: multi-threaded system evaluation benchmark
  3. Running the test with following options:
  4. Number of threads: 1
  5. Random number generator seed is 0 and will be ignored
  6. Threads started!
  7. Operations performed: 13107200 (950195.57 ops/sec)
  8. 51200.00 MB transferred (3711.70 MB/sec)
  9. General statistics:
  10. total time: 13.7942s
  11. total number of events: 13107200
  12. total time taken by event execution: 5.8543s
  13. response time:
  14. min: 0.00ms
  15. avg: 0.00ms
  16. max: 0.06ms
  17. approx. 95 percentile: 0.00ms
  18. Threads fairness:
  19. events (avg/stddev): 13107200.0000/0.00
  20. execution time (avg/stddev): 5.8543/0.00


五. threads test指定--test=threads即可。

threads options:  --thread-yields=N      number of yields to do per request [1000]  --thread-locks=N       number of locks per thread [8]// 每个线程锁的数目
测试例子:
  1. [op@sAno1y sysbench]$ sysbench --test=threads run
  2. sysbench 0.5: multi-threaded system evaluation benchmark
  3. Running the test with following options:
  4. Number of threads: 1
  5. Random number generator seed is 0 and will be ignored
  6. Threads started!
  7. General statistics:
  8. total time: 3.6699s
  9. total number of events: 10000
  10. total time taken by event execution: 3.6635s
  11. response time:
  12. min: 0.35ms
  13. avg: 0.37ms
  14. max: 0.74ms
  15. approx. 95 percentile: 0.37ms
  16. Threads fairness:
  17. events (avg/stddev): 10000.0000/0.00
  18. execution time (avg/stddev): 3.6635/0.00


六. mutex test指定--test=mutex即可。

mutex options:  --mutex-num=N        total size of mutex array [4096]// 互斥体数据大小,缺省为4K  --mutex-locks=N      number of mutex locks to do per thread [50000]// 每个线程的互斥锁,缺省为50000  --mutex-loops=N      number of empty loops to do inside mutex lock [10000]// 互斥锁内空循环的数目,缺省为10000

测试例子:

  1. [op@sAno1y sysbench]$ sysbench --test=mutex --mutex-num=8192 --number-locks=102400 run
  2. sysbench 0.5: multi-threaded system evaluation benchmark
  3. Running the test with following options:
  4. Number of threads: 1
  5. Random number generator seed is 0 and will be ignored
  6. Threads started!
  7. General statistics:
  8. total time: 0.0049s
  9. total number of events: 1
  10. total time taken by event execution: 0.0048s
  11. response time:
  12. min: 4.79ms
  13. avg: 4.79ms
  14. max: 4.79ms
  15. approx. 95 percentile: 4.79ms
  16. Threads fairness:
  17. events (avg/stddev): 1.0000/0.00
  18. execution time (avg/stddev): 0.0048/0.00

七. oltp test

指定--test=oltp即可。

oltp options:General database options: --db-driver=STRING  specifies database driver to use (‘help‘ to get list of available drivers)   --db-ps-mode=STRING prepared statements usage mode {auto, disable} [auto]

Compiled-in database drivers:  mysql - MySQL driver

mysql options:  --mysql-host=[LIST,...]       MySQL server host [localhost]  --mysql-port=N                MySQL server port [3306]  --mysql-socket=STRING         MySQL socket  --mysql-user=STRING           MySQL user [sbtest]  --mysql-password=STRING       MySQL password []  --mysql-db=STRING             MySQL database name [sbtest]  --mysql-table-engine=STRING   storage engine to use for the test table {myisam,innodb,bdb,heap,ndbcluster,federated} [innodb]  --mysql-engine-trx=STRING     whether storage engine used is transactional or not {yes,no,auto} [auto]  --mysql-ssl=[on|off]          use SSL connections, if available in the client library [off]  --myisam-max-rows=N           max-rows parameter for MyISAM tables [1000000]  --mysql-create-options=STRING additional options passed to CREATE TABLE []

创建测试数据:--oltp-table-size为单表创建数据的数量
  1. sysbench --test=oltp --mysql-table-engine=innodb --mysql-socket=/tmp/mysql.sock --mysql-user=root --mysql-host=localhost --mysql-password=root --mysql-db=test --oltp-table-size=50000000 prepare
开始run:其中--num-threads为并发数,--max-time为测试的时长(秒) 
  1. sysbench --test=oltp --mysql-table-engine=innodb --mysql-socket=/tmp/mysql.sock --mysql-user=root --mysql-host=localhost --mysql-password=root --mysql-db=test --oltp-table-size=5000000 --num-threads=1000 --max-time=60 --max-requests=0 --report-interval=10 run
在sysbench 0.5的版本中,则可以使用一个lua脚本来创建表,并且可以指定多张表,比如:其中 oltp_tables_count为指定prepare几张表,--rand-init打开则表示随机写数:
  1. sysbench --test=/opt/app/sysbench-0.5/sysbench/tests/db/oltp.lua --mysql-table-engine=innodb --mysql-socket=/tmp/mysql.sock --mysql-user=root --mysql-host=localhost --mysql-password=root --mysql-db=test \
  2. --oltp-table-size=50000000 --oltp_tables_count=10 --rand-init=on prepare
生成的测试表的数据样例:*************************** 1. row *************************** id: 1  k: 50206885  c: 08566691963-88624912351-16662227201-46648573979-64646226163-77505759394-75470094713-41097360717-15161106334-50535565977pad: 63188288836-92351140030-06390587585-66802097351-49282961843*************************** 2. row *************************** id: 2  k: 49910688  c: 95969429576-20587925969-20202408199-67602281819-18293380360-38184587501-73192830026-41693404212-56705243222-89212376805pad: 09512147864-77936258834-40901700703-13541171421-15205431759*************************** 3. row *************************** id: 3  k: 50204693  c: 26283585383-48610978532-72166636310-67148386979-89643583984-06169170732-23477134062-17788128188-73465768032-24619558652pad: 21979564480-87492594656-60524686334-78820761788-57684966682*************************** 4. row *************************** id: 4  k: 52180295  c: 72200234338-75748118569-08939863650-01688814841-36798767826-71560494483-89421079440-11810718401-29133837777-68338627243pad: 80945118876-33522718290-51523426562-15979384524-91541356971*************************** 5. row *************************** id: 5  k: 41395699  c: 29279855805-99348203463-85191104223-39587263726-81794340135-73817557808-54578801760-64404111877-55434439976-37212880746pad: 59222897263-22759023974-22020489960-93434521232-779811525345 rows in set (0.00 sec)

测试结果说明:
  1. No DB drivers specified, using mysql
  2. Running the test with following options:
  3. Number of threads: 1
  4. Random number generator seed is 0 and will be ignored
  5. Doing OLTP test.
  6. Running mixed OLTP test
  7. Using Special distribution (12 iterations, 1 pct of values are returned in 75 pct cases)
  8. Using "BEGIN" for starting transactions
  9. Using auto_inc on the id column
  10. Maximum number of requests for OLTP test is limited to 10000
  11. Using 1 test tables
  12. Threads started!
  13. Done.
  14. OLTP test statistics:
  15. queries performed:
  16. read: 140000 -- 读总数
  17. write: 50000 -- 写总数
  18. other: 20000 -- 其他操作总数(除了dml之外的操作)
  19. total: 210000 -- 全部总数
  20. transactions: 10000 (229.62 per sec.) -- 总事务数
  21. deadlocks: 0 (0.00 per sec.) -- 死锁数
  22. read/write requests: 190000 (4362.73 per sec.) -- 读写总数
  23. other operations: 20000 (459.23 per sec.) -- 其他操作总数
  24. General statistics:
  25. total time: 43.5507s -- 总耗时
  26. total number of events: 10000 -- 总共发生的事务数
  27. total time taken by event execution: 43.4491 -- 所有事务耗时相加(不考虑并行因素)
  28. response time:
  29. min: 3.75ms -- 最小耗时
  30. avg: 4.34ms -- 平均耗时
  31. max: 30.58ms -- 最大耗时
  32. approx. 95 percentile: 4.44ms -- 去掉5%的最大最小值,剩余95%平均耗时
  33. Threads fairness:
  34. events (avg/stddev): 10000.0000/0.00
  35. execution time (avg/stddev): 43.4491/0.00

附录: (通用选项)
    1. Usage:
    2. sysbench [general-options]... --test= [test-options]... command
    3. General options:
    4. --num-threads=N number of threads to use [1]
    5. --max-requests=N limit for total number of requests [10000]
    6. --max-time=N limit for total execution time in seconds [0]
    7. --forced-shutdown=STRING amount of time to wait after --max-time before forcing shutdown [off]
    8. --thread-stack-size=SIZE size of stack per thread [64K]
    9. --tx-rate=N target transaction rate (tps) [0]
    10. --report-interval=N periodically report intermediate statistics with a specified interval in seconds. 0 disables intermediate reports [0]
    11. --report-checkpoints=[LIST,...]dump full statistics and reset all counters at specified points in time. The argument is a list of comma-separated values representing the amount of time in seconds elapsed from start of test when report checkpoint(s) must be performed. Report checkpoints are off by default. []
    12. --test=STRING test to run
    13. --debug=[on|off] print more debugging info [off]
    14. --validate=[on|off] perform validation checks where possible [off]
    15. --help=[on|off] print help and exit
    16. --version=[on|off] print version and exit [off]
    17. --rand-init=[on|off] initialize random number generator [off]
    18. --rand-type=STRING random numbers distribution {uniform,gaussian,special,pareto} [special]
    19. --rand-spec-iter=N number of iterations used for numbers generation [12]
    20. --rand-spec-pct=N percentage of values to be treated as ‘special‘ (for special distribution) [1]
    21. --rand-spec-res=N percentage of ‘special‘ values to use (for special distribution) [75]
    22. --rand-seed=N seed for random number generator, ignored when 0 [0]
    23. --rand-pareto-h=N parameter h for pareto distibution [0.2]
    24. Log options:
    25. --verbosity=N verbosity level {5 - debug, 0 - only critical messages} [3]
    26. --percentile=N percentile rank of query response times to count [95]
    27. Compiled-in tests:
    28. fileio - File I/O test
    29. cpu - CPU performance test
    30. memory - Memory functions speed test
    31. threads - Threads subsystem performance test
    32. mutex - Mutex performance test
    33. Commands: prepare run cleanup help version
    34. See ‘sysbench --test= help‘ for a list of options for each test.

原文地址:https://www.cnblogs.com/klb561/p/10372151.html

时间: 2024-10-14 08:15:58

MySQL性能测试工具sysbench的安装和使用的相关文章

Mysql 性能测试工具 sysbench的安装和使用

工作上需要用到AWS和Azure的Mysql服务,需要测试比较一下两个云服务的性能.于是开始百度 + google,查找性能测试工具.最终决定用sysbench. sysbench介绍 sysbench是一款开源的多线程性能测试工具,可以执行CPU/内存/线程/IO/数据库等方面的性能测试. 数据库目前支持MySQL/Oracle/PostgreSQL.本文只是简单演示一下几种测试的用法,后续准备利用sysbench来对MySQL进行一系列的测试.具体的一些参数设置,需要根据不同的测试要求来进行

Mysql多线程性能测试工具sysbench 安装、使用和测试

From:http://www.cnblogs.com/zhoujinyi/archive/2013/04/19/3029134.html 摘要:      sysbench是一个开源的.模块化的.跨平台的多线程性能测试工具,可以用来进行CPU.内存.磁盘I/O.线程.数据库的性能测试.目前支持的数据库有MySQL.Oracle和PostgreSQL.当前功能允许测试的系统参数有: file I/O performance (文件I / O性能) scheduler performance (调

安装性能测试工具:sysbench和使用apache的ab

一.软件的用途,它主要包括以下几种方式的测试:1.cpu性能2.磁盘io性能3.调度程序性能4.内存分配及传输速度5.POSIX线程性能6.数据库性能(OLTP基准测试) 这个软件为什么找不到官网呢?giulib上面的网址只能下载源码.但是使用说明,却没有了.估计是一个个人软件,没有后续更新了. 最新版本是0.5版本.本来就是基本的功能,不需要完善的.所以更新不需要很频繁.比如memcache这种软件也十一月的.也就算1.x的版本. 二.归纳安装步骤: 1.解压 2.运行源码目录中的./auto

MySQL基准测试工具sysbench安装

sysbench简介 该工具目前有三个版本0.4, 0.5和1.0, 版本间语法和参数上有些许差别. 本文为最新版本1.0.9, 其是基于LuaJIT的多线程基准测试工具, 常用于数据库基准测试; 另, 还可对操作系统关键子系统进行测试. 除內建测试, 还可编写Lua脚本, 实现特定业务的测试. sysbench下载 链接, https://github.com/akopytov/sysbench 安装依赖环境 1. yum -y install make automake libtool pk

Web性能测试工具:Siege安装&amp;使用简介

在Web性能测试工具中,siege是比较热门和常见的,它有安装简单,使用简单,测试报告详细的特点. 并且可以在文本中预定义一系列待测试url模拟,并可设定一定并发量下持续指定时间or测试进行测试. 比较适合确定真实环境下的系统性能基准. 1.下载安装包 略过 2.解压安装包 略过 3.编译 # 查看安装选项 ./configure --help # 设定安装选项 ./configure --prefix=/你的/安装/目录 # 编译 make # 安装 make install 4.参数详解 -

Web性能测试工具:http_load安装&amp;使用简介

除了siege,在Web性能测试工具中,http_load也是比较热门和常见的一款,有时因为种种原因,只能使用现成的工具,所以多了解和掌握一种Web性能测试工具是很有必要的. 1.下载安装包 略过 2.解压安装包 略过 3.安装 1 # 编译 2 make 3 # 安装 4 make install 4.参数详解 1 -verbose 输出运行的详细信息 2 -timeout 指定超时时间,单位为秒 3 -proxy 指定代理服务器,格式为 地址:端口 4 -parallel 指定并发的客户端数

mysql性能测试工具之sysbench

sysbench是一个模块化的.跨平台.多线程基准测试工具,主要用于评估测试各种不同系统参数 下的数据库负载情况,主要测试以下几种: (1).cpu性能 (2).磁盘io性能 (3).调度程序性能 (4).内存分配及传输速度 (5).POSIX线程性能 (6).数据库性能(OLTP基准测试) 1.下载和安装sysbench工具 [[email protected] home]# wget http://down1.chinaunix.net/distfiles/sysbench-0.4.10.t

MySQL 测试工具 sysbench

1.配置 epel 源安装 sysbench yum install -y sysbench 2.初始化数据 sysbench /usr/share/sysbench/tests/include/oltp_legacy/oltp.lua --mysql-host=192.168.1.226 --mysql-port=3306 --mysql-user=root --mysql-password=MySQL5.7 --oltp-test-mode=complex --oltp-tables-cou

性能测试工具 - Apache JMeter (安装)

简介 Apache JMeter 是100%纯java语言开发的负载测试和性能测试开源工具. 功能 Apache JMeter可以对静态/动态资源进行性能测试,模拟多个用户并行请求资源端,以测试其强度或分析不同负载情况下的整体性能. 使用 1.下载Apache JMeter 访问http://jmeter.apache.org,点击菜单Download,下载对应程序. 或者使用brew 命令下载 $ brew install jmeter 2.运行JMeter $ open /usr/local