欢迎大家来我这里玩玩,看看哈.........

性能测试的问题分析和总结

上一篇 / 下一篇  2008-12-04 08:58:21

今天给部门做了性能测试分享,内容讲的比较泛泛,人还有点小紧张,还需要多学习怎么分享才能取到好的效果,现在仅摘其中的一部分,分享出来,内容不一定全面~~仅作交流51Testing软件测试网i6_7B#T.g|OzNlu

常见的性能问题51Testing软件测试网#AAy/N-A@^clF

51Testing软件测试网2~Jv Fg;cg&m(^$d

1.最重要的性能问题是应用程序设计及与数据库的交互 
uJ XVT9`T)mD0
   应用程序设计:好的应用程序设计可能会获得优秀的响应时间(但不能确保),但差的应用程序设计很难获得好的性能。差的性能设计比如:不管怎么操作,让用户检索出大量结果集(比如50M)的程序运行效率不会高,大量数据的延迟会很明显。
6a'}9K~6N^02.
数据库设计
$q7D"uAh0fl0  
物理和逻辑设计,涉及非常多的方面,俺也不懂,举一个简单的例子:一个测试问题,大数据量下列表展现(多表联合查询)问题不能满足性能需求。DBA修改了数据库设计采用汇总表去展现列表(单表查询),汇总表也方便创建索引。51Testing软件测试网5d_sb M&AKb
3.
参数调整51Testing软件测试网 X4N!VT9M#v Z
4.
硬件环境(包括网络对性能的影响会比较大)
51Testing软件测试网#if2TcTC
5.
其他,因素很多。

4c7F.Y)Mgo0

就几个常见的性能问题,举例展开,性能问题非常多,也总结不全面,但可以经常回顾,分类汇总,逐步完善性能问题总结这部分工作

o-k8L1? tqzkSvL0

 

/k2W?iW`1cDPs051Testing软件测试网*TE,G'rNO-@*Nj

一、数据库交互过多51Testing软件测试网^0J;pr;a4Z2b6G$l

Ø      现象:单个操作发送给数据库sql的数据量过多,数据库延迟。

C7C%^is5c)M0

Ø      发现方法:采用监控工具分析程序与数据库的交互(sql数量和响应时间),比如P6spy及类似工具。51Testing软件测试网5G.t6TNF#cP~

Ø      数据库交互与程序设计方式息息相关

