mysql oracle 性能测试工具_MySQL 压力测试工具

第一、mysqlslap

MySQL从5.1.4版开始带有一个压力测试工具mysqlslap,通过模拟多个并发客户端访问mysql来执行测试,使用起来非常的简单。通过mysqlslap –help可以获得可用的选项,这里列一些主要的参数,更详细的说明参考官方手册。

–auto-generate-sql, -a

自动生成测试表和数据

–auto-generate-sql-load-type=type

测试语句的类型。取值包括:read,key,write,update和mixed(默认)。

–number-char-cols=N, -x N

自动生成的测试表中包含多少个字符类型的列,默认1

–number-int-cols=N, -y N

自动生成的测试表中包含多少个数字类型的列,默认1

–number-of-queries=N

总的测试查询次数

–query=name,-q

使用自定义脚本执行测试,例如可以调用自定义的一个存储过程或者sql语句来执行测试。

–create-schema

测试的schema,MySQL中schema也就是database

–commint=N

多少条DML后提交一次

–compress, -C

如果服务器和客户端支持都压缩,则压缩信息传递

–concurrency=N, -c N

并发量,也就是模拟多少个客户端同时执行select。可指定多个值,以逗号或者–delimiter参数指定的值做为分隔符

–engine=engine_name, -e engine_name

创建测试表所使用的存储引擎,可指定多个

–iterations=N, -i N

测试执行的迭代次数

–detach=N

执行N条语句后断开重连

–debug-info, -T

打印内存和CPU的信息

–only-print

只打印测试语句而不实际执行

测试的过程需要生成测试表,插入测试数据,这个mysqlslap可以自动生成,默认生成一个mysqlslap的schema,如果已经存在则先删除,这里要注意了,不要用–create-schema指定已经存在的库,否则后果可能很严重。可以用–only-print来打印实际的测试过程:

$mysqlslap -a --only-print

DROP SCHEMA IF EXISTS `mysqlslap`;

CREATE SCHEMA `mysqlslap`;

use mysqlslap;

CREATE TABLE `t1` (intcol1 INT(32) ,charcol1 VARCHAR(128));

INSERT INTO t1 VALUES (1804289383,'mxvtvmC9127qJNm06sGB8R92q2j7vTiiITRDGXM9ZLzkdekbWtmXKwZ2qG1llkRw5m9DHOFilEREk3q7oce8O3BEJC0woJsm6uzFAEynLH2xCsw1KQ1lT4zg9rdxBL');

...

SELECT intcol1,charcol1 FROM t1;

INSERT INTO t1 VALUES (364531492,'qMa5SuKo4M5OM7ldvisSc6WK9rsG9E8sSixocHdgfa5uiiNTGFxkDJ4EAwWC2e4NL1BpAgWiFRcp1zIH6F1BayPdmwphatwnmzdwgzWnQ6SRxmcvtd6JRYwEKdvuWr');

DROP SCHEMA IF EXISTS `mysqlslap`;

可以看到最后由删除一开始创建的schema的动作,整个测试完成后不会在数据库中留下痕迹。假如我们执行一次测试,分别50和100个并发,执行1000次总查询,那么:

$mysqlslap -a --concurrency=50,100 --number-of-queries 1000 --debug-info

Benchmark

Average number of seconds to run all queries: 0.375 seconds

Minimum number of seconds to run all queries: 0.375 seconds

Maximum number of seconds to run all queries: 0.375 seconds

Number of clients running queries: 50

Average number of queries per client: 20

Benchmark

Average number of seconds to run all queries: 0.453 seconds

Minimum number of seconds to run all queries: 0.453 seconds

Maximum number of seconds to run all queries: 0.453 seconds

Number of clients running queries: 100

Average number of queries per client: 10

User time 0.29, System time 0.11

Maximum resident set size 0, Integral resident set size 0

Non-physical pagefaults 4032, Physical pagefaults 0, Swaps 0

Blocks in 0 out 0, Messages in 0 out 0, Signals 0

Voluntary context switches 7319, Involuntary context switches 681

上结果可以看出,50和100个并发分别得到一次测试结果(Benchmark),并发数越多,执行完所有查询的时间越长。为了准确起见,可以多迭代测试几次:

$ mysqlslap -a --concurrency=50,100 --number-of-queries 1000 --iterations=5 --debug-info

Benchmark

Average number of seconds to run all queries: 0.380 seconds

Minimum number of seconds to run all queries: 0.377 seconds

Maximum number of seconds to run all queries: 0.385 seconds

Number of clients running queries: 50

Average number of queries per client: 20

Benchmark

Average number of seconds to run all queries: 0.447 seconds

Minimum number of seconds to run all queries: 0.444 seconds

Maximum number of seconds to run all queries: 0.451 seconds

Number of clients running queries: 100

Average number of queries per client: 10

User time 1.44, System time 0.67

Maximum resident set size 0, Integral resident set size 0

Non-physical pagefaults 17922, Physical pagefaults 0, Swaps 0

Blocks in 0 out 0, Messages in 0 out 0, Signals 0

Voluntary context switches 36796, Involuntary context switches 4093

测试同时不同的存储引擎的性能进行对比:

