如何进行数据库的压测
背景信息
一个完整的业务往往离不开对于数据库的增删改查等操作,在JMeter中,可以通过Sampler「JDBC Request」向数据库发送一个SQL请求,并且对数据库进行相应修改或查询,再进行下一步操作。它通常和JDBC Connection Configuration组件一起使用。
本文将描述建立数据库和配置JDBC Request的流程,模拟一个数据库查询的过程。
您可以使用JMeter来编写脚本,然后将脚本文件上传至CPTS发起压测。本文将介绍详细步骤。
前期部署
本教程使用的是MySQL数据库,数据库中创建表:course;表包含三个列:id,name,teacher。表的数据结构如下:
JMeter脚本编写步骤
1. 启动JMeter GUI。
为JMeter Test Plan添加JDBC Connection Configuration。
1.1 右键单击Test Plan,选择Add > Config Element > JDBC Connection Configuration。
1.2 在JDBC Connection Configuration中,进行相关配置。
部分参数配置说明:
Variable Name Bound to Pool
- Variable Name:数据库连接池的变量名,与JDBC Request中的Variable Name 保持一致。
Connection Pool Configuation
- Max Number of Connections:数据库最大连接数,根据线程数进行修改。若设置为0,表示每个线程都使用单独的数据库连接,线程之间数据库连接不共享。
- Max Wait (ms):数据库连接超时时间,单位为毫秒。
- Time Between Eviction Runs (ms):数据库空闲清理的间隔时间,单位为毫秒。
- Auto Commit:自动提交,可选:true、false、edit(通过JMeter内置的函数进行自定义)。
Transaction Isolation:事务的隔离级别,有如下几个选项:
- TRANSACTIONNONE 无事务隔离规定
- TRANSACTIONREADUNCOMMITTED 事务读未提交
- TRANSACTIONREADCOMMITTED 事务读已提交
- TRANSACTIONSERIALIZABLE 事务序列化
- DEFAULT 默认
- TRANSACTIONREPEATABLEREAD 事务重复读
- Edit 编辑
Connection Validation by Pool
- Test While Idle:测试连接池的空闲连接,即当空闲的时候测试连接是否断开。
- Soft Min Evictable Idle Time (ms):一个连接在池中闲置的最小时间,即闲置时间大于此时间才能被驱逐出去。默认为5000ms。
- Validation Query:验证查询,即检验连接是否有效。
Database Connection Configuration
- DataBase URL:数据库的URL,格式为:jdbc:mysql://ip:port/库名。
- JDBC Driver class:驱动类,填写com.mysql.jdbc.Driver。
- Username:连接数据库的用户名。
- Password:连接数据库的密码。
2 为Test Plan添加一个线程组,为线程组添加两个JDBC Request。
2.1 为Test Plan添加一个线程组。右键单击Test Plan,选择Add > Threads (Users) > Thread Group。
2.2 根据需要修改线程组的参数。
部分参数配置说明:
Name: 线程组名字,建议在多线程组并存时取有意义的名字以区分和查找。
Number of Threads (users): 线程数,既模拟用户的数量。
Ramp-Up Period (in seconds): 线程启动后运行的时长,单位为秒。例:有100个线程,Ramp-Up Period设置为2,既每秒启动50个线程,2秒内启动完成。默认值为0,即所有线程开始后立即启动。
Loop Count:循环次数。若勾选forever,则除非手动停止或崩溃,将一直运行。
2.3 为线程组添加一个JDBC Request。右键单击Thread Group,选择Add > Sampler > JDBC Request。创建两个JDBC Request,分别命名为JDBC Request1和JDBC Request2。
3 JDBC Request1进行相关配置。查询id=123的课程的教师名,配置如下图。
部分参数说明如下:
Variable Name of Pool declared in JDBC Connection Configuration:数据库连接池的名字,需要与JDBC Connection Configuration的Variable Name保持一致。
Query:填写的sql语句,注意未尾不要加“;”。
Parameter values:参数值。
Parameter types:参数类型。
Variable names:sql语句返回结果的变量名。
Result variable name:对象变量保存所有返回的结果
Query timeout (s):查询超时时间,单位为秒。
Handle result set:定义查询语句返回的结果的存储类型。
4. JDBC Request2进行相关配置。更新id=1的课程的教师名。配置如下图。
5. 在Test Plan中添加View Results Tree, 观测结果。右键单击Test Plan,选择Add > Listener > View Results Tree。
6. 脚本编辑完成后,单击页面顶部的绿色开始按钮,运行脚本。通过View Results Tree监听器查看脚本是否运行正常。在左侧导航树中,选择View Results Tree,检查所有Sampler是否都配置正确并符合预期。在该监听器中,如果Sampler前面有绿色对勾表示运行正常,如下图所示。如出现运行异常的Sampler,请根据前述步骤重新进行调试。
7. 点击菜单栏保存图标,并选择合适路径,点击Save即可保存为jmx文件。
8. 根据您的压测需要,参照上述步骤,配置多个线程或多个JDBC Request。脚本调试成功后,保存jmx脚本文件。
CPTS操作步骤:
将JMX脚本、CSV文件(如有)上传到CPTS-JMeter发压场景,设置压测量级,即可随时发起压测。
具体操作,请参考JMeter发压。