加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MySQL如何使用sysbench做OLTP基准测试

发布时间:2021-12-24 20:19:15 所属栏目:MySql教程 来源:互联网
导读:这篇文章给大家分享的是有关MySQL如何使用sysbench做OLTP基准测试的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 一、 安装 ① 下载源码包:https://dev.mysql.com/downloads/benchmarks.html ② 安装依赖 yum -y install au
这篇文章给大家分享的是有关MySQL如何使用sysbench做OLTP基准测试的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
 
一、 安装
① 下载源码包:https://dev.mysql.com/downloads/benchmarks.html
② 安装依赖 yum -y install automake autoconf libtool
③tar xzvf sysbench-0.4.12.10.tar.gz; cd sysbench-0.4.12.10/
④./autogen.sh; ./configure
⑤ make && make install
然后我们可以在sysbench 目录看到可以执行文件sysbench了
 
二、命令
首先看下命令基本用法
 
 
root@10.30.5.2:sysbench# ./sysbench --help
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]
--seed-rng=N                seed for random number generator, ignored when 0 [0]
--tx-rate=N                 target transaction rate (tps) [0]
--tx-jitter=N               target transaction variation, in microseconds [0]
--report-interval=N         periodically report intermediate statistics with a specified interval in seconds. 0 disables intermediate reports [0]
--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. []
--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
Log options:
--verbosity=N      verbosity level {5 - debug, 0 - only critical messages} [4]
--percentile=N      percentile rank of query response times to count [95]
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.
以上可以看到 sysbench可以测试的有 CPU 、磁盘IO、内存、线程、MUTEX 以及OLTP ,
常用参数:
--num-threads=N     并发线程数
--max-requests=N    限制压测请求总数
--max-time=N        限制压测时间
 
这里看下OLTP测试方法
 
 
./sysbench --test=oltp help
sysbench 0.4.12.10:  multi-threaded system evaluation benchmark
oltp options:
--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-avoid-deadlocks=[on|off]          generate update keys in increasing order to avoid deadlocks [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-use-in-statement=N                Use IN-statement with 10 PK lookups per query [0]
--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]
--oltp-point-select-mysql-handler=[on|off]Use MySQL HANDLER for point select [off]
--oltp-point-select-all-cols=[on|off]    select all columns for the point-select query [off]
--oltp-secondary=[on|off]                Use a secondary index in place of the PRIMARY index [off]
--oltp-num-partitions=N                  Number of partitions used for test table [0]
--oltp-num-tables=N                      Number of test tables [1]
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 []
说明 :
常用参数
① 基本参数
--db-driver=mysql     对mysql进行 OLTP 基准测试
--mysql-host 、--mysql-port、--mysql-socket、--mysql-user、--mysql-password 这些是基本的参数我就不解释了
--mysql-db=xxx  压测的database,这里得指定一下
② oltp常用参数
--oltp-test-mode=complex/simple/nontrx  测试模式
--oltp-num-tables=10 oltp测试的表数量 0.4.10版本最大表数量16
--oltp-table-size=xxx  测试表的记录数
 
三、测试
① 测试准备:
 
 
root@10.30.5.2:sysbench#./sysbench --num-threads=64 --max-requests=200000 --test=oltp --db-driver=mysql --mysql-user=root --mysql-host=10.30.22.2 --mysql-password=x --oltp-test-mode=complex --mysql-db=tab --oltp-table-size=5000000 --oltp-num-tables=16 prepare
sysbench 0.4.12.10:  multi-threaded system evaluation benchmark
Creating table 'sbtest14'...
Creating table 'sbtest7'...
Creating table 'sbtest'...
Creating table 'sbtest11'...
Creating table 'sbtest8'...
Creating table 'sbtest6'...
Creating table 'sbtest9'...
Creating table 'sbtest12'...
Creating table 'sbtest3'...
Creating table 'sbtest15'...
Creating table 'sbtest2'...
Creating table 'sbtest4'...
Creating table 'sbtest1'...
Creating table 'sbtest5'...
Creating table 'sbtest13'...
Creating table 'sbtest10'...
Creating 5000000 records in table 'sbtest11'...
Creating 5000000 records in table 'sbtest1'...
Creating 5000000 records in table 'sbtest14'...
Creating 5000000 records in table 'sbtest'...
Creating 5000000 records in table 'sbtest6'...
Creating 5000000 records in table 'sbtest2'...
Creating 5000000 records in table 'sbtest13'...
Creating 5000000 records in table 'sbtest15'...
Creating 5000000 records in table 'sbtest12'...
Creating 5000000 records in table 'sbtest4'...
Creating 5000000 records in table 'sbtest3'...
Creating 5000000 records in table 'sbtest9'...
Creating 5000000 records in table 'sbtest8'...
Creating 5000000 records in table 'sbtest10'...
Creating 5000000 records in table 'sbtest5'...
Creating 5000000 records in table 'sbtest7'...
② 测试结果
 
 
点击(此处)折叠或打开
 
