51Testing丛书独家连载:(七)性能测试从零开始——LoadRunner入门与提升

发表于:2011-1-14 10:40

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:柳胜    来源:51Testing软件测试网

11.3.4  性能结果量化分析

  1.数据库死锁问题及相关解决建议

  当执行100用户并发审批二种票场景时,Loadrunner提示100个审批事务全部成功通过,而通过应用查询,实际提交数目却为60个。Loadrunner出现“误判”是由于HTTP协议的本身的限制,由于HTTP协议的无状态特点,Loadrunner只能通过HTTP协议返回码来判断脚本是否执行成功,而不是在业务层次上做判断。

  经排查,发现在并发负载下,提交审批二种票时,失败的页面上出现了如下错误信息:

  信息:执行查询SQL语句时发生错误:[IBM][CLI Driver][DB2/AIX64] SQL0911N  The current transaction has been rolled back because of a deadlock or timeout.  Reason code "68".  SQLSTATE=40001

  [IBM][CLI Driver][DB2/AIX64] SQL0911N  The current transaction has been rolled back because of a deadlock or timeout.  Reason code "68".  SQLSTATE=40001

  从DB2的监控数据来看,在并发数目超过30后,lock time大大增加,超过10秒,最终导致死锁超时。

  问题可能根源在:

  (1)开发人员在提交sql语句,做update,insert等操作时,启用了排它锁,导致死锁。

  (2)数据库的locktimeout参数设置过小。

  在针对locktimeout参数做过优化调试后,成功提交数有所提升,但仍无法从根本上消除死锁问题的发生。因此,建议在应用程序jdbc层上修改代码,避免死锁发生,才是解决问题根本之道。

  具体解决建议:

  建议开发人员检查jdbc层上可能存在死锁语句,这有可能:

  ● 一次commit包含多条sql语句

  ● 涉及同时多表操作的sql语句

  ● 逻辑死锁

  2.数据库表索引设计相关问题及解决建议

  数据库在设计上存在如下两个问题:

  (1)表设计存在大表风险

  在测试过程中,发现工单和两票在做删除操作时,记录只是改变状态字段,而始终分别保存在USERID.T_GDMX_GD,USERID.T_LP_GZP,USERID.T_LP_ CZP表中。

  这可能会导致在生产环境下,随着运行时间和用户数的增加,如上表数据记录越来越多,最终成为大表,引起查询性能的下降。一般,业界通常的解决类似问题的办法是另建备份表保存被删除的记录。

21/212>
《2023软件测试行业现状调查报告》独家发布~

精彩评论

  • sss_200885
    2012-4-24 17:26:30

    感觉不错

  • zhuangxzh
    2011-7-06 10:02:02

    学习

  • Gaog1218
    2011-3-19 17:25:10

    先看看...

  • hanyeyu110
    2011-3-04 00:00:12

    when we  executing the case  we can open the db2 deadlock to monitor db

  • cup1987
    2011-2-24 11:09:07

    学到了很多东西

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号