Album相机管理项目-拼图模板列表查询,TPS较低的性能分析过程
2016-09-08 18:14
567 查看
需求说明:
进入拼图模板 查看更多的界面,可以加载此列表,此列表有翻页功能,因此需要下来获取更多翻页数据。<br />
整理逻辑:
从数据库中查询相应分类的拼图模板数据,按照更新时间倒序排列(上下架时会更新更新时间),分类共两种(2海报 3贴图)
Loadrunner测试代码
性能测试过程中,当Vuser为2000时,TPS较低的性能问题。问题原因是:用MyBatis的rowBounds进行翻页,该插件是物理翻页的,数据量大的时查询速度慢。改成sql中添加Limit限制。
优化后的TPS
进入拼图模板 查看更多的界面,可以加载此列表,此列表有翻页功能,因此需要下来获取更多翻页数据。<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
相关文章推荐
- PHP foreach变量的坑
- PHP学习之常量
- 开发语言大PK:php和Java哪个更好?
- 遇到 Error creating the Web Proxy specified in the 'system.net/defaultProxy' configuration section的解决办法
- php5.3中关于session的一点东西
- getParameter() getInputStream()和getReader() 区别
- zabbix 监控phpfpm_status
- laravel引入yunserch全文快速搜索注意
- php 学习随笔
- 关于ZendStudio 12.0.2的破解 包括mac
- [置顶] ThinkPHP菜鸟实现的增删改查
- 关于 编译安装的lamp环境 php开启openssl 功能
- php 接口类与抽象类的实际作用
- php5.6与php7 不同总结(陆续补充)
- PHP接收JSON格式的数据
- 分享PHP中的10个实用函数
- PHP的那些坑
- ThinkPHP的四种URL模式 URL_MODEL
- php学习笔记:对文件的增删查改等操作
- Laravel引入第三方库的方法