一、MySQL自带的压力测试工具 Mysqlslap

mysqlslap是mysql自带的基准测试工具,该工具查询数据,语法简单,灵活容易使用.该工具可以模拟多个客户端同时并发的向服务器发出查询更新,给出了性能测试数据而且提供了多种引擎的性能比较。mysqlslap为mysql性能优化前后提供了直观的验证依据,系统运维和DBA人员应该掌握一些常见的压力测试工具,才能准确的掌握线上数据库支撑的用户流量上限及其抗压性等问题。

1、更改其默认的最大连接数

在对MySQL进行压力测试之前,需要更改其默认的最大连接数,如下:

[root@mysql~]#vim/etc/my.cnf................[mysqld]max_connections=1024[root@mysql~]#systemctlrestartmysqld`查看最大连接数`mysql>showvariableslike'max_connections';+-----------------+-------+|Variable_name|Value|+-----------------+-------+|max_connections|1024|+-----------------+--------+1rowinset(0.00sec)
[root@mysql~]#mysqlslap--defaults-file=/etc/my.cnf--concurrency=100,200--iterations=1--number-int-cols=20--number-char-cols=30--auto-generate-sql--auto-generate-sql-add-autoincrement--auto-generate-sql-load-type=mixed--engine=myisam,innodb--number-of-queries=2000-uroot-p123--verbose

测试结果说明:

  • Myisam第一次100客户端同时发起增查用0.557/s,第二次200客户端同时发起增查用0.522/s
  • Innodb第一次100客户端同时发起增查用0.256/s,第二次200客户端同时发起增查用0.303/s

可以根据实际需求,一点点的加大并发数量进行压力测试。

二、使用第三方sysbench工具进行压力测试

1、安装sysbench工具

[root@mysql~]#yum-yinstallepel-release#安装第三方epel源[root@mysql~]#yum-yinstallsysbench#安装sysbench工具[root@mysql~]#sysbench--version#确定工具已安装sysbench1.0.17
  • CPU 运算性能测试
  • 磁盘 IO 性能测试
  • 调度程序性能测试
  • 内存分配及传输速度测试
  • POSIX 线程性能测试

数据库性能测试(OLTP 基准测试,需要通过 /usr/share/sysbench/ 目录中的 Lua 脚本执行,例如 oltp_read_only.lua 脚本执行只读测试)。

sysbench 还可以通过运行命令时指定自己的 Lua 脚本来自定义测试。

2、查看sysbench工具的帮助选项

