MySQL性能测试工具sysbench
sysbench是一款开源的多线程性能测试工具,可以执行CPU/内存/线程/IO/数据库等方面的性能测试。数据库目前支持MySQL/Oracle/PostgreSQL。本文只是简单演示一下几种测试的用法,后续准备利用sysbench来对MySQL进行一系列的测试。具体的一些参数设置,需要根据不同的测试要求来进行调整。
下载
编译安装
默认支持MySQL,如果需要测试Oracle/PostgreSQL,则在configure时需要加上–with-oracle或者–with-pgsql参数
| 1 2 3 4 5 | ./configure --prefix=/u01/sysbench \ --with-mysql-includes=/opt/mysql/include/mysql \ --with-mysql-libs=/opt/mysql/lib/mysql make && make install | 
参数
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | NinGoo:/u01/sysbench/bin>$sysbench Missing required command argument. Usage:   sysbench [general-options]... --test= [test-options]... command General options:   --num-threads=N            number of threads to use [1]   --max-requests=N           limit for total number of requests [10000]   --max-time=N               limit for total execution time in seconds [0]   --forced-shutdown=STRING   amount of time to wait after --max-time before forcing shutdown [off]   --thread-stack-size=SIZE   size of stack per thread [32K]   --init-rng=[on|off]        initialize random number generator [off]   --test=STRING              test to run   --debug=[on|off]           print more debugging info [off]   --validate=[on|off]        perform validation checks where possible [off]   --help=[on|off]            print help and exit   --version=[on|off]         print version and exit Compiled-in tests:   fileio - File I/O test   cpu - CPU performance test   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= help' for a list of options for each test. | 
CPU测试
sysbench采用寻找最大素数的方式来测试CPU的性能
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | NinGoo:/u01/sysbench/bin>$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:                          2.3996s     total number of events:              10000     total time taken by event execution: 2.3917     per-request statistics:          min:                                  0.23ms          avg:                                  0.24ms          max:                                 27.44ms          approx.  95 percentile:               0.24ms Threads fairness:     events (avg/stddev):           10000.0000/0.00     execution time (avg/stddev):   2.3917/0.00 | 
线程测试
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | NinGoo:/u01/sysbench/bin>$sysbench --test=threads --num-threads=64 --thread-yields=100 \ --thread-locks=2 run sysbench 0.4.12:  multi-threaded system evaluation benchmark Running the test with following options: Number of threads: 64 Doing thread subsystem performance test Thread yields per test: 100 Locks used: 2 Threads started! Done. Test execution summary:     total time:                          4.3925s     total number of events:              10000     total time taken by event execution: 280.4418     per-request statistics:          min:                                  0.04ms          avg:                                 28.04ms          max:                                 72.81ms          approx.  95 percentile:              52.29ms Threads fairness:     events (avg/stddev):           156.2500/1.43     execution time (avg/stddev):   4.3819/0.01 | 
文件IO性能测试
首先生成需要的测试文件,文件总大小300M,16个并发线程,随机读写模式。执行完后会在当前目录下生成一堆小文件。
| 1 2 3 4 5 6 | NinGoo:/u01/sysbench/bin>$sysbench --test=fileio --num-threads=16  \ --file-total-size=300M --file-test-mode=rndrw prepare sysbench 0.4.12:  multi-threaded system evaluation benchmark 128 files, 2400Kb each, 300Mb total Creating files for the test... | 
执行测试
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | NinGoo:/u01/sysbench/bin>$sysbench --test=fileio --num-threads=16  \ --file-total-size=300M --file-test-mode=rndrw run sysbench 0.4.12:  multi-threaded system evaluation benchmark Running the test with following options: Number of threads: 16 Extra file open flags: 0 128 files, 2.3438Mb each 300Mb 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:  5996 Read, 4004 Write, 12800 Other = 22800 Total Read 93.688Mb  Written 62.562Mb  Total transferred 156.25Mb  (26.713Mb/sec)  1709.66 Requests/sec executed Test execution summary:     total time:                          5.8491s     total number of events:              10000     total time taken by event execution: 12.5045     per-request statistics:          min:                                  0.01ms          avg:                                  1.25ms          max:                                373.28ms          approx.  95 percentile:               0.03ms Threads fairness:     events (avg/stddev):           625.0000/109.60     execution time (avg/stddev):   0.7815/0.29 | 
清理现场
| 1 2 3 4 5 | NinGoo:/u01/sysbench/bin>$sysbench --test=fileio --num-threads=16  \ --file-total-size=300M --file-test-mode=rndrw cleanup sysbench 0.4.12:  multi-threaded system evaluation benchmark Removing test files... | 
Mutex测试
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | NinGoo:/u01/sysbench/bin>$sysbench --test=mutex --num-threads=16 \ --mutex-num=1024 --mutex-locks=10000 --mutex-loops=5000 run sysbench 0.4.12:  multi-threaded system evaluation benchmark Running the test with following options: Number of threads: 16 Doing mutex performance test Threads started! Done. Test execution summary:     total time:                          1.1561s     total number of events:              16     total time taken by event execution: 18.3831     per-request statistics:          min:                               1084.60ms          avg:                               1148.94ms          max:                               1153.52ms          approx.  95 percentile:         10000000.00ms Threads fairness:     events (avg/stddev):           1.0000/0.00     execution time (avg/stddev):   1.1489/0.02 | 
内存测试
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | NinGoo:/u01/sysbench/bin>$sysbench --test=memory --num-threads=16 \ --memory-block-size=8192 --memory-total-size=1G run sysbench 0.4.12:  multi-threaded system evaluation benchmark Running the test with following options: Number of threads: 16 Doing memory operations speed test Memory block size: 8K Memory transfer size: 1024M Memory operations type: write Memory scope type: global Threads started! WARNING: Operation time (0.000000) is less than minimal counted value, counting as 1.000000 WARNING: Percentile statistics will be inaccurate Done. Operations performed: 131072 (114162.68 ops/sec) 1024.00 MB transferred (891.90 MB/sec) Test execution summary:     total time:                          1.1481s     total number of events:              131072     total time taken by event execution: 16.0448     per-request statistics:          min:                                  0.00ms          avg:                                  0.12ms          max:                                  3.60ms          approx.  95 percentile:               0.01ms Threads fairness:     events (avg/stddev):           8192.0000/192.89     execution time (avg/stddev):   1.0028/0.00 | 
MySQL数据库测试
首先需要创建默认的sbtest数据库,或者使用–mysql-db指定一个已经存在的数据库
生成测试数据,引擎为myisam,表大小为1000000条记录
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | NinGoo:/u01/sysbench/bin>$sysbench --test=oltp --mysql-table-engine=myisam --oltp-table-size=1000000 \ --mysql-user=root --mysql-socket=/opt/mysql/run/mysql.sock 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@sbtest 11:42:18>desc sbtest.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   |     |         |                | +-------+------------------+------+-----+---------+----------------+ | 
执行测试
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | NinGoo:/u01/sysbench/bin>$sysbench --test=oltp --mysql-table-engine=myisam --oltp-table-size=1000000 \ --mysql-user=root --mysql-socket=/opt/mysql/run/mysql.sock 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: 1 Doing OLTP test. Running mixed OLTP test Using Special distribution (12 iterations,  1 pct of values are returned in 75 pct cases) Using "LOCK TABLES WRITE" 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  (336.64 per sec.)     deadlocks:                           0      (0.00 per sec.)     read/write requests:                 190000 (6396.11 per sec.)     other operations:                    20000  (673.27 per sec.) Test execution summary:     total time:                          29.7056s     total number of events:              10000     total time taken by event execution: 29.6301     per-request statistics:          min:                                  2.27ms          avg:                                  2.96ms          max:                                 43.88ms          approx.  95 percentile:               3.36ms Threads fairness:     events (avg/stddev):           10000.0000/0.00     execution time (avg/stddev):   29.6301/0.00 | 
清理现场
| 1 2 3 4 5 6 7 | NinGoo:/u01/sysbench/bin>$sysbench --test=oltp --mysql-table-engine=myisam --oltp-table-size=1000000 \ --mysql-user=root --mysql-socket=/opt/mysql/run/mysql.sock cleanup sysbench 0.4.12:  multi-threaded system evaluation benchmark No DB drivers specified, using mysql Dropping table 'sbtest'... Done. |