(` YO1c Zu0

建议使用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
51Testing软件测试网un} n0t l+^r

+mx5P9U"M?,b0二、列表效率低51Testing软件测试网@#Cs"{[ O%`

Ø      列表查询未使用索引。51Testing软件测试网k/SAO~k s)`b i

Ø      查询全部字段,而不是所需字段,带来额外的I/O和网络负担。

I[H8kH0

Ø      分页算法效率低,甚至未使用分页。

Pg6Q e.jbR0

1.查询未使用索引
_ Vj7t.Q0
此问题比较常见,通过查看sql的执行时间和I/O。查看查询计划可以清楚看出sql是否索引查询,或者全表扫描
,k6c Qv9H!o;aA0 select ID 
。。from B  where xxx        51Testing软件测试网 \X7X S `2f6ld ez
2.
比如Select xxx from where UPPER(name)
A
m"YEg4o0
在字段上使用函数,导致不使用索引,虽然Oracle是有基于函数的索引。更好的方式  a.update现有数据  b.改程序,直接改存储模式为大写的数据。
tM:yT{uv0
3.冗余字段的优化
7{hz,t1^/LSM0 select 
。。。   from A  where。。。。比如where条件查询的字段的长度较大,创建索引效果后不明显,考虑增加了冗余的字段,进行标识,结合在冗余字段上创建索引会比较快。51Testing软件测试网T*l5F%~O|%E#Q
4.
分页算法,遇到的状况也比较混乱。。。。。好的分页算法要推广,公用。

h)uIdpB G[n4{0

%J\8vP t1E Fn3f$Q[/o0三、查询结果集过大

"z#z"D"{U,A4}0

Ø      返回全部的数据(建议从业务角度出发,分析返回全部的数据是否必要)

WJTDx3y0

Ø      空查询(默认条件查询)51Testing软件测试网x*hSqJjt

Ø      不规范的查询(where 1151Testing软件测试网 s"I~%BG O

1.查询结果集(建议从业务角度优化系统)51Testing软件测试网^.qdF9P1_
建议参考淘宝的一篇帖子
\0Iy/q h o0
http://rdc.taobao.com/blog/dba/html/187_optimize_from_business.html
6mZ3G w:k2o02.
空查询(默认查询造成压力比较大,其实空查询可能是没有必要的)
9Z |H-Z WnMi0
建议页面增加默认过滤条件51Testing软件测试网/h!L w;n.L'U
3.Where 1
151Testing软件测试网"_4l+[fe? L
a、性能上的影响(可能会影响orale的查询计划)

p_ bIa JW[0
b、安全性的影响
V z'f7R4N-u?@0create table A tablespace tbs_temp as
  select * from B where 1<>1
`6cm,dnK 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 @WNtv-U)l
where 1 <> 1
,复制表的结构,但注意这样没有主键
0h0dvh9y[8|t04.
不规范的查询sql很多,建议多参考部门的相关规范,从规范的角度出发去发现问题。

4y;].?N/h.hp0

!Sl!d&H9b+V0四、复杂查询sql(大数据量测试)51Testing软件测试网 fj8r| }f8B

Ø      复杂查询sql一定在大数据量下进行测试

\*Cn ~ a_W|!p:`3D0

Ø      结合操作和sql本身效率进行测试。

IA6}&QZ0

Ø      建议多与DBA配合51Testing软件测试网cOX.Xm8R9~Jq{

如果你只使用小表进行测试(比如小于100条数据),那么在真实数据下会异常缓慢直至停滞。Sql的例子就不列出了,比较多,通常对于多表联合查询,复杂的sql都要在大数据量下测试。其实越复杂的东西越难维护和优化,建议对系统中复杂的sql都记录下来,可能是性能隐患。51Testing软件测试网W;d-@4u(G\itq

51Testing软件测试网w v:c"AOZ%X

五、数据库连接池51Testing软件测试网6V[qR#m1kg

Ø          未使用连接池,应用程序在建立数据库连接上消耗的时间较长,影响性能效率。

{iUvIoB0

Ø          连接池配置参数不当(通过测试确定合适的值)51Testing软件测试网 Yzp3ZU#k0a{j

6A`Z6dD&eU5F,D0六、并发事务处理和死锁问题

3q4w7R.EH]#j%ha0

Ø        程序对事务并发处理上的错误。51Testing软件测试网O{$Oi1]r5mG4S

Ø        资源争用引起锁阻塞和死锁。51Testing软件测试网+g(~ W?6N&o[

Ø        SYBASE的锁模式为行锁,可以减小死锁发生的可能性。51Testing软件测试网'Y7w)b+Yl5s{V

死锁或者锁阻塞,如何检查锁阻塞的大致步骤
~{k R4T0
比如mysql为例子51Testing软件测试网H?5L-[ I8Wh2l
1.Show processlist
,查看有locked的进程
.N!@)@Uc)o-fCn02.
查看阻塞进程执行的sql
9to9y4DJW Iaf1Y03.
关掉程序,或者杀死进程,解掉死锁,不建议杀死进程,可能导致不完整的数据。
51Testing软件测试网Cpgq9P`m
4.
查看sql问题,单独确认问题51Testing软件测试网{$Uc9?h
5.
优化sql或者查程序问题
&Y A:f }-o4CH+Q0

.pg~o;E0
还以一个实际问题中,sybase锁阻塞的例子51Testing软件测试网Xg(o$IG@Gz+Q
环境维护发现锁阻塞,发现很慢,检查到有问题的sql
{5c\+p9?Y01. sp_lock
看到死锁
51Testing软件测试网hcsc4^y2N
2.
查看阻塞进程信息
  51Testing软件测试网(~qe!o5~2nL/F%e+^E6K
select
  *  from  master..sysprocesses  where ipaddr =XXXX
;Y L abo:aHIT03.
造成锁阻塞的进程是spid  1  251Testing软件测试网e8}4l E5F#L&|n
使用dbcc
  traceon(3604)51Testing软件测试网#{8b/rQr-Q
dbcc sqltext(1)
h$lGU0gV{0dbcc sqltext(2)
2nT9vLr(o0
查看到进程执行的sql
g0C&B g{i1R7b.CY0select * from View
(视图)  where ID = null(未列出原sql,仅举个例子)

'|;p,Ft-fL04.
关掉程序,杀死进程,解掉死锁51Testing软件测试网;t@9k2Z |9wLF
单独使用sql adv连接数据库,执行该sql,很慢。
6tyRn5MS9RV I0
查看创建View的语法,sybase可以使用sp_helptext View,可以看到建视图的大致的sql
dZ*J B.Mx!d0create view
  as select xxxx  from A ,B  where A.ID*=B.ID and A.C=1051Testing软件测试网&m3j!|7d{_
查看sqlI/O和执行时间set
  statistics time,io on,查看到sql具体的执行时间和I/O
1Xz L y0r05.
简单看了一下,试着在C字段上增加了索引

[}7Ewt&Uy0
再查询响应时间变小了和查询计划变了,有问题的就是这个查看视图的sql,可能是资源争用造成了死锁。

Q;FS B+]-L*B0p V0

&V}E5JG6drV ?0七、页面过大,网络延迟

Q7tADb JW0

Ø        页面中图形多且大

-Bw5F?/@0

Ø        使用比较大的控件等等51Testing软件测试网~ v.e0pa:k

Ø        建议参数WEB前端性能优化,推荐Yslow工具

*ax/}4A,{ b0

中国雅虎有相关使用Yslow的一个很好的ppt。建议参考,帖子可以看看,推荐《高性能网站建设指南》http://www.cnblogs.com/JustinYoung/archive/2007/11/20/speeding-up-web-site-14rule.html51Testing软件测试网zA,w]$h%M
http://www.cnblogs.com/JustinYoung/archive/2007/11/28/speeding-up-web-site-yslow.html
51Testing软件测试网 t"H0yN8o6I7Z

51Testing软件测试网jt,Sx3dVI d

八、内存溢出、应用终止、服务器宕机等严重问题

qKZ2Rp#^N0

Ø      批量对数据进行操作,会返回大量数据给应用服务器占用了较多的应用服务器的内存,可能会导致应用服务器内存溢出。51Testing软件测试网%Y}z+|)v

Ø      消耗服务器某种资源过多的操作可能会使服务器出现宕机和应用终止的情况。

L-O9M;i:bp0

Ø      检查应用程序日志操作系统的日志或者core文件51Testing软件测试网%D*T$^'b8~

51Testing软件测试网|`ZCDJ

九、参数调整和日志级别设置51Testing软件测试网'V;o@U;rh KQ2n

服务器的参数调整不合理。完善性能环境检查的各种checklist
5L.rx'[}0
生产环境中日志级别应当设置的较高,不打印出sql语句和调试信息,额外的I/O会降低性能效率。
51Testing软件测试网7B:Q Z x*PKNwWS(o


TAG:

 

评分:0

我来说两句

Open Toolbar