在常用的系统中,离不开数据库,在一些常用的接口中,往往业务逻辑处理完成后,查询返回想要的数据。查询的优化是性能测试中间件常常关注的点。本文结合jmeter压测数据库,针对连接数和索引值来进行对比分析。
一: 数据准备,两张表,分别为students表和company表。students表结构为下图:
company表结构如下图:
其中两个表通过students表中的id关联company表中的s_id去查询操作;
通过存储过程生成1万条数据
delimter //
create procedure setStu():
begin
declare i int default 0;
while i <10000 do
insert into students() values(0,concat('张三',i),'三年级4班',ceil(rand()*100),date(now()),'1');
set i = i+1 ;
end while;
end
//
delimiter;
delimiter //
create procedure setCom()
begin
declare j int default 0;
while i< 10000 do
insert into company() values(0,j,'xxx信',date(now()),floor(rand()*10000));
set j = j+1;
end while;
end
//
delimiter;
分别执行 call setStu(); call setCom();
执行完毕后,查看数据 select max(id) from students;
二: jmeter准备
jmeter下载,自行百度。
打开后,在测试计划中放入mysql-connector-java-8.0.22.jar
新建线程组,加入jdbc连接器
Database URL :jdbc:mysql://localhost:3306/xxxx?serverTimezone=UTC&characterEncoding=utf-8,后缀加上,保持为中文;
jdbc driver:选择mysql
username: 用户名
password: 密码
注意 variable Name for created pool 和jdbc request中的
保持一致。
(1)不限制连接数 和不加索引,随便写了一个sql
select s.name,s.class,s.scores,c.c_name,c.salary from students s left join company c on s.id = c.s_id where name in ('张三996','张三433','张三954','张三934');
使用线程数100,ramp-up时间 5 循环次数 350
开始执行,查看执行结果
添加索引
create index name_index on students(name(255));
添加索引后,再次执行;
通过对比,效率提升了4倍,吞吐量上升了一倍;
(2)添加索引后限制连接数
执行后查看:
通过和上图对比,吞吐量没有什么变化,但是响应时长,发生了很大变化。