$ mysqlslap -a --concurrency=50,100 --number-of-queries 1000 --iterations=5 --engine=myisam,innodbmysqlslap -a --concurrency=50,100 --number-of-queries 1000 --iterations=5 --engine=myisam,innodb --debug-info

Benchmark

Running for engine myisam

Average number of seconds to run all queries: 0.200 seconds

Minimum number of seconds to run all queries: 0.188 seconds

Maximum number of seconds to run all queries: 0.210 seconds

Number of clients running queries: 50

Average number of queries per client: 20

Benchmark

Running for engine myisam

Average number of seconds to run all queries: 0.238 seconds

Minimum number of seconds to run all queries: 0.228 seconds

Maximum number of seconds to run all queries: 0.251 seconds

Number of clients running queries: 100

Average number of queries per client: 10

Benchmark

Running for engine innodb

Average number of seconds to run all queries: 0.375 seconds

Minimum number of seconds to run all queries: 0.370 seconds

Maximum number of seconds to run all queries: 0.379 seconds

Number of clients running queries: 50

Average number of queries per client: 20

Benchmark

Running for engine innodb

Average number of seconds to run all queries: 0.443 seconds

Minimum number of seconds to run all queries: 0.440 seconds

Maximum number of seconds to run all queries: 0.447 seconds

Number of clients running queries: 100

Average number of queries per client: 10

User time 2.83, System time 1.66

Maximum resident set size 0, Integral resident set size 0

Non-physical pagefaults 34692, Physical pagefaults 0, Swaps 0

Blocks in 0 out 0, Messages in 0 out 0, Signals 0

Voluntary context switches 87306, Involuntary context switches 10326

第二、SysBench

SysBench是一个模块化的、跨平台、多线程基准测试工具,主要用于评估测试各种不同系统参数下的数据库负载情况。它主要包括以下几种方式的测试:

1、cpu性能

2、磁盘io性能

3、调度程序性能

4、内存分配及传输速度

5、POSIX线程性能

6、数据库性能(OLTP基准测试)

目前sysbench主要支持 MySQL,pgsql,oracle 这3种数据库。

一、安装

首先,在 http://sourceforge.net/projects/sysbench 下载源码包。

接下来,按照以下步骤安装:

tar zxf sysbench-0.4.8.tar.gz && cd sysbench-0.4.8 &&./configure && make && make install && strip /usr/local/bin/sysbench

以上方法适用于 MySQL 安装在标准默认目录下的情况,如果 MySQL 并不是安装在标准目录下的话,那么就需要自己指定 MySQL 的路径了。比如我的 MySQL 喜欢自己安装在 /usr/local/mysql 下,则按照以下方法编译:

./configure --with-mysql-includes=/usr/local/mysql/include --with-mysql-libs=/usr/local/mysql/lib && make && make install

当然了,用上面的参数编译的话,就要确保你的 MySQL lib目录下有对应的 so 文件,如果没有,可以自己下载 devel 或者 share 包来安装。

另外,如果想要让 sysbench 支持 pgsql/oracle 的话,就需要在编译的时候加上参数

–with-pgsql

或者

–with-oracle

这2个参数默认是关闭的,只有 MySQL 是默认支持的。

二、开始测试

编译成功之后,就要开始测试各种性能了,测试的方法官网网站上也提到一些,但涉及到 OLTP 测试的部分却不够准确。在这里我大致提一下:

1、cpu性能测试

sysbench --test=cpu --cpu-max-prime=20000 run

cpu测试主要是进行素数的加法运算,在上面的例子中,指定了最大的素数为 20000,自己可以根据机器cpu的性能来适当调整数值。

2、线程测试

sysbench --test=threads --num-threads=64 --thread-yields=100 --thread-locks=2 run

3、磁盘IO性能测试

sysbench --test=fileio --num-threads=16 --file-total-size=3G --file-test-mode=rndrw preparesysbench --test=fileio --num-threads=16 --file-total-size=3G --file-test-mode=rndrw runsysbench --test=fileio --num-threads=16 --file-total-size=3G --file-test-mode=rndrw cleanup

上述参数指定了最大创建16个线程,创建的文件总大小为3G,文件读写模式为随机读。

4、内存测试

sysbench --test=memory --memory-block-size=8k --memory-total-size=4G run

上述参数指定了本次测试整个过程是在内存中传输 4G 的数据量,每个 block 大小为 8K。

5、OLTP测试

sysbench --test=oltp --mysql-table-engine=myisam --oltp-table-size=1000000 --mysql-socket=/tmp/mysql.sock --mysql-user=test --mysql-host=localhost --mysql-password=test prepare

上述参数指定了本次测试的表存储引擎类型为 myisam,这里需要注意的是,官方网站上的参数有一处有误,即 –mysql-table-engine,官方网站上写的是 –mysql-table-type,这个应该是没有及时更新导致的。另外,指定了表最大记录数为 1000000,其他参数就很好理解了,主要是指定登录方式。测试 OLTP 时,可以自己先创建数据库 sbtest,或者自己用参数 –mysql-db 来指定其他数据库。–mysql-table-engine 还可以指定为 innodb 等 MySQL 支持的表存储引擎类型。

第三、JDBHammer

JDBHammer 是一个数据库压力测试工具,它可以模拟指定数量的并发用户进行数据库查询操作并给出测试的结果报表。当前只支持 MySQL 数据库。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值