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

来源:互联网 发布:苹果手机录屏软件 编辑:程序博客网 时间:2024/04/28 13:32
 需求说明:
 进入拼图模板 查看更多的界面,可以加载此列表,此列表有翻页功能,因此需要下来获取更多翻页数据。<br />
   整理逻辑:
 从数据库中查询相应分类的拼图模板数据,按照更新时间倒序排列(上下架时会更新更新时间),分类共两种(2海报 3贴图)
Loadrunner测试代码

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


0 0
原创粉丝点击