[root@mysql~]#sysbench--helpUsage:sysbench[options]...[testname][command]Commandsimplementedbymosttests:prepareruncleanuphelp#可用的命令,四个Generaloptions:#通用选项--threads=N要使用的线程数,默认1个[1]--events=N最大允许的事件个数[0]--time=N最大的总执行时间,以秒为单位[10]--forced-shutdown=STRING在--time时间限制到达后,强制关闭之前等待的秒数,默认“off”禁用(numberofsecondstowaitafterthe--timelimitbeforeforcingshutdown,or'off'todisable)[off]--thread-stack-size=SIZE每个线程的堆栈大小[64K]--rate=N 平均传输速率。0则无限制[0]--report-interval=N以秒为单位定期报告具有指定间隔的中间统计信息0禁用中间报告[0]--report-checkpoints=[LIST,...]转储完整的统计信息并在指定的时间点重置所有计数器。参数是一个逗号分隔的值列表,表示从测试开始经过这个时间量时必须执行报告检查点(以秒为单位)。报告检查点默认关闭。[]--debug[=on|off]打印更多debug信息[off]--validate[=on|off]尽可能执行验证检查[off]--help[=on|off]显示帮助信息并退出[off]--version[=on|off]显示版本信息并退出[off]--config-file=FILENAME包含命令行选项的文件--tx-rate=N废弃,改用--rate[0]--max-requests=N废弃,改用--events[0]--max-time=N废弃,改用--time[0]--num-threads=N废弃,改用--threads[1]Pseudo-RandomNumbersGeneratoroptions:#伪随机数发生器选项--rand-type=STRINGrandomnumbersdistribution{uniform,gaussian,special,pareto}[special]--rand-spec-iter=Nnumberofiterationsusedfornumbersgeneration[12]--rand-spec-pct=Npercentageofvaluestobetreatedas'special'(forspecialdistribution)[1]--rand-spec-res=Npercentageof'special'valuestouse(forspecialdistribution)[75]--rand-seed=Nseedforrandomnumbergenerator.When0,thecurrenttimeisusedasaRNGseed.[0]--rand-pareto-h=Nparameterhforparetodistribution[0.2]Logoptions:#日志选项--verbosity=Nverbositylevel{5-debug,0-onlycriticalmessages}[3]--percentile=Npercentiletocalculateinlatencystatistics(1-100).Usethespecialvalueof0todisablepercentilecalculations[95]--histogram[=on|off]printlatencyhistograminreport[off]Generaldatabaseoptions:#通用的数据库选项--db-driver=STRING指定要使用的数据库驱动程序('help'togetlistofavailabledrivers)--db-ps-mode=STRINGpreparedstatementsusagemode{auto,disable}[auto]--db-debug[=on|off]printdatabase-specificdebuginformation[off]Compiled-indatabasedrivers:#內建的数据库驱动程序,默认支持MySQL和PostgreSQLmysql-MySQLdriverpgsql-PostgreSQLdrivermysqloptions:#MySQL数据库专用选项--mysql-host=[LIST,...]MySQLserverhost[localhost]--mysql-port=[LIST,...]MySQLserverport[3306]--mysql-socket=[LIST,...]MySQLsocket--mysql-user=STRINGMySQLuser[sbtest]--mysql-password=STRINGMySQLpassword[]--mysql-db=STRINGMySQLdatabasename[sbtest]--mysql-ssl[=on|off]useSSLconnections,ifavailableintheclientlibrary[off]--mysql-ssl-cipher=STRINGusespecificcipherforSSLconnections[]--mysql-compression[=on|off]usecompression,ifavailableintheclientlibrary[off]--mysql-debug[=on|off]traceallclientlibrarycalls[off]--mysql-ignore-errors=[LIST,...]listoferrorstoignore,or"all"[1213,1020,1205]--mysql-dry-run[=on|off]Dryrun,pretendthatallMySQLclientAPIcallsaresuccessfulwithoutexecutingthem[off]pgsqloptions:#PostgreSQL数据库专用选项--pgsql-host=STRINGPostgreSQLserverhost[localhost]--pgsql-port=NPostgreSQLserverport[5432]--pgsql-user=STRINGPostgreSQLuser[sbtest]--pgsql-password=STRINGPostgreSQLpassword[]--pgsql-db=STRINGPostgreSQLdatabasename[sbtest]Compiled-intests:#內建测试类型fileio-FileI/Otestcpu-CPUperformancetestmemory-Memoryfunctionsspeedtestthreads-Threadssubsystemperformancetestmutex-MutexperformancetestSee'sysbench<testname>help'foralistofoptionsforeachtest.

1)准备测试数据

#查看sysbench自带的lua脚本使用方法[root@mysql~]#sysbench/usr/share/sysbench/oltp_common.luahelp#必须创建sbtest库,sbtest是sysbench默认使用的库名[root@mysql~]#mysqladmin-uroot-p123createsbtest;#然后,准备测试所用的表,这些测试表放在测试库sbtest中。这里使用的lua脚本为/usr/share/sysbench/oltp_common.lua。[root@mysql~]#sysbench--mysql-host=127.0.0.1--mysql-port=3306--mysql-user=root--mysql-password=123/usr/share/sysbench/oltp_common.lua--tables=10--table_size=100000prepare#其中--tables=10表示创建10个测试表,#--table_size=100000表示每个表中插入10W行数据,#prepare表示这是准备数的过程。
[root@mysql~]#mysql-uroot-p123sbtest;#登录到sbtest库mysql>showtables;#查看相应的表+------------------+|Tables_in_sbtest|+------------------+|sbtest1||sbtest10||sbtest2||sbtest3||sbtest4||sbtest5||sbtest6||sbtest7||sbtest8||sbtest9|+------------------+10rowsinset(0.00sec)

