压力测试——测试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。
压力测试——测试MySQL_第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:数据库的密码。
其他的配置项保持默认值即可。
压力测试——测试MySQL_第2张图片
(3)添加MySQL的JDBC的驱动
因为JMeter没有自带JAR包,故需要到MySQL官方网站下载MySQL的JDBC驱动。
官方下载地址: http://dev.mysql.com/downloads/file/?id=462850
网盘下载地址: 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文件,确定即可。
压力测试——测试MySQL_第3张图片
(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);
压力测试——测试MySQL_第4张图片
(5)添加监听器
右击线程组,添加 -> 监听器,凭个人的喜好和需求任意添加几个监听器(如:图形结果、Summary Report和察看结果树)。
压力测试——测试MySQL_第5张图片
最后,选中线程组后,点击主菜单栏里面的启动按钮执行测试计划中的线程组。
压力测试——测试MySQL_第6张图片
点击察看结果树,可看到线程组的执行结果。
压力测试——测试MySQL_第7张图片
此外,我们也可以到MySQL中查看一下数据变化,可发现数据确实添加成功。到此为止,JMeter测试MySQL的步骤全部完成。

你可能感兴趣的:(PHP核心技术)