MYSQL压力测试工具sysbench安装测试详解

小潘seo 重庆小潘seo博客和你一起学习SEO知识,共同分享SEO优化~

sysbench是一款开源的多线程性能测试工具,可以执行CPU/内存/线程/IO/数据库等方面的性能测试,数据库目前支持MySQL/Oracle/PostgreSQL,下面我们来看看它的安装与测试.

如果评测一台mysql数据库的压力,可以使用sysbench来测试,具体的操作出下,先安装sysbench工具,安装操作如下.

安装环境

CentOS release 5.4 (Final),MySQL 5.1.40 MySQL_HOME=/usr/local/mysql/,Sysbench 0.4.12

安装步骤

1.去http://sourceforge.net/projects/sysbench/下载最新版本的sysbench 0.4.12

2.解压缩sysbench-0.4.12.tar.gz

tar --zxvf sysbench-0.4.12.tar.gz

3.进入解压缩包 sysbench-0.4.12,并执行脚本autogen.sh

cd sysbench-0.4.12

./autogen.sh

4.关键的三部曲:configure&make&make install

首先是./configure命令,sysbench默认是支持MySQL的benchmarking的,如果不加任何选项则要求保证MySQL的安装路径都是默认的标准路径,headfile位于/usr/include目录下,libraries位于/usr/lib/目录下,因为我的MySQL是源码编译安装的,安装路径是放在/usr/local/mysql下,所以这里要添加相应的选项命令:

  1. ./configure--prefix=/usr/local/mysql--with-mysql=/usr/local/mysql--with-mysql-includes=/usr/local/mysql/include/mysql/--with-mysql-libs=/usr/local/mysql/lib/mysql/

注意:经反复测试这里在编译时要将路径写到最后的include/mysql,lib/mysql

--with-mysql-includes=/usr/local/mysql/include/mysql/

--with-mysql-libs=/usr/local/mysql/lib/mysql/

因为网上好多资料都没有提到这一层,在编译时总是编译不过去,这里浪费了好多精力.

make

make install

安装就可以了,下面再来看测试.

sysbench数据库的测试案例:

第一步:准备数据库,准备在mysql数据库创建1000000数据量,存储引擎是innodb.

  1. bin/sysbench--test=oltp\--测试类型数据库oltp
  2. --mysql-host=127.0.0.1\--mysql主机
  3. --mysql-port=3421\--mysql端口
  4. --mysql-user=root\--mysql登陆用户
  5. --mysql-password=$password\--mysql密码
  6. --mysql-db=test\--mysql测试数据库名
  7. --mysql-socket=/var/mysql.sock\--socket位置
  8. --oltp-table-name=test\--mysql测试表名
  9. --mysql-table-engine=innodb\--mysql表使用存储引擎
  10. --oltp-table-size=1000000prepare--表数据量

第二步:开始测试.

  1. bin/sysbench--test=oltp\
  2. --mysql-host=127.0.0.1\--mysql主机
  3. --mysql-port=3421\--mysql端口
  4. --mysql-user=root\--mysql登陆用户
  5. --mysql-password=$password\--mysql密码
  6. --mysql-db=test\--mysql测试数据库名
  7. --mysql-socket=/var/mysql.sock\--socket位置
  8. --oltp-table-name=test\--mysql测试表名
  9. --mysql-table-engine=innodb\--mysql表使用存储引擎
  10. --max-requests=100000\--测试请求次数
  11. --max-time=600\--测试最长时间
  12. --num-threads=100run--并发线程数
  13. //测试结果:
  14. sysbench0.4.12:multi-threadedsystemevaluationbenchmark
  15. NoDBdriversspecified,usingmysql
  16. Runningthetestwithfollowingoptions:
  17. Numberofthreads:100
  18. DoingOLTPtest.
  19. RunningmixedOLTPtest
  20. UsingSpecialdistribution(12iterations,1pctofvaluesarereturnedin75pctcases)
  21. Using"BEGIN"forstartingtransactions
  22. Usingauto_incontheidcolumn
  23. MaximumnumberofrequestsforOLTPtestislimitedto100000
  24. Threadsstarted!
  25. Done.
  26. OLTPteststatistics:
  27. queriesperformed:
  28. read:1401582
  29. write:500563
  30. other:200225
  31. total:2102370
  32. transactions:100112(3446.37persec.)
  33. deadlocks:1(0.03persec.)
  34. read/writerequests:1902145(65481.66persec.)
  35. otheroperations:200225(6892.78persec.)
  36. Testexecutionsummary:
  37. totaltime:29.0485s
  38. totalnumberofevents:100112
  39. totaltimetakenbyeventexecution:2898.7554
  40. per-requeststatistics:
  41. min:3.52ms
  42. avg:28.96ms
  43. max:187.11ms
  44. approx.95percentile:46.05ms
  45. Threadsfairness:
  46. events(avg/stddev):1001.1200/10.80
  47. executiontime(avg/stddev):28.9876/0.03