root@10.30.5.2:sysbench# ./sysbench --num-threads=64 --max-requests=200000 --test=oltp --db-driver=mysql --mysql-user=root --mysql-host=10.30.22.xxx --mysql-password=xxx --oltp-test-mode=complex --mysql-db=tab --oltp-table-size=5000000 --oltp-num-tables=16 run
sysbench 0.4.12.10:  multi-threaded system evaluation benchmark
Running the test with following options:
Number of threads: 64
Random number generator seed is 0 and will be ignored
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 200000
Using 16 test tables
Threads started!
Done.
OLTP test statistics:
queries performed:
read:                            2800224
write:                           1000080
other:                           400032
total:                           4200336
transactions:                        200016 (2000.64 per sec.)
deadlocks:                           0      (0.00 per sec.)
read/write requests:                 3800304 (38012.16 per sec.)
other operations:                    400032 (4001.28 per sec.)
General statistics:
total time:                          99.9760s
total number of events:              200016
total time taken by event execution: 6394.8091
response time:
min:                                 11.00ms
avg:                                 31.97ms
max:                                293.00ms
approx.  95 percentile:              52.10ms
Threads fairness:
events (avg/stddev):           3125.2500/50.55
execution time (avg/stddev):   99.9189/0.01
③ 测试清除
 
 
点击(此处)折叠或打开
 
root@10.30.5.2:sysbench# ./sysbench --num-threads=64 --max-requests=200000 --test=oltp --db-driver=mysql --mysql-user=root --mysql-host=10.30.22.xxx --mysql-password=xxx --oltp-test-mode=complex --mysql-db=tab --oltp-table-size=5000000 --oltp-num-tables=16 cleanup
sysbench 0.4.12.10:  multi-threaded system evaluation benchmark
Dropping table 'sbtest'...
Dropping table 'sbtest1'...
Dropping table 'sbtest2'...
Dropping table 'sbtest3'...
Dropping table 'sbtest4'...
Dropping table 'sbtest5'...
Dropping table 'sbtest6'...
Dropping table 'sbtest7'...
Dropping table 'sbtest8'...
Dropping table 'sbtest9'...
Dropping table 'sbtest10'...
Dropping table 'sbtest11'...
Dropping table 'sbtest12'...
Dropping table 'sbtest13'...
Dropping table 'sbtest14'...
Dropping table 'sbtest15'...
Done.
 
总结:
1> PREPARE阶段
   在 PREPARE 阶段我们就需要想好,此时mysql 的配置,如 innodb_flush_log_at_trx_commit 、 sync_binlog 以及BP 的大小等。
   然后结合 BP 的大小我们需要创建表的记录数,表的个数,并发线程等,综合考虑
   ① 若数据量 < BP 所有数据都会缓存到内存,此时增加 并发线程数 来测整个此时的CPU核数是否能抗住测试压力
   ② 若数据量 >> BP 则主要测试整个系统的稳定性,我们可以结合监控看缓存命中率( orzdba ),以及对应的 磁盘IO( iostat / orzdba ) 等,来获取整个数据库系统的薄弱点
 
2> RUN 阶段
    在 RUN 阶段的同时 ,我们可以通过 orzdba/iostat 等工具查看当前的数据库状态
    ① 上面的测试结果我们可以看到,    
     transactions: 200016 (2000.64 per sec.) TPS 大概为 2000
     read/write requests: 3800304 (38012.16 per sec.) QPS 达到 38000
     approx. 95 percentile: 52.10ms  95%的请求相应时间在52.10ms左右
    可以说性能是相当不错了(这里我测试的是腾讯云 CDB , 配置为 1000MB 的BP )
    ② 通过orzdba 结合running过程查看数据库状态
 
点击(此处)折叠或打开
 
