您的位置:首页 > 编程语言 > PHP开发

Album相机管理项目-拼图模板列表查询,TPS较低的性能分析过程

2016-09-08 18:14 567 查看
 需求说明:

 进入拼图模板 查看更多的界面,可以加载此列表,此列表有翻页功能,因此需要下来获取更多翻页数据。<br />

   整理逻辑:

 从数据库中查询相应分类的拼图模板数据,按照更新时间倒序排列(上下架时会更新更新时间),分类共两种(2海报 3贴图)

Loadrunner测试代码

Action()
{
/*
测试场景:
1.获取拼图模板接口,压力测试、稳定性测试、拐点测试;
2.单实例下,测试出此接口的拐点值;
3.相关表 album_frame;--数据容量1000个,满足3-5年业务的需要  分为两种场景:海报和拼图 1.海报Type=2 Subtype不为0;2.拼图 Type=3 Subtype=0
4.代码逻辑中,根据Type判断。
*/

lr_start_transaction("1-获取拼图模板接口");
web_reg_find("Text=\"retcode\":0",LAST);

web_submit_data("test",
"Action=http://192.168.2.184:8090/frame/{type}/list.do",
"Method=get",
"RecContentType=json",
"Snapshot=t63.inf",
"Mode=HTTP",
ITEMDATA,
"Name=page", "Value=1", ENDITEM,
"Name=imei", "Value=555", ENDITEM,
"Name=model", "Value=555", ENDITEM,
"Name=eclapsedtime", "Value=3", ENDITEM,
"Name=width", "Value=555", ENDITEM,
"Name=height", "Value=555", ENDITEM,
"Name=subtype", "Value={subtype}", ENDITEM,
LAST);

lr_end_transaction("1-获取拼图模板接口", LR_AUTO);

return 0;
}




性能测试过程中,当Vuser为2000时,TPS较低的性能问题。问题原因是:用MyBatis的rowBounds进行翻页,该插件是物理翻页的,数据量大的时查询速度慢。改成sql中添加Limit限制。

直接使用MyBatis的rowBounds进行翻页,该插件是物理翻页的,数据量大的时候是会导致很慢,所以接口功能一定避免使用该rowBounds进行翻页。

优化前:

@Override
public List<AlbumFrame&g
ad1e
t; list(Integer type, Integer page, Integer subtype, Integer perpage){
Map<String, Object> params = new HashMap<String, Object>();
params.put("type", type);
params.put("subtype", subtype);
return getSqlSession().selectList("Album.list", params, DalHelper.toRowBounds(page, perpage));
}

<select id="list" resultMap="myMap">
select
ID, TYPE, SUBTYPE, THUMB, ZIP
from
album_frame
where
stat = 1
AND
type = #{type}
AND
subtype = #{subtype}
ORDER BY utime DESC
</select>

优化后:

@Override
public List<AlbumFrame> list(Integer type, Integer page, Integer subtype, Integer perpage){
Map<String, Object> params = new HashMap<String, Object>();
params.put("type", type);
params.put("subtype", subtype);
RowBounds rb = DalHelper.toRowBounds(page, perpage);
params.put("startIndex", rb.getOffset());
params.put("endIndex",rb.getLimit());
return getSqlSession().selectList("Album.list", params);
}

<select id="list" resultMap="myMap">
select
ID, TYPE, SUBTYPE, THUMB, ZIP
from
album_frame
where
stat = 1
AND
type = #{type}
AND
subtype = #{subtype}
ORDER BY utime DESC
limit #{startIndex},#{endIndex}
</select>


优化后的TPS

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  互联网性能测试