第三步:清理测试数据.

  1. bin/sysbench--test=oltp\
  2. --mysql-host=127.0.0.1\--mysql主机
  3. --mysql-port=3421\--mysql端口
  4. --mysql-user=root\--mysql登陆用户
  5. --mysql-password=$password\--mysql密码
  6. --mysql-db=test\--mysql测试数据库名
  7. --mysql-socket=/var/mysql.sock\--socket位置
  8. --oltp-table-name=test\--mysql测试表名
  9. --mysql-table-engine=innodb\--mysql表使用存储引擎
  10. cleanup

在版本0.5中支持自定义语句,可以参考下面的链接.

http://dba.stackexchange.com/questions/39221/stress-test-mysql-with-queries-captured-with-general-log-in-mysql

3.测试案例,表属性compress对insert速度的影响.

第一步准备:创建表结构:

  1. bin/sysbench--test=oltp\--测试类型数据库oltp
  2. --mysql-host=127.0.0.1\--mysql主机
  3. --mysql-port=3421\--mysql端口
  4. --mysql-user=root\--mysql登陆用户
  5. --mysql-password=$password\--mysql密码
  6. --mysql-db=test\--mysql测试数据库名
  7. --mysql-socket=/var/mysql.sock\--socket位置
  8. --oltp-table-name=sbtest\--mysql测试表名
  9. --mysql-table-engine=innodb\--mysql表使用存储引擎
  10. --oltp-table-size=1prepare--表数据量

将表名修改为uncompressed

rename table sbtest to uncompressed;

再次创建表sbtest,并将表名修改为compressed

rename table sbtest to compressed;

将表改为compressed

alter table compressed ROW_FORMAT=compressed;

第二步:向表uncompressed表中添加记录

  1. bin/sysbench--test=oltp\
  2. --mysql-host=127.0.0.1\--mysql主机
  3. --mysql-port=3421\--mysql端口
  4. --mysql-user=root\--mysql登陆用户
  5. --mysql-password=$password\--mysql密码
  6. --mysql-db=test\--mysql测试数据库名
  7. --mysql-socket=/var/mysql.sock\--socket位置
  8. --oltp-table-name=uncompressed\--mysql测试表名
  9. --mysql-table-engine=innodb\--mysql表使用存储引擎
  10. --oltp-nontrx-mode=insert\
  11. --oltp-test-mode=nontrx\
  12. --max-requests=1000000\
  13. --max-time=600\
  14. --num-threads=100run
  15. --测试结果:
  16. OLTPteststatistics:
  17. queriesperformed:
  18. read:0
  19. write:1001110
  20. other:0
  21. total:1001110
  22. transactions:1001110(13617.75persec.)
  23. deadlocks:0(0.00persec.)
  24. read/writerequests:1001110(13617.75persec.)
  25. otheroperations:0(0.00persec.)
  26. Testexecutionsummary:
  27. totaltime:73.5151s
  28. totalnumberofevents:1001110
  29. totaltimetakenbyeventexecution:7346.0036
  30. per-requeststatistics:
  31. min:0.10ms
  32. avg:7.34ms
  33. max:239.05ms
  34. approx.95percentile:22.00ms
  35. Threadsfairness:
  36. events(avg/stddev):10011.1000/86.80
  37. executiontime(avg/stddev):73.4600/0.00

说明:总共消耗了73s,每秒达到13617个事务.

第三步:向表compressed表中添加记录:

  1. bin/sysbench--test=oltp\
  2. --mysql-host=127.0.0.1\--mysql主机
  3. --mysql-port=3421\--mysql端口
  4. --mysql-user=root\--mysql登陆用户
  5. --mysql-password=$password\--mysql密码
  6. --mysql-db=test\--mysql测试数据库名
  7. --mysql-socket=/var/mysql.sock\--socket位置
  8. --oltp-table-name=compressed\--mysql测试表名
  9. --mysql-table-engine=innodb\--mysql表使用存储引擎
  10. --oltp-nontrx-mode=insert\
  11. --oltp-test-mode=nontrx\
  12. --max-requests=1000000\
  13. --max-time=600\
  14. --num-threads=100run
  15. --测试结果:
  16. OLTPteststatistics:
  17. queriesperformed:
  18. read:0
  19. write:1000515
  20. other:0
  21. total:1000515
  22. transactions:1000515(2313.85persec.)
  23. deadlocks:0(0.00persec.)
  24. read/writerequests:1000515(2313.85persec.)
  25. otheroperations:0(0.00persec.)
  26. Testexecutionsummary:
  27. totaltime:432.4036s
  28. totalnumberofevents:1000515
  29. totaltimetakenbyeventexecution:43229.6698
  30. per-requeststatistics:
  31. min:0.10ms
  32. avg:43.21ms
  33. max:730.32ms
  34. approx.95percentile:133.46ms
  35. Threadsfairness:
  36. events(avg/stddev):10005.1500/109.30
  37. executiontime(avg/stddev):432.2967/0.01