root@10.30.5.2:orzdba_home# ./orzdba -mysql -innodb -rt
.=================================================.
|       Welcome to use the orzdba tool !          |
|          Yep...Chinese English~                 |
'=============== Date : 2017-04-18 ==============='
HOST: 10.30.22.2   IP: 10.30.5.2
DB  : performance_schema|tab
Var : binlog_format[MIXED] max_binlog_cache_size[17179869184G] max_binlog_size[1G]
max_connect_errors[999999999] max_connections[800] max_user_connections[0]
open_files_limit[102400] sync_binlog[0] table_definition_cache[768]
table_open_cache[512] thread_cache_size[512]
innodb_adaptive_flushing[ON] innodb_adaptive_hash_index[ON] innodb_buffer_pool_size[893M]
innodb_file_per_table[ON] innodb_flush_log_at_trx_commit[2] innodb_flush_method[O_DIRECT]
innodb_io_capacity[20000] innodb_lock_wait_timeout[7200] innodb_log_buffer_size[64M]
innodb_log_file_size[500M] innodb_log_files_in_group[2] innodb_max_dirty_pages_pct[75]
innodb_open_files[1024] innodb_read_io_threads[4] innodb_thread_concurrency[0]
innodb_write_io_threads[4]
--------                     -QPS- -TPS-         -Hit%- ---innodb bp pages status-- -----innodb data status---- --innodb log--   his --log(byte)--  read ---query--- ------threads------ -----bytes---- --------tcprstat(us)--------
time  |  ins   upd   del    sel   iud|     lor    hit|   data   free  dirty flush| reads writes  read written|fsyncs written| list uflush  uckpt  view inside  que| run  con  cre  cac|   recv   send|  count    avg 95-avg 99-avg|
17:24:53|    0     0     0      0     0|       0 100.00|      0      0      0     0|     0      0      0      0|     0       0|    0      0      0     0     0     0|   0    0    0    0|      0      0|      0      0      0      0|
17:24:54| 2153  6454  2153  30115 10760|  478891  97.72|  55869      0  19432  2372| 11355   6686 177.4m  79.2m|     2    5.1m|  137   1.7m  180.6m   57     0     0|  20   68    0    1|   1.1m  10.7m|  23711    267    183    236|
17:24:55| 1960  5891  1962  27470  9813|  437599  97.71|  55872      0  19793  2132| 10416   6063 162.8m  71.4m|     1    4.8m|  142   2.4m  183.5m   62     0     0|  14   68    0    1|  1005k   9.7m|  23004    356    215    283|
17:24:56| 2027  6091  2033  28422 10151|  451846  97.74|  55870      0  20024  2249| 10609   6320 165.8m  75.2m|     3    4.9m|  133   927k  186.5m   59     0     0|   8   68    0    1|   1.0m  10.2m|  22684    299    186    244|
17:24:57| 2291  6865  2286  32067 11442|  511514  97.69|  55870      0  20248  2611| 12314   7194 192.4m  87.0m|     2    5.4m|  128    19k  189.6m   54     0     0|   4   68    0    1|   1.1m  11.5m|  25197    267    188    234|
17:24:58| 2210  6632  2207  30947 11049|  493747  97.77|  55865      0  20361  2371| 11478   6810 179.3m  79.5m|     2    5.4m|  130   267k  192.9m   64     0     0|  48   68    0    1|   1.1m  11.3m|  24586    270    182    232|
17:24:59| 2225  6680  2226  31102 11131|  496716  97.70|  55866      0  20305  2602| 11891   7059 185.8m  86.6m|     1    5.3m|  149   473k  196.0m   53     0     0|  11   68    0    1|   1.1m  11.3m|  20655    371    219    304|
17:25:00| 2126  6377  2130  29819 10633|  472984  97.70|  55868      0  20195  2489| 11332   6749 177.1m  82.8m|     2    5.0m|  125   370k  199.0m   62     0     0|  13   68    0    1|   1.1m  10.8m|   8707    958    664    856|
17:25:01| 2169  6507  2165  30307 10841|  484346  97.71|  55766     99  20214  2485| 11550   6849 180.5m  82.7m|     1    5.1m|  133   808k  202.0m   57     0     0|  15   68    0    1|   1.1m  11.2m|   8578    996    636    844|
    可以发现 在 32个 thread并发进行complex操作的时候,每秒的insert量 update量 delete量 select量可以看得非常清楚,还有innodb_log 的fsync量,以及数据库的response time。

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读