压力测试——测试MySQL

除了对Web服务器进行测试外,数据库服务器也是系统的瓶颈之一,所以,咱们还能够对数据库进行压力测试。关于MySQL的慢查询、explain分析等,这些主要是针对单条SQL语句的,其结果反映了SQL语句的优劣;而对MySQL进行的压力测试,则能够反映SQL语句的优劣和MySQL服务器的性能。
1. 利用mysqlslap工具测试MySQL
mysqlslap是一个MySQL官方提供的压力测试工具,经过模拟多个并发客户端访问MySQL来执行测试,使用起来很是简单。经过 mysqlslap --help 命令,能够查看可用的参数。
打开命令行,切换至mysql的bin目录,执行命令以下:
cd E:\xampp\mysql\bin
mysqlslap --help
下面列出一些比较重要的参数:
defaults file:配置文件存放位置。
create schema:所要测试的数据库。
concurrency:并发数。
engines:测试引擎,能够有多个,用分隔符隔开。
iterations:迭代(重复)的实验次数。
socket:用来链接数据库的socket文件的文件。
debug info:打印内存和CPU的信息。
only print:只打印测试语句而不实际执行。
auto generate sql:自动产生测试的sql语句。
auto generate sql load type:测试sql的类型,类型有mixed、update、write、key、read。
numbers of queries:执行的sql语句的总数。
number int cols:表内int列的数量。
number char cols:表内char列的数量。
query=name:使用自定义的脚本进行测试,例如能够调用自定义的一个存储过程或sql语句来执行测试。
下面是一个示例:
mysqlslap -a -concurrency=50 --number-of-queries 300 -T -hlocalhost -uroot -p
这是一个自动测试,MySQL将自动建立数据库,自动插入以及读取,给出最终的执行结果,其执行结果可能以下:
E:\xampp\mysql\bin>mysqlslap -a -concurrency=50 --number-of-queries 300 -T -hlocalhost -uroot -p
Enter password:
Benchmark
Average number of seconds to run all queries: 8.024 seconds
Minimum number of seconds to run all queries: 8.024 seconds
Maximum number of seconds to run all queries: 8.024 seconds
Number of clients running queries: 1
Average number of queries per client: 300

Benchmark
Average number of seconds to run all queries: 8.493 seconds
Minimum number of seconds to run all queries: 8.493 seconds
Maximum number of seconds to run all queries: 8.493 seconds
Number of clients running queries: 2
Average number of queries per client: 150
......
也能够指定执行自定义的sql语句,使用很简单,这里不做详细介绍。
2. 使用JMeter工具测试MySQL
因为mysqlslap工具测试数据库性能的方式,采用的是命令行方式,故不太友好。这里介绍用JMeter工具测试MySQL。
关于JMeter工具的安装与基本用法,可参考: http://blog.csdn.net/lamp_yang_3533/article/details/52782732
JMeter使用JDBC技术,能够测试任何支持JDBC技术的数据库,包括MySQL、Oracle、PqSQL、MSSQL等。这里,咱们来演示如何使用JMeter测试MySQL数据库。
(1)新建测试计划
双击 jmeter.bat 文件打开JMeter工具,会自动建立一个测试计划。
而后在该测试计划中,新建一个线程组,线程数为50,Ramp-Up Period为1,循环次数为1。

(2)配置JDBC
右击线程组,在弹出的快捷菜单中选择 添加 -> 配置元件 -> JDBC Connection Configuration。配置各项参数,其中Variable Name 能够随便填写,这里咱们填写MySQL。最主要的配置是 Database Connection Configuration 区域,它有如下几个配置参数:
Database URL:JDBC格式的数据库链接,每种数据库的URL都有所区别。MySQL数据库的写法为 jdbc:mysql://127.0.0.1:3306/test,test为数据库的名称。
JDBC Driver class:JDBC驱动的名称,如com.mysql.jdbc.Driver。
Username:数据库的用户名。
Password:数据库的密码。
其余的配置项保持默认值便可。

(3)添加MySQL的JDBC的驱动
由于JMeter没有自带JAR包,故须要到MySQL官方网站下载MySQL的JDBC驱动。
网盘下载地址: http://pan.baidu.com/s/1miIvNBE
下载后,解压,而后将里面的 mysql-connector-java-5.1.39-bin.jar 文件拷贝至JMeter的bin目录,以便快速找到该驱动文件。
单击测试计划,在Add directory or jar to classpath处,点击浏览,选择mysql-connector-java-5.1.39-bin.jar文件,肯定便可。

(4)添加JDBC请求
右击线程组,添加 -> Sampler -> JDBC Request,须要修改的参数包括如下几个:
Variable Name:和刚刚填写的名称一致便可,如MySQL。表示创建一个名称MySQL的链接池,以后其余的JDBC Request都共用这个链接池。
Query Type:这里咱们选择Update Statement,表示SQL语句的类型为写操做。
Query:所要测试的SQL语句。如 INSERT user(username,password,age) VALUES('jack','123456',17);

(5)添加监听器
右击线程组,添加 -> 监听器,凭我的的喜爱和需求任意添加几个监听器(如:图形结果、Summary Report和察看结果树)。

最后,选中线程组后,点击主菜单栏里面的启动按钮执行测试计划中的线程组。

点击察看结果树,可看到线程组的执行结果。

此外,咱们也能够到MySQL中查看一下数据变化,可发现数据确实添加成功。到此为止,JMeter测试MySQL的步骤所有完成。