mysql几种性能测试的工具使用

正文开始

<p>http://www.cnblogs.com/langtianya/p/5177837.html</p><p><br /></p><p></p><p>mysql几种性能测试的工具使用</p><p>近期由于要比较mysql及其分支mariadb, percona的性能,了解了几个这方面的工具,包括:mysqlslap sysbench tpcc-mysql,做一个整理,备忘,分享</p><p>1、mysqlslap<br /> 安装:简单,装了mysql就有了<br /> <br /> 作用:模拟并发测试数据库性能。<br /> <br /> 优点:简单,容易使用。<br /> <br /> 不足:不能指定生成的数据规模,测试过程不清楚针对十万级还是百万级数据做的测试,感觉不太适合做综合测试,比较适合针对既有数据库,对单个sql进行优化的测试。<br /> <br /> 使用方法:<br /> 可以使用mysqlslap --help来显示使用方法:<br /> <br /> Default options are read from the following files in the given order:<br /> /etc/mysql/my.cnf /etc/my.cnf ~/.my.cnf<br /> <br /> --concurrency代表并发数量,多个可以用逗号隔开,concurrency=10,50,100, 并发连接线程数分别是10、50、100个并发。<br /> <br /> --engines代表要测试的引擎,可以有多个,用分隔符隔开。<br /> --iterations代表要运行这些测试多少次。<br /> --auto-generate-sql 代表用系统自己生成的SQL脚本来测试。<br /> --auto-generate-sql-load-type 代表要测试的是读还是写还是两者混合的(read,write,update,mixed)<br /> --number-of-queries 代表总共要运行多少次查询。每个客户运行的查询数量可以用查询总数/并发数来计算。<br /> --debug-info 代表要额外输出CPU以及内存的相关信息。<br /> --number-int-cols :创建测试表的 int 型字段数量<br /> --auto-generate-sql-add-autoincrement : 代表对生成的表自动添加auto_increment列,从5.1.18版本开始<br /> --number-char-cols 创建测试表的 char 型字段数量。<br /> --create-schema 测试的schema,MySQL中schema也就是database。<br /> --query 使用自定义脚本执行测试,例如可以调用自定义的一个存储过程或者sql语句来执行测试。<br /> --only-print 如果只想打印看看SQL语句是什么,可以用这个选项。<br /> <br />mysqlslap -umysql -p123 --concurrency=100 --iterations=1 --auto-generate-sql --auto-generate-sql-add-autoincrement --auto-generate-sql-load-type=mixed --engine=myisam --number-of-queries=10 --debug-info <br /> <br /> 或:<br /> <br /> 指定数据库和sql语句:<br /> <br />mysqlslap -h192.168.3.18 -P4040 --concurrency=100 --iterations=1 --create-schema='test' --query='select * from test;' --number-of-queries=10 --debug-info -umysql -p123<br /> <br /> 要是看到底做了什么可以加上:--only-print<br /> <br /> Benchmark<br /> Average number of seconds to run all queries: 25.225 seconds<br /> Minimum number of seconds to run all queries: 25.225 seconds<br /> Maximum number of seconds to run all queries: 25.225 seconds<br /> Number of clients running queries: 100<br /> Average number of queries per client: 0<br /> <br /> 以上表明100个客户端同时运行要25秒</p><p><br />2、sysbench <br /> 安装:<br /> 可以从http://sourceforge.net/projects/sysbench/ 下载<br /> tar zxf sysbench-0.4.12.tar.gz<br /> cd sysbench-0.4.12<br /> ./autogen.sh<br /> ./configure && make && make install<br /> strip /usr/local/bin/sysbench<br /> <br /> <br /> 安装时候可能会报错,后来baidu发现个好文 http://blog.csdn.net/icelemon1314/article/details/7004955 怕以后找不到,也贴过来吧<br /> <br /> 1.如果mysql不是默认路径安装,那么需要通过指定--with-mysql-includes和--with-mysql-libs参数来加载mysql安装路径<br /> 2.如果报错:<br /> ../libtool: line 838: X--tag=CC: command not found<br /> ../libtool: line 871: libtool: ignoring unknown tag : command not found<br /> ../libtool: line 838: X--mode=link: command not found<br /> ../libtool: line 1004: *** Warning: inferring the mode of operation is deprecated.: command not found<br /> ../libtool: line 1005: *** Future versions of Libtool will require --mode=MODE be specified.: command not found<br /> ../libtool: line 2231: X-g: command not found<br /> ../libtool: line 2231: X-O2: command not found<br /> 那么执行下根目录的:autogen.sh文件,然后重新configure && make && make install<br /> 3.如果报错:<br /> sysbench: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object file: No such file or directory<br /> 那么执行下:<br /> n -s /usr/local/mysql5.5/mysql/lib/libmysqlclient.so.18 /usr/lib64/<br /> 4.如果执行autogen.sh时,报如下错误:<br /> ./autogen.sh: line 3: aclocal: command not found<br /> 那么需要安装一个软件:<br /> yum install automake<br /> 然后需要增加一个参数:查找: AC_PROG_LIBTOOL 将其注释,然后增加AC_PROG_RANLIB <br /> <br /> <br /> 作用:模拟并发,可以执行CPU/内存/线程/IO/数据库等方面的性能测试。数据库目前支持MySQL/Oracle/PostgreSQL<br /> <br /> 优点:可以指定测试数据的规模,可以单独测试读、写的性能,也可以测试读写混合的性能。<br /> <br /> 不足:测试的时候,由于网络原因,测试的非常慢,但是最终给的结果却很好,并发支持很高,所以给我的感觉是并不太准确。当然也可能我没搞明白原理<br /> <br /> 使用方法:<br /> <br /> 准备数据 <br /> sysbench --test=oltp --mysql-table-engine=myisam --oltp-table-size=400000 --mysql-db=dbtest2 --mysql-user=root --mysql-host=192.168.1.101 --mysql-password=pwd prepare<br /> 执行测试<br /> sysbench --num-threads=100 --max-requests=4000 --test=oltp --mysql-table-engine=innodb --oltp-table-size=400000 --mysql-db=dbtest1 --mysql-user=root --mysql-host=192.168.1.101 --mysql-password=pwd run <br /> <br /> sysbench 0.4.12: multi-threaded system evaluation benchmark<br /> <br /> No DB drivers specified, using mysql<br /> Running the test with following options:<br /> Number of threads: 100<br /> <br /> Doing OLTP test.<br /> Running mixed OLTP test<br /> Using Special distribution (12 iterations, 1 pct of values are returned in 75 pct cases)<br /> Using "BEGIN" for starting transactions<br /> Using auto_inc on the id column<br /> Maximum number of requests for OLTP test is limited to 4000<br /> Threads started!<br /> Done.<br /> <br /> OLTP test statistics:<br /> queries performed:<br /> read: 56014<br /> write: 20005<br /> other: 8002<br /> total: 84021<br /> transactions: 4001 (259.14 per sec.)<br /> deadlocks: 0 (0.00 per sec.)<br /> read/write requests: 76019 (4923.75 per sec.)<br /> other operations: 8002 (518.29 per sec.)<br /> <br /> Test execution summary:<br /> total time: 15.4393s<br /> total number of events: 4001<br /> total time taken by event execution: 1504.7744<br /> per-request statistics:<br /> min: 33.45ms<br /> avg: 376.10ms<br /> max: 861.53ms<br /> approx. 95 percentile: 505.65ms<br /> <br /> Threads fairness:<br /> events (avg/stddev): 40.0100/0.67<br /> execution time (avg/stddev): 15.0477/0.22<br /> <br /> </p><p><br />3、tpcc-mysql <br /> 安装:<br /> 如果从原网站上下载源码比较麻烦,需要工具、注册、生成证书等。这里提供一个下载包http://blog.chinaunix.net/blog/downLoad/fileid/8532.html<br /> export C_INCLUDE_PATH=/usr/include/mysql<br /> export PATH=/usr/bin:$PATH<br /> export LD_LIBRARY_PATH=/usr/lib/mysql<br /> cd /tmp/tpcc/src<br /> make <br /> 然后就会在 /tmp/tpcc-mysql 下生成 tpcc 命令行工具 tpcc_load 、 tpcc_start<br /> <br /> 作用:测试mysql数据库的整体性能<br /> <br /> 优点:符合tpcc标准,有标准的方法,模拟真实的交易活动,结果比较可靠。<br /> <br /> 不足:不能单独测试读或者写的性能,对于一些以查询为主或者只写的应用,就没有这么大的意义了。<br /> <br /> 使用方法:<br /> <br /> 加载数据<br /> 创建库<br /> mysql>creat**e database tpcc10;<br /> 创建表:<br /> shell>mysql tpcc10 < create_table.sql<br /> 添加外键:<br /> shell>mysql tpcc10 < add_fkey_idx.sql<br /> <br /> 加载数据:<br /> 1、单进程加载:<br /> shell>./tpcc_load 192.168.11.172 tpcc10 root pwd 300<br /> |主机||数据库||用户||密码||warehouse|<br /> 2、并发加载:(推荐,但需要修改一下)<br /> shell>./load.sh tpcc300 300<br /> |数据库||warehouse|<br /> 3、测试<br />./tpcc_start -h192.168.11.172 -d tpcc -u root -p 'pwd' -w 10 -c 10 -r 10 -l 60 -i 10 -f /mnt/hgfs/mysql/tpcc100_2013522.txt<br /> ***************************************<br /> *** ###easy### TPC-C Load Generator ***<br /> ***************************************<br /> option h with value '192.168.11.172'<br /> option d with value 'tpcc'<br /> option u with value 'root'<br /> option p with value 'pwd'<br /> option w with value '1'<br /> option c with value '100'<br /> option r with value '120'<br /> option l with value '60'<br /> option i with value '10'<br /> option f with value '/mnt/hgfs/mysql/tpcc100_2013522.txt'<br /> <Parameters><br /> [server]: 192.168.11.172<br /> [port]: 3306<br /> [DBname]: tpcc<br /> [user]: root<br /> [pass]: pwd<br /> [warehouse]: 1<br /> [connection]: 100<br /> [rampup]: 120 (sec.)<br /> [measure]: 60 (sec.)<br /> <br /> RAMP-UP TIME.(120 sec.)<br /> <br /> MEASURING START.<br /> <br /> 10, 245(77):10.923|28.902, 242(0):3.677|10.796, 25(0):1.579|2.198, 24(0):17.451|21.047, 25(4):19.999|33.776<br /> 20, 262(75):9.070|11.917, 263(0):3.407|4.716, 26(0):1.608|1.776, 27(0):11.347|16.408, 26(1):19.166|21.018<br /> 30, 247(90):11.130|14.131, 241(0):2.367|2.654, 24(0):0.960|1.095, 24(0):9.308|16.538, 25(3):19.999|24.874<br /> 40, 237(69):11.840|13.009, 239(1):3.638|7.245, 24(0):0.692|0.773, 23(0):8.756|10.456, 23(1):19.527|20.495<br /> 50, 252(69):10.548|17.925, 256(0):2.652|2.893, 26(0):1.177|3.579, 27(0):14.648|15.018, 25(4):19.999|26.398<br /> 60, 256(78):9.323|11.328, 251(1):3.895|5.380, 25(0):0.785|1.542, 25(0):11.382|15.829, 26(0):18.481|18.855<br /> <br /> STOPPING THREADS....................................................................................................<br /> <br /> <Raw Results><br /> [0] sc:1041 lt:458 rt:0 fl:0 <br /> [1] sc:1490 lt:2 rt:0 fl:0 <br /> [2] sc:150 lt:0 rt:0 fl:0 <br /> [3] sc:150 lt:0 rt:0 fl:0 <br /> [4] sc:137 lt:13 rt:0 fl:0 <br /> in 60 sec.<br /> <br /> <Raw Results2(sum ver.)><br /> [0] sc:1041 lt:458 rt:0 fl:0 <br /> [1] sc:1490 lt:2 rt:0 fl:0 <br /> [2] sc:150 lt:0 rt:0 fl:0 <br /> [3] sc:150 lt:0 rt:0 fl:0 <br /> [4] sc:137 lt:13 rt:0 fl:0 <br /> <br /> <Constraint Check> (all must be [OK])<br /> [transaction percentage]<br /> Payment: 43.36% (>=43.0%) [OK]<br /> Order-Status: 4.36% (>= 4.0%) [OK]<br /> Delivery: 4.36% (>= 4.0%) [OK]<br /> Stock-Level: 4.36% (>= 4.0%) [OK]<br /> [response time (at least 90% passed)]<br /> New-Order: 69.45% [NG] *<br /> Payment: 99.87% [OK]<br /> Order-Status: 100.00% [OK]<br /> Delivery: 100.00% [OK]<br /> Stock-Level: 91.33% [OK]<br /> <br /> <TpmC><br /> 1499.000 TpmC <br /> <br /> 关于Tpcc的概念请参见http://baike.baidu.com/view/2776305.htm <br /> 这里把测试用例介绍贴一下<br /> TPC-C测试用到的模型是一个大型的商品批发销售公司,它拥有若干个分布在不同区域的商品仓库。当业务扩展的时候,公司将添加新的仓库。<br /> 每个仓库负责为10个销售点供货,其中每个销售点为3000个客户提供服务,每个客户提交的订单中,平均每个订单有10项产品,<br /> 所有订单中约1%的产品在其直接所属的仓库中没有存货,必须由其他区域的仓库来供货。同时,每个仓库都要维护公司销售的100000种商品的库存记录。</p><p>4. The MySQL Benchmark Suite</p><p>这个测试工具是随着MySQL绑定发行的,基于Perl语言和其中的两个模块:DBI和Benchmark。如果有需要,它支持所有支持DBI驱动的数据库。可以通过修改bench-init.pl的选项以符合需要。另外提醒的是,它不支持多CPU。</p><p>进行测试时,执行run-all-tests脚本,具体的命令选项请看README。</p><p>5. MySQL super-smack</p><p>这是一个强大的广受赞誉的压力测试工具,支持MySQL和PostgreSQL。</p><p><a href="http://jeremy.zawodny.com/mysql/super-smack/">http://jeremy.zawodny.com/mysql/super-smack/</a></p><p>安装很简单,请先仔细阅读目录里的指导文件。</p><p>Preparing test data</p><p>做测试时,最好用自己的数据。因为使用真实的数据,使测试变得接近现实和客观。</p><p>Configuration</p><p>smack的文件设置,看起来很简单。</p><p> </p><p>6. MyBench: A Home-Grown Solution</p><p>MyBench一种基于Perl语言易于扩展的测试工具。</p><p><a href="http://jeremy.zawodny.com/mysql/mybench/">http://jeremy.zawodny.com/mysql/mybench/</a></p><p>参考:<a href="http://database.51cto.com/art/201010/230055.htm" target="_blank">几个常见的MySQL性能测试工具</a></p><p>相关:<a href="http://database.51cto.com/art/201010/230055.htm" target="_blank">几个常见的MySQL性能测试工具</a></p><br />

正文结束

Mysql Innodb 引擎优化 参数 mysql 合并字段加自定义分隔符