性能测试的问题分析和总结
常见的性能问题
1.最重要的性能问题是应用程序设计及与数据库的交互
uJXVT9`T)mD0 应用程序设计:好的应用程序设计可能会获得优秀的响应时间(但不能确保),但差的应用程序设计很难获得好的性能。差的性能设计比如:不管怎么操作,让用户检索出大量结果集(比如
6a'}9K~6N^02.数据库设计
$q7D"uAh0fl0 物理和逻辑设计,涉及非常多的方面,俺也不懂,举一个简单的例子:一个测试问题,大数据量下列表展现(多表联合查询)问题不能满足性能需求。DBA修改了数据库设计采用汇总表去展现列表(单表查询),汇总表也方便创建索引。51Testing软件测试网5d_s bM&AKb
3.参数调整51Testing软件测试网 X4N!VT9M#v
Z
4.硬件环境(包括网络对性能的影响会比较大)51Testing软件测试网#if2T cTC
5.其他,因素很多。
就几个常见的性能问题,举例展开,性能问题非常多,也总结不全面,但可以经常回顾,分类汇总,逐步完善性能问题总结这部分工作。
o-k8L1? tqzkSvL0一、数据库交互过多
Ø 现象:单个操作发送给数据库sql的数据量过多,数据库延迟。
Ø 发现方法:采用监控工具分析程序与数据库的交互(sql数量和响应时间),比如P6spy及类似工具。
Ø 数据库交互与程序设计方式息息相关
建议使用P6spy帮助去做数据库交互分析,截获页面操作的sql。P6spy使用具体请参考
7r[v5eV s(x0http://dodomail.javaeye.com/blog/11793451Testing软件测试网l!i&bS!g$?-W@
http://blog.csdn.net/hennylee/archive/2007/03/07/1523410.aspx51Testing软件测试网9O(~/aF,Q
http://www.blogjava.net/itstarting/articles/48969.aspx
+mx5P9U"M?,b0二、列表效率低
Ø 列表查询未使用索引。
Ø 查询全部字段,而不是所需字段,带来额外的I/O和网络负担。
Ø 分页算法效率低,甚至未使用分页。
1.查询未使用索引
_
Vj7t.Q0此问题比较常见,通过查看sql的执行时间和I/O。查看查询计划可以清楚看出sql是否索引查询,或者全表扫描
,k6c
Qv9H!o;aA0 select ID 。。from B where xxx 51Testing软件测试网
\X7XS`2f6ldez
2.比如Select xxx from where UPPER(name)=‘A’
m"YEg4o0在字段上使用函数,导致不使用索引,虽然Oracle是有基于函数的索引。更好的方式 a.update现有数据 b.改程序,直接改存储模式为大写的数据。
tM:yT{uv03.冗余字段的优化
7{hz,t1^/LSM0 select 。。。 from A where。。。。比如where条件查询的字段的长度较大,创建索引效果后不明显,考虑增加了冗余的字段,进行标识,结合在冗余字段上创建索引会比较快。51Testing软件测试网T*l5F%~O|%E#Q
4.分页算法,遇到的状况也比较混乱。。。。。好的分页算法要推广,公用。
%J\8v P
t1EFn3f$Q[/o0三、查询结果集过大
Ø 返回全部的数据(建议从业务角度出发,分析返回全部的数据是否必要)
Ø 空查询(默认条件查询)
Ø 不规范的查询(where 1=1)
1.查询结果集(建议从业务角度优化系统)51Testing软件测试网^.qdF9P1_
建议参考淘宝的一篇帖子
\0Iy/q h
o0http://rdc.taobao.com/blog/dba/html/187_optimize_from_business.html
6mZ3Gw:k2o02.空查询(默认查询造成压力比较大,其实空查询可能是没有必要的)
9Z|H-ZWnMi0建议页面增加默认过滤条件51Testing软件测试网/h!L
w;n.L'U
3.Where 1=151Testing软件测试网"_4l+[f e? L
a、性能上的影响(可能会影响orale的查询计划)
p_ bIa JW[0b、安全性的影响
Vz'f7R4N-u?@0create table A tablespace tbs_temp as select * from B where 1<>1
`6cm,dn K s/f0create table A as select * from B where 1<>1
Jh)~1A(^2CN"tD0Sybase不支持这样的语法,但是有:51Testing软件测试网P.E;z5vS$z
select * into A from B where 1 <> 151Testing软件测试网xt @W Ntv-U)l
where 1 <> 1,复制表的结构,但注意这样没有主键
0h0dvh9y[8| t04.不规范的查询sql很多,建议多参考部门的相关规范,从规范的角度出发去发现问题。
!Sl!d&H9b+V0四、复杂查询sql(大数据量测试)
Ø 复杂查询sql一定在大数据量下进行测试