说明:总共消耗了432s,每秒处理2313事务数,和uncompressed的速度相差6倍.

4.测试案例,表属性compress对复合操作速度的影响.

第一步:准备数据,和第3项一样准备.

第二步:针对compressed表进行复合操作测试.

  1. bin/sysbench--test=oltp\
  2. --mysql-host=127.0.0.1\--mysql主机
  3. --mysql-port=3421\--mysql端口
  4. --mysql-user=root\--mysql登陆用户
  5. --mysql-password=$password\--mysql密码
  6. --mysql-db=test\--mysql测试数据库名
  7. --mysql-socket=/var/mysql.sock\--socket位置
  8. --oltp-table-name=compressed\--mysql测试表名
  9. --mysql-table-engine=innodb\--mysql表使用存储引擎
  10. --max-requests=1000000\
  11. --max-time=600\
  12. --num-threads=100run
  13. OLTPteststatistics:
  14. queriesperformed:
  15. read:14012236
  16. write:5004356
  17. other:2001743
  18. total:21018335
  19. transactions:1000869(3145.37persec.)
  20. deadlocks:5(0.02persec.)
  21. read/writerequests:19016592(59762.20persec.)
  22. otheroperations:2001743(6290.75persec.)
  23. Testexecutionsummary:
  24. totaltime:318.2043s
  25. totalnumberofevents:1000869
  26. totaltimetakenbyeventexecution:31800.5571
  27. per-requeststatistics:
  28. min:3.19ms
  29. avg:31.77ms
  30. max:344.54ms
  31. approx.95percentile:53.37ms
  32. Threadsfairness:
  33. events(avg/stddev):10008.6900/32.50
  34. executiontime(avg/stddev):318.0056/0.01

说明:共消耗时间318s,每秒3145个事务.

第三步:针对uncompressed表进行复合操作测试.

  1. bin/sysbench--test=oltp\
  2. --mysql-host=127.0.0.1\--mysql主机
  3. --mysql-port=3421\--mysql端口
  4. --mysql-user=root\--mysql登陆用户
  5. --mysql-password=$password\--mysql密码
  6. --mysql-db=test\--mysql测试数据库名
  7. --mysql-socket=/var/mysql.sock\--socket位置
  8. --oltp-table-name=uncompressed\--mysql测试表名
  9. --mysql-table-engine=innodb\--mysql表使用存储引擎
  10. --oltp-nontrx-mode=insert\
  11. --oltp-test-mode=nontrx\
  12. --max-requests=1000000\
  13. --max-time=600\
  14. --num-threads=100run
  15. OLTPteststatistics:
  16. queriesperformed:
  17. read:14013370
  18. write:5004769
  19. other:2001908
  20. total:21020047
  21. transactions:1000953(3389.22persec.)
  22. deadlocks:2(0.01persec.)
  23. read/writerequests:19018139(64395.20persec.)
  24. otheroperations:2001908(6778.44persec.)
  25. Testexecutionsummary:
  26. totaltime:295.3347s
  27. totalnumberofevents:1000953
  28. totaltimetakenbyeventexecution:29512.3204
  29. per-requeststatistics:
  30. min:3.37ms
  31. avg:29.48ms
  32. max:157.93ms
  33. approx.95percentile:48.19ms
  34. Threadsfairness:
  35. events(avg/stddev):10009.5300/30.59
  36. executiontime(avg/stddev):295.1232/0.02

说明:共消耗时间295s,每秒3389个事务,在复合操作中,compressed的表会快一些.

相关广告
  • MYSQL压力测试工具sysbench安装测试详解 MYSQL压力测试工具sysbench安装测试详解 MYSQL压力测试工具sysbench安装测试详解
相关阅读

MYSQL压力测试工具sysbench安装测试详解

2019/10/10 17:32:41 | 谷歌SEO算法 | 区块链