Preface
 
    In order to know clearly about the real performance threshold of database server,we usually do database benchmarks.What's it?It's similar with preasure test of database in the whole system.The difference is that the database benchmark may not care about the real business performance but the direct performance with virtual data.It's simple and convenient to implement whereas what is more complex in presure test.The items what we really care about in database benchmark is TPS/QPS/RT(Response Time)/Concurrency,etc.I'm gonna use sysbench(one of the benchmark test tools) to do some basic oltp read write test of MySQL database today.
 
Introduce
 
    sysbench is a common tool used in database bentchmark to test MySQL database(of cource,it supports PostgreSQL and Oracle,too).It provide many test case through several built-in lua scripts by specifying option of "testname".We can use the tool to get performance statistics about CPU,IO,Memory,etc.
 
Procedure
 
Official web site:
 
Git clone address:
 
Download it from github.
  1. [root@zlm1 :: ~]
  2. #cd /vagrant
  3.  
  4. [root@zlm1 :: ~]
  5. #wget https://github.com/akopytov/sysbench/archive/1.0.zip -O "sysbench-1.0.zip"
Install sysbench.
  1. [root@zlm1 :: /vagrant]
  2. #cp -R sysbench-1.0 ~
  3.  
  4. [root@zlm1 :: ~]
  5. #cd sysbench-1.0/
  6.  
  7. [root@zlm1 :: ~/sysbench-1.0]
  8. #./autogen.sh
  9. ./autogen.sh: running `libtoolize --copy --force'
  10. libtoolize: putting auxiliary files in AC_CONFIG_AUX_DIR, `config'.
  11. libtoolize: copying file `config/ltmain.sh'
  12. libtoolize: putting macros in AC_CONFIG_MACRO_DIR, `m4'.
  13. libtoolize: copying file `m4/libtool.m4'
  14. libtoolize: copying file `m4/ltoptions.m4'
  15. libtoolize: copying file `m4/ltsugar.m4'
  16. libtoolize: copying file `m4/ltversion.m4'
  17. libtoolize: copying file `m4/lt~obsolete.m4'
  18. ./autogen.sh: running `aclocal -I m4'
  19. ./autogen.sh: running `autoheader'
  20. ./autogen.sh: running `automake -c --foreign --add-missing'
  21. configure.ac:: installing 'config/ar-lib'
  22. configure.ac:: installing 'config/compile'
  23. configure.ac:: installing 'config/config.guess'
  24. configure.ac:: installing 'config/config.sub'
  25. configure.ac:: installing 'config/install-sh'
  26. configure.ac:: installing 'config/missing'
  27. src/Makefile.am: installing 'config/depcomp'
  28. parallel-tests: installing 'config/test-driver'
  29. ./autogen.sh: running `autoconf'
  30. Libtoolized with: libtoolize (GNU libtool) 2.4.
  31. Automade with: automake (GNU automake) 1.13.
  32. Configured with: autoconf (GNU Autoconf) 2.69
  33.  
  34. [root@zlm1 :: ~/sysbench-1.0]
  35. #./configure && make && make install
  36. //Omitted.
  37. [root@zlm1 :: ~/sysbench-1.0]
  38. #sysbench --version
  39. sysbench: error while loading shared libraries: libmysqlclient.so.: cannot open shared object file: No such file or directory
  40.  
  41. [root@zlm1 :: ~/sysbench-1.0]
  42. #whereis sysbench
  43. sysbench: /usr/local/bin/sysbench
  44.  
  45. [root@zlm1 :: ~/sysbench-1.0]
  46. #ldd /usr/local/bin/sysbench
  47. linux-vdso.so. => (0x00007fff2abfe000)
  48. libmysqlclient.so. => not found //Only lack this lib.
  49. libpthread.so. => /lib64/libpthread.so. (0x00007f86e2986000)
  50. librt.so. => /lib64/librt.so. (0x00007f86e277e000)
  51. libdl.so. => /lib64/libdl.so. (0x00007f86e257a000)
  52. libaio.so. => /lib64/libaio.so. (0x00007f86e2377000)
  53. libm.so. => /lib64/libm.so. (0x00007f86e2075000)
  54. libgcc_s.so. => /lib64/libgcc_s.so. (0x00007f86e1e5f000)
  55. libc.so. => /lib64/libc.so. (0x00007f86e1a9d000)
  56. /lib64/ld-linux-x86-.so. (0x00007f86e2bab000)
  57.  
  58. [root@zlm1 :: ~/sysbench-1.0]
  59. #find / -name libmysqlclient //There's no result found.
  60.  
  61. [root@zlm1 :: ~/sysbench-1.0]
  62. #
Solve the lack of mysqlclient.so.20 file.
  1. [root@zlm1 :: ~/sysbench-1.0]
  2. #vim /etc/ld.so.conf.d/mysql.conf
  3.  
  4. [root@zlm1 :: ~/sysbench-1.0]
  5. #cat /etc/ld.so.conf.d/mysql.conf
  6. /usr/local/mysql/lib
  7.  
  8. [root@zlm1 :: ~/sysbench-1.0]
  9. #ldconfig
  10.  
  11. [root@zlm1 :: ~/sysbench-1.0]
  12. #ldd /usr/local/bin/sysbench
  13. linux-vdso.so. => (0x00007fff767fe000)
  14. libmysqlclient.so. => /usr/local/mysql/lib/libmysqlclient.so. (0x00007fb2ca8a8000)
  15. libpthread.so. => /lib64/libpthread.so. (0x00007fb2ca68b000)
  16. librt.so. => /lib64/librt.so. (0x00007fb2ca483000)
  17. libdl.so. => /lib64/libdl.so. (0x00007fb2ca27f000)
  18. libaio.so. => /lib64/libaio.so. (0x00007fb2ca07d000)
  19. libm.so. => /lib64/libm.so. (0x00007fb2c9d7a000)
  20. libgcc_s.so. => /lib64/libgcc_s.so. (0x00007fb2c9b64000)
  21. libc.so. => /lib64/libc.so. (0x00007fb2c97a3000)
  22. libstdc++.so. => /lib64/libstdc++.so. (0x00007fb2c949b000)
  23. /lib64/ld-linux-x86-.so. (0x00007fb2caec7000)
  24.  
  25. [root@zlm1 :: ~/sysbench-1.0]
  26. #sysbench --version
  27. sysbench 1.0.
Lua scripts of sysbench.
  1. [root@zlm1 :: ~/sysbench-1.0/src/lua]
  2. #ls -l
  3. total
  4. -rwxr-xr-x root root Jul : bulk_insert.lua
  5. drwxr-xr-x root root Jul : internal
  6. -rw-r--r-- root root Jul : Makefile
  7. -rwxr-xr-x root root Jul : Makefile.am
  8. -rw-r--r-- root root Jul : Makefile.in
  9. -rwxr-xr-x root root Jul : oltp_common.lua
  10. -rwxr-xr-x root root Jul : oltp_delete.lua
  11. -rwxr-xr-x root root Jul : oltp_insert.lua
  12. -rwxr-xr-x root root Jul : oltp_point_select.lua
  13. -rwxr-xr-x root root Jul : oltp_read_only.lua
  14. -rwxr-xr-x root root Jul : oltp_read_write.lua
  15. -rwxr-xr-x root root Jul : oltp_update_index.lua
  16. -rwxr-xr-x root root Jul : oltp_update_non_index.lua
  17. -rwxr-xr-x root root Jul : oltp_write_only.lua
  18. -rwxr-xr-x root root Jul : select_random_points.lua
  19. -rwxr-xr-x root root Jul : select_random_ranges.lua
Usage
  1. sysbench [options]... [testname] [command]
  2. Commands implemented by most tests: prepare run cleanup help
Parameters
  1. //Common Options.
  2. --threads //Specify the threads to use(default 1).
  3. --time //Specify the execution time in seconds(default 10s).
  4. --events //Specify the number of events(default 0).
  5. --rate //Speicify the transactions rate(default 0).
  6. --db-driver //Specify the database driver(default mysql).
  7. --rand-type //Specify the random numbers distribution(defautl "special",others "uniform","gaussian","pareto").
  8. --warmup-time //Specify the time to warmup before real execution to avoid inaccurate result(default 0).
  9. --report-interval //Specify the time about the report interval(default 0,means disable intermediate report).
  10. --table //Specify the number of tables in test database.
  11. --table-size //Specify the number of records in each test table.
  12.  
  13. //MySQL Driver Options.
  14. --mysql-host //Specify the host(default localhost).
  15. --mysql-port //Specify the port(default 3306).
  16. --mysql-socket //Specify the socket.
  17. --mysql-user //Default sbtest.
  18. --mysql-password //Specify the password of user.
  19. --mysql-db //Specify the test db(default sbtest).
  20. --mysql-dry-run //It does not really run but treat MySQL client API calls are successful.
  21.  
  22. //Command Options(depends on "testname").
  23. prepare //creates necessary files or data that the peticular test need.
  24. run //actually runs the specific test which is specified by "testname" option.
  25. cleanup //Removes all the test files or data which are relevant with.
  26. help //Shows the information of particular test.
Example
 
Prepare
  1. [root@zlm1 :: ~/sysbench-1.0/src/lua]
  2. #sysbench oltp_read_write.lua --mysql-host=192.168.56.100 --mysql-port= --mysql-user=zlm --mysql-password=aaron8219 --mysql-db=sysbench --tables= --table-size= --mysql-storage-engine=innodb prepare
  3. sysbench 1.0. (using bundled LuaJIT 2.1.-beta2)
  4.  
  5. Creating table 'sbtest1'...
  6. Inserting records into 'sbtest1'
  7. Creating a secondary index on 'sbtest1'...
  8. Creating table 'sbtest2'...
  9. Inserting records into 'sbtest2'
  10. Creating a secondary index on 'sbtest2'...
  11. Creating table 'sbtest3'...
  12. Inserting records into 'sbtest3'
  13. Creating a secondary index on 'sbtest3'...
  14. Creating table 'sbtest4'...
  15. Inserting records into 'sbtest4'
  16. Creating a secondary index on 'sbtest4'...
  17. Creating table 'sbtest5'...
  18. Inserting records into 'sbtest5'
  19. Creating a secondary index on 'sbtest5'...
  20. Creating table 'sbtest6'...
  21. Inserting records into 'sbtest6'
  22. Creating a secondary index on 'sbtest6'...
  23. Creating table 'sbtest7'...
  24. Inserting records into 'sbtest7'
  25. Creating a secondary index on 'sbtest7'...
  26. Creating table 'sbtest8'...
  27. Inserting records into 'sbtest8'
  28. Creating a secondary index on 'sbtest8'...
  29. Creating table 'sbtest9'...
  30. Inserting records into 'sbtest9'
  31. Creating a secondary index on 'sbtest9'...
  32. Creating table 'sbtest10'...
  33. Inserting records into 'sbtest10'
  34. Creating a secondary index on 'sbtest10'...
  35.  
  36. //Create 10 tables with 10w rows each.
  37. [root@zlm1 :: ~/sysbench-1.0/src/lua]
  38. #
 Run
  1. [root@zlm1 :: ~/sysbench-1.0/src/lua]
  2. #sysbench oltp_read_write.lua --mysql-host=192.168.56.100 --mysql-port= --mysql-user=zlm --mysql-password=aaron8219 --mysql-db=sysbench --threads= --time= --warmup-time= --report-interval= --rand-type=uniform run
  3. sysbench 1.0. (using bundled LuaJIT 2.1.-beta2)
  4.  
  5. invalid option: --warmup-time= //It's not supported in my version.
  6.  
  7. [root@zlm1 :: ~/sysbench-1.0/src/lua]
  8. #sysbench oltp_read_write.lua --mysql-host=192.168.56.100 --mysql-port= --mysql-user=zlm --mysql-password=aaron8219 --mysql-db=sysbench --threads= --time= --report-interval= --rand-type=uniform run
  9. sysbench 1.0. (using bundled LuaJIT 2.1.-beta2)
  10.  
  11. Running the test with following options:
  12. Number of threads: //There're three threads.
  13. Report intermediate results every second(s) //Show report every 10s.
  14. Initializing random number generator from current time
  15.  
  16. Initializing worker threads...
  17.  
  18. Threads started!
  19.  
  20. [ 10s ] thds: tps: 134.07 qps: 2684.74 (r/w/o: 1879.80/536.59/268.34) lat (ms,%): 48.34 err/s: 0.00 reconn/s: 0.00 //Notice the low value here.
  21. [ 20s ] thds: tps: 273.74 qps: 5473.50 (r/w/o: 3831.29/1094.64/547.57) lat (ms,%): 15.00 err/s: 0.00 reconn/s: 0.00
  22. [ 30s ] thds: tps: 273.30 qps: 5467.40 (r/w/o: 3827.60/1093.20/546.60) lat (ms,%): 14.73 err/s: 0.00 reconn/s: 0.00
  23. [ 40s ] thds: tps: 250.50 qps: 5009.82 (r/w/o: 3506.61/1002.20/501.00) lat (ms,%): 17.95 err/s: 0.00 reconn/s: 0.00
  24. [ 50s ] thds: tps: 261.07 qps: 5222.57 (r/w/o: 3656.33/1044.09/522.15) lat (ms,%): 16.41 err/s: 0.00 reconn/s: 0.00
  25. [ 60s ] thds: tps: 264.52 qps: 5289.24 (r/w/o: 3702.14/1058.07/529.03) lat (ms,%): 15.55 err/s: 0.00 reconn/s: 0.00
  26. SQL statistics:
  27. queries performed:
  28. read: //Executions of writing.
  29. write: //Executions of reading.
  30. other: //Operations excetp CURD.
  31. total:
  32. transactions: (242.76 per sec.) //TPS is 242.
  33. queries: (4855.30 per sec.) //QPS is 4855.
  34. ignored errors: (0.00 per sec.)
  35. reconnects: (0.00 per sec.)
  36.  
  37. General statistics:
  38. total time: .0155s
  39. total number of events: //Total transactions.
  40.  
  41. Latency (ms):
  42. min: 3.17
  43. avg: 12.35
  44. max: 887.76
  45. 95th percentile: 16.41 //Response time of former 95%
  46. sum: 179957.65
  47.  
  48. Threads fairness: //Statistics of concurrency.
  49. events (avg/stddev): 4856.6667/21.23
  50. execution time (avg/stddev): 59.9859/0.00
  51.  
  52. [root@zlm1 :: ~/sysbench-1.0/src/lua]
  53. #
 summary

  • sysbench is more powerful than mysqlslap(built-in program of MySQL).
  • Be ware of  the diffrence between database benchmark test and presure test.
  • There're also some other tools can be used to test database performance such as mysql-tpcc,YCSB,etc.
  • Database benchmark really helps us to have a explicit overview about our newly arrived server.More test is necessary.
 

利用sysbench进行MySQL OLTP基准测试的更多相关文章

  1. Sysbench对Mysql进行基准测试

    前言 1.基准测试(benchmarking)是性能测试的一种类型,强调的是对一类测试对象的某些性能指标进行定量的.可复现.可对比的测试. 进一步来理解,基准测试是在某个时候通过基准测试建立一个已知的 ...

  2. mysql benchmark基准测试

    git项目地址: https://github.com/akopytov/sysbench 利用sysbench很容易对mysql做性能基准测试(当然这个工具很强大,除了测试主流数据库性能,还能测试其 ...

  3. 使用sysbench对mysql压力测试

    sysbench是一个模块化的.跨平台.多线程基准测试工具,主要用于评估测试各种不同系统参数下的数据库负载情况.关于这个项目的详细介绍请看:https://github.com/akopytov/sy ...

  4. sysbench(mysql测试工具 )

    目录 一.基准测试简介 1.什么是基准测试 2.基准测试的作用 3.基准测试的指标 4.基准测试的分类 二.sysbench 1.sysbench简介 2.sysbench安装 3.sysbench语 ...

  5. MySQL服务器基准测试

    一.基准测试简介 1.什么是基准测试 数据库的基准测试是对数据库的性能指标进行定量的.可复现的.可对比的测试. 基准测试与压力测试 基准测试可以理解为针对系统的一种压力测试.但基准测试不关心业务逻辑, ...

  6. OLTP基准测试脚本

    关键语句:ll /local/sysbenchtest/sysbench-0.5/sysbench/tests/db--查看lua脚本/usr/local/mysql/bin/mysql -u roo ...

  7. sysbench 0.5 oltp测试笔记

    sysbench 0.5相比0.4版本的主要变化是,oltp测试结合了lua脚本,不需要修改源码,通过自定义lua脚本就可以实现不同业务类型的测试.同时0.5相比0.4需要消耗更多的cpu资源. 1. ...

  8. 使用 sysbench对mysql进行压力测试介绍之一

    sysbench是一款开源的多线程性能测试工具,可以执行CPU/内存/线程/IO/数据库等方面的性能测试.数据库目前支持MySQL/Oracle/PostgreSQL.本文只是简单演示一下几种测试的用 ...

  9. 利用sysbench工具测试MHA

    利用sysbench工具测试MHA 1. sysbench准备数据 2. sysbench开始压测 3. master模拟意外宕机 4. mysqldb2 上观察mha状态 5. 手工failover ...

随机推荐

  1. 37、解决 HTMLTestRunner 中文显示乱码的问题

    1.在自己的测试脚本中加入下面的代码并保存: # -.- coding:utf-8 -.- import sys reload(sys) sys.setdefaultencoding('utf-8') ...

  2. Java反射机制分析指南

    一.JAVA是动态语言吗? 一般而言,说到动态言,都是指在程序运行时允许改变程序结构或者变量类型,从这个观点看,JAVA和C++一样,都不是动态语言. 但JAVA它却有着一个非常突出的动态相关机制:反 ...

  3. C#读写txt文件的方法

    1.添加命名空间 System.IO; System.Text; 2.文件的读取 #region 读取TXT文本文件 /// <summary> /// FileStream读取文本文件 ...

  4. hystrix应用介绍(二)

    上篇博客中讲了hystrix在公司中的一些应用场景,由于保密的原因没办法贴出优化的代码,这里专门写一篇hystrix代码的demo,供大家在使用的过程中快速上手 Hystrix有两个请求命令 Hyst ...

  5. Intellij IDEA 配置jrebel热部署

    Jrebel 先介绍一下jrebel,jrebel是可以热部署项目的一个工具,更改代码自动部署并不需要重启项目(在spring中的controller中,增加.修改方法都是可以进行热部署而不需要重启的 ...

  6. 微信小程序电商实战-商品列表流式布局

    今天给大家分享一下微信小程序中商品列表的流式布局方式,根据文章内容操作就可以看到效果哦~~~ 流式布局概念 流式布局也叫百分比布局 把元素的宽,高,margin,padding不再用固定数值,改用百分 ...

  7. 零基础逆向工程40_Win32_14_枚举窗口_模拟鼠标键盘

    1 查找窗口 1.1 代码案例 //查找指定窗口 TCHAR szTitle[MAX_PATH] = {0}; HWND hwnd = ::FindWindow(TEXT("#32770&q ...

  8. canvas制作倒计时效果

  9. Unified Service Desk Overview

    As we implement CRM in enterprise, we usually integrate with many other information system such as E ...

  10. Struts2_Namespace

    namespace 决定了action的访问路径,默认为"",可以接收所有路径的action,当精确的index.action处理不了的时候,就会找到这个action;namesp ...