【摘 要】数据库系统优化是数据库商业化的前提,按用户需求开发的数据库系统不仅要满足大数据量并发需求,还需要有稳定、安全、可靠的性能,采取科学的数据库系统测试方法,可为优化提升数据库性能提供数据支持。本文通过分析数据库系统测试方法步骤,结合实例,为数据库测试优化提供思路。
【关键词】数据库系统 性能优化 性能测试
一、引言
自上世纪四十年代世界第一台计算机问世后,在短短几十年的发展历程中,计算机技术得到了快速发展,人们在享受数据库技术便利的同时,也为数据库系统存在的一系列隐患和问题所困扰,伴随着数据库系统技术的升级和发展,数据库系统安全隐患也时时威胁着人们的“数据库生活”安全。
从性能和安全意义上说,数据库的性能是否稳定、可靠是衡量数据库系统优劣的主要要素。数据库系统开发建立后,能否满足用户的需求,能否实现用户在使用、安全、可靠等要求和愿意,必须要进行数据库系统的性能优化测试,以先期发现数据库在使用功能上、交互使用上、数据维护管理上是否存在稳定性、可靠性、安全性方面的漏洞或缺陷,以较低的技术成本换取数据库系统改进、完善的方法和技术措施,为数据库系统转变为“成品”投入用户使用,提供技术支持。
二、关注的主要问题
作为数据库系统测试,应把数据库整个集成系统纳入测试关注的范围,要根据目标用户对数据库系统在性能和安全方面的要求来明确测试目的,确定测试规约,并对数据库系统进行风险评估,关注数据库系统运行性能和效果,以此确定测试类型。
(一)数据库系统测试的任务目标
数据库系统测试的主要任务和目标就是要在测试中了解系统运行的特征数据一致性、完整性、安全性等的综合测试,发现各类性能要素瓶颈和功能极限,以满足改进和优化数据库系统的要求,达到目标用户使用需求。
1.整体评估数据库系统。根据数据库设计方案要求,对数据库系统性能进行系统性的测试,以衡量数据库系统的整体性能,评价数据系统能否满足用户需求,同时,找出系统设计与用户使用上存在的问题和差距,便于设计人员对系统进行修正设计和改进。
2.查找缺陷優化设计方案。根据系统设计要求,逐个条件进行临界极限测试,以发现设计缺陷,并根据用户对系统要求,对临界状态设计方案进行修改或重新设计,以期突破设计瓶颈,改进系统性能和功能。
3.提升和优化系统性能。通过系统性测试和反复验证,掌握系统测试数据,并根据此数据,不断进行调整和优化,以期系统达到最优运行状态。
4.负载验证稳定性和可靠性。通过一定时间、一定量的数据、用户等模拟加载,从多角度验证数据库系统,有效评价系统运行的稳定性和可靠性,为系统提交用户使用提供验证数据参考。
(二)数据库系统测试应把握的问题
1.掌握用户需求。数据库系统开发是在用户需求的基础上进行的,因此,该数据库系统主要业务和次要业务是哪些、单位时间内访问量是多少、并发量是多少等都构成了数据库使用性能的重要要素,只有根据用户需求进行测试,才能有效保证测试的结果和结论是否符合要求。
2.关注系统的临界性能。所谓临界就是系统的功能设计的有效限值。当负荷、负载达到临界数值时,系统能够正常运转;当负荷、负载超过临界数值时,系统随着负载逐步增加其运行效率或速度逐步降低,但系统仍能保持正常运行,不至于出现系统崩溃和死机现象。此外,还应关注系统是否有随着时间的延长存在性能衰减的现象。
3.预有准备应急措施。根据数据库系统设计指标,制定测试应急措施和方案,在对系统进行全面测试过程中,能够针对不同的意外情况有有效的应对措施和方案,测试系统在保持正常运行的条件下,对各种情况处置的可行性和有效性。
4.充分了解业务特性。在数据库系统优化测试的实践中,发生系统性能问题主要集中在中间件服务器、操作系统、数据库等的参数设置上,应充分了解业务特点,以期在Oracle的内存分配和SGA分配上给予合理区分,否则就行对运行性能带来极大影响。
5.充分预估数据量。数据库系统开发是建立在用户数据量不断增长的基础上,有些数据量甚至呈量级增长,这对数据库的维护管理带来挑战。因此,应充分预估数据库容量增长情况,通过反复多次测试,科学合理地确定内存的最优配置。
三、数据库系统优化测试步骤
数据库性能优化测试通常有强度测试、负载测试、压力模型测试、多用户并发测试、配置测试、大数据量测试、可靠性测试等等。测试步骤包括编制测试方案、构建测试集群环境、开发测试程序、执行测试和测试报告分析五个步骤。如下图解。
(一)编制测试方案
首先是做好对数据库系统文件资料的分析研究工作。结合业务模型和系统开发框架结构,深入分析研究数据库系统介绍说明书、用户使用手册、拓扑结构图、系统配置说明及服务器配置等等相关文件资料,对数据库系统开发和关键数据有个较为系统的了解和掌握;其次是做好沟通交流进一步系统开发的目标、性质和用途。通过与用户、系统开发技术人员的沟通,对测试中可能涉及到的相关问题和要素进行了解和确认;第三,编制测试方案和计划,综合所掌握的资料,结合测试所要达到的目标,拟定测试方法步骤,列出测试指标及关键点性能要求,完成测试方案计划。
(二)构建测试集群环境
测试集群环境主要是指数据库系统测试所必备的软、硬件条件,包括待测试系统运行的操作系统、数据库、中间件,以及用于压力模型测试的控制台、发起工具等测试系统,网络环境的建立和网关、防火墙等应用软件的安装,同时,进行相关的基础数据准备工作,以符合测试要求,保证 构造数据与实际工作环境数据相关联的要求。在建立硬件、软件应用系统和相关的数据准备后,再对环境可用性进行测试验证。
(三)开发测试场景
测试场景是根据数据库系统用户业务实际运行环境进行模拟的程序腳本,以通过进行参数化编程、模拟和调试等工作,测试系统在实际运行环境下性能运行情况,发现实际运行与设计性能偏差数据。
(四)执行测试
根据测试方案,在一定的测试环境下,按照设计测试用例运行测试程序,执行系统测试条件。
(五)测试报告分析
按测试方案完成测试后,收集整理测试数据及相关监测记录数据,并对测试运行中系统出现的问题进行对比分析,研究被测试系统存在的性能和问题。
1.理定缺陷和问题。系统的性能问题一般集中在操作系统配置、数据库配置、应用程序代码以及网络设置和条件等,应根据测试数据或偶发情况分析,厘清确定缺陷或问题的性质。
2.问题原因分析。根据查找系统缺陷或问题,进行延伸分析其相互关联关系及影响区域和范围,以针对性地分析出现问题的根源。
3.拟定优化方案。根据系统优化目标要求,结合测试中发现的问题和分析的原因对系统优化的影响,拟出优化方案。优化方案应重点关注资源利用率(对不同系统资源的使用程度,是我们测试和分析瓶颈的主要对象)、吞吐量(对不同系统资源的使用程度,是我们测试和分析瓶颈的主要对象)、并发(指许多的用户同时做同样的一个操作。通过并发操作,我们可以看到系统是否稳定,并发现系统设计中的问题)和请求响应时间(指从客户端发出一个请求,到接收到服务器端返回的结果之间的时间)等关键指标。
4.测试优化方案。对原测试环境作出相应调整,并按优化方案要求,对系统进行基准测试,即根据性能基准设计测试程序要求搭建测试环境,完成性能测试,比较测试结果与相同测试程序在相同系统或另外系统上的运行结果。
5.结果分析。优化方案测试后,对比分析测试结果,了解优化方案与预定目标间的结果偏差、问题或缺陷是否得到有效解决、系统在局部或整体上的优化程度等,对优化效果进行评估,以确定是否再进一步优化。
6.验证测试。在优化的基础上,进行验证测试,以验证系统优化或局部优化的性能和效果。
四、运用LoadRunner实现压力测试实例
运用LoadRunner 实施压力测试是一种较为实用的方法。LoadRunner是一种预测系统行为和性能的工业标准级负载测试工具。通过模拟呈数量级用户实施并发负载及实时性能监测,来确认和查找系统性能问题,能够对整个用户部门(或企业)架构进行测试。运用该方法测试,可有效缩短测试时间、优化系统性能,加快应用系统发布周期。
LoadRunner可在运行测试中监控系统及Web服务器等资源运行数据,同步分析响应时间,对系统性能瓶颈分析和定位具有一定的帮助。其负载测试流程有拟制计划、创建脚本、定义场景、执行场景、执行监视、分析结果等五个阶段,运行中,可监视DataBase Server、Web Server等服务器的运行,并通过添加性能计数器来实现监视场景。
五、数据库系统优化途径
在系统测试中,结合结果报表分析,应着重关注并发用户数量、请求响应时间、事务响应时间、TPS、吞吐率、资源利用率、点击率等关键指标,根据关键指标数据所反映出的问题进行改进,找到优化途径。
1.数据库数据过量调用问题。因应用程序反复调用数据库数据,一定程度上影响系统运行性能,调优时应从数据库中大量取得所需要的数据。
2.数据库连接池资源泄漏问题。数据库连接池因存在缺陷而导致数据资源的泄漏,如程序代码没有close()连接、缺少finally块,或close()无法运行等,应认真分析程序代码,查找程序编制中的缺陷和漏洞。在调优时应注意两个问题:
(1)数据库连接管理影响到应用程序伸缩性和健壮性等性能指标。负责分配、管理和释放数据库连接数的据库连接池数=每个线程需要连接数据库的平均数×线程池数×1.1(即增加10%的峰值负载)。一般情况下每个线程需要连接数据库的平均数是1。
(2)在最初池大小设置时,应考虑与最大池大小相等。
3.SQL及其索引问题。应关注SQL语句及其索引或锁定属性问题,对SQL语句及其索引进行优化调整,可有效提高系统性能。
六、结束语
数据库系统的优化测试是一项复杂的技术工作,需要通过较低的成本来模拟真实环境,测试系统正式上线后的运行性能,并根据测试结果按预定性能目标进行优化,以保证用户软件系统达到预定的性能指标。由于系统测试关注的内容较多,技术繁琐,优化后的系统性能是否满足用户需求,是一个相对较长的运行实践过程,需要有持续的维护和关注,不断积累经验,才能更好地解决系统运行中可能出现的新情况、新问题。
参考文献:
[1] 董建彬, 田悦新, 马艳玲. 数据库系统测试方法与技术探讨[J].中国民航飞行学院学报, 2008(2).
[2] 姚竞英.数据库性能测试的研究[J].电脑知识与技术. 2011(10).
[3] 陈绍英,刘建华,金成姬.LoadRunner 性能测试实战[M].北京:电子工业出版社,2007.
[4] 于涌. 软件性能测试与LoadRunner实战[M].北京:人民邮电出版社,2008.
[5] 张亚. 数据库系统的性能测试探讨[M]北京。电子工业出版社,2014.
作者简介:
肖晓枝,女(1973.05.03~),籍贯:安徽,学历:本科,职称:工程师,研究方向:数据库管理,工作单位:福建省产品质量检验研究院。