稍微修改下之前准备数据的语句,就可以拿来测试了。需要注意的是,之前使用的lua脚本为oltp_common.lua,它是一个通用脚本,是被其它lua脚本调用的,它不能直接拿来测试。

所以,我这里用oltp_read_write.lua脚本来做读、写测试。还有很多其它类型的测试,比如只读测试、只写测试、删除测试、大批量插入测试等等。可找到对应的lua脚本进行调用即可。

#执行测试命令如下:[root@mysql~]#sysbench--threads=4--time=20--report-interval=5--mysql-host=127.0.0.1--mysql-port=3306--mysql-user=root--mysql-password=123/usr/share/sysbench/oltp_read_write.lua--tables=10--table_size=100000run
[root@mysql~]#sysbench--threads=4--time=20--report-interval=5--mysql-host=127.0.0.1--mysql-port=3306--mysql-user=root--mysql-password=123/usr/share/sysbench/oltp_read_write.lua--tables=10--table_size=100000runsysbench1.0.17(usingsystemLuaJIT2.0.4)Runningthetestwithfollowingoptions:Numberofthreads:4Reportintermediateresultsevery5second(s)InitializingrandomnumbergeneratorfromcurrenttimeInitializingworkerthreads...Threadsstarted!#以下是每5秒返回一次的结果,统计的指标包括:#线程数、tps(每秒事务数)、qps(每秒查询数)、#每秒的读/写/其它次数、延迟、每秒错误数、每秒重连次数[5s]thds:4tps:1040.21qps:20815.65(r/w/o:14573.17/4161.25/2081.22)lat(ms,95%):7.17err/s:0.00reconn/s:0.00[10s]thds:4tps:1083.34qps:21667.15(r/w/o:15165.93/4334.55/2166.68)lat(ms,95%):6.55err/s:0.00reconn/s:0.00[15s]thds:4tps:1121.57qps:22429.09(r/w/o:15700.64/4485.30/2243.15)lat(ms,95%):6.55err/s:0.00reconn/s:0.00[20s]thds:4tps:1141.69qps:22831.98(r/w/o:15982.65/4566.16/2283.18)lat(ms,95%):6.09err/s:0.00reconn/s:0.00SQLstatistics:queriesperformed:read:307146#执行的读操作数量write:87756#执行的写操作数量other:43878#执行的其它操作数量total:438780transactions:21939(1096.57persec.)#执行事务的平均速率queries:438780(21931.37persec.)#平均每秒能执行多少次查询ignorederrors:0(0.00persec.)reconnects:0(0.00persec.)Generalstatistics:totaltime:20.0055s#总消耗时间totalnumberofevents:21939#总请求数量(读、写、其它)Latency(ms):min:1.39avg:3.64max:192.0595thpercentile:6.67#采样计算的平均延迟sum:79964.26Threadsfairness:events(avg/stddev):5484.7500/15.12executiontime(avg/stddev):19.9911/0.00

sysbench内置的几个测试指标如下:

[root@mysql~]#sysbench--help..........#省略部分内容Compiled-intests:fileio-FileI/Otestcpu-CPUperformancetestmemory-Memoryfunctionsspeedtestthreads-Threadssubsystemperformancetestmutex-Mutexperformancetest
[root@mysql~]#sysbenchfileiohelpsysbench1.0.17(usingsystemLuaJIT2.0.4)fileiooptions:--file-num=Nnumberoffilestocreate[128]--file-block-size=NblocksizetouseinallIOoperations[16384]--file-total-size=SIZEtotalsizeoffilestocreate[2G]--file-test-mode=STRINGtestmode{seqwr,seqrewr,seqrd,rndrd,rndwr,rndrw}--file-io-mode=STRINGfileoperationsmode{sync,async,mmap}[sync]--file-async-backlog=Nnumberofasynchronousoperatonstoqueueperthread[128]--file-extra-flags=[LIST,...]listofadditionalflagstousetoopenfiles{sync,dsync,direct}[]--file-fsync-freq=Ndofsync()afterthisnumberofrequests(0-don'tusefsync())[100]--file-fsync-all[=on|off]dofsync()aftereachwriteoperation[off]--file-fsync-end[=on|off]dofsync()attheendoftest[on]--file-fsync-mode=STRINGwhichmethodtouseforsynchronization{fsync,fdatasync}[fsync]--file-merged-requests=NmergeatmostthisnumberofIOrequestsifpossible(0-don'tmerge)[0]--file-rw-ratio=Nreads/writesratioforcombinedtest[1.5]

例如,创建5个文件,总共2G,每个文件大概400M。

[root@mysql~]#sysbenchfileio--file-num=5--file-total-size=2Gprepare[root@mysql~]#ll-lhtest*-rw-------1rootroot410MMay2616:05test_file.0-rw-------1rootroot410MMay2616:05test_file.1-rw-------1rootroot410MMay2616:05test_file.2-rw-------1rootroot410MMay2616:05test_file.3-rw-------1rootroot410MMay2616:05test_file.4
[root@mysql~]#sysbench--events=5000--threads=16fileio--file-num=5--file-total-size=2G--file-test-mode=rndrw--file-fsync-freq=0--file-block-size=16384run
Runningthetestwithfollowingoptions:Numberofthreads:16InitializingrandomnumbergeneratorfromcurrenttimeExtrafileopenflags:(none)5files,409.6MiBeach2GiBtotalfilesizeBlocksize16KiBNumberofIOrequests:5000Read/WriteratioforcombinedrandomIOtest:1.50Callingfsync()attheendoftest,Enabled.UsingsynchronousI/OmodeDoingrandomr/wtestInitializingworkerthreads...Threadsstarted!Fileoperations:reads/s:9899.03writes/s:6621.38fsyncs/s:264.33Throughput:#吞吐量read,MiB/s:154.66#表示读带宽written,MiB/s:103.46#表示写的带宽Generalstatistics:totaltime:0.3014stotalnumberofevents:5000Latency(ms):min:0.00avg:0.81max:53.5695thpercentile:4.10sum:4030.48Threadsfairness:events(avg/stddev):312.5000/27.64executiontime(avg/stddev):0.2519/0.02
[root@mysql~]#sysbenchcpu--threads=40--events=10000--cpu-max-prime=20000run

更多相关文章

  1. Android(安卓)自动化测试工具Robotium 之Solo类的详细说明
  2. Android自动化测试工具——Monkey
  3. Android自动化测试工具——Monkey .
  4. Android自动化测试工具——Monkey
  5. android测试工具小总结
  6. Android自动化测试工具——Monkey
  7. Android(安卓)中支持的几种传感器(加速度、陀螺仪、亮度、地磁、
  8. 2014非常好用的开源Android测试工具
  9. android测试工具大全

随机推荐

  1. 详解Android实现XML解析技术(图)
  2. XML中处理指令的代码详解
  3. 详细介绍XML Web Service图文代码实例
  4. 详细介绍XML代码编写的编码与验证问题
  5. XSLT语法—在.net中使用XSLT转换xml文档
  6. XML中的DTD文档类型定义详细介绍
  7. XmlSerializer 对象的Xml序列化和反序列
  8. XML编程中的模式定义XSD示例代码详解
  9. XML中的树形结构与DOM文档对象模型的示例
  10. XPath语法: 在C#中使用XPath示例的具体代