四、 根据测试结果的分析并进行系统调优
有了测试的结果及分析情况,我们需要对系统可能存在的问题加以归类及分析。这时,相关的开发人员、数据库管理员、系统管理员等就需要根据测试分析的意见共同分析确定更细节的内容。针对我们的测试分析结果大致把系统调优分为以下几个方面进行。
1、 调整应用服务器参数
在对应用服务器进行性能调整前,首先应了解应用服务器的体系结构及应用部署结构。我社采用Websphere 5.0.2作为应用中间件,部署了集成平台、信息发布、基本OA应用、资产管理等多个应用。我们可运行时性能顾问程序和 Tivoli 性能查看器中的性能顾问程序,结合它的建议进行更改配置以优化WebSphere Application Server 上的性能。主要调整的参数包括WAS数据库连接池最大连接数、各个应用的数据库连接池最大连接数、应用程序服务器中Web 容器的最大内存会话数、Web容器的最大线程池大小。

2、 数据库优化
数据库优化的讨论可以说是一个永恒的主题。为了改善Oracle数据库的性能,首先需让数据库有一个良好的配置,包括硬件配置、操作系统配置、Oracle参数配置、数据结构组织,然后再考虑具体语句等方面的调整与优化。
根据我社的系统正于生产阶段的具体情况,在配置方面主要采取参数调优及数据结构组织等操作进行优化。根据测试分析报告结果及系统实时监控情况,再结合statspack工具进行性能瓶颈分析,我们进行了以下参数及结构的调整。
1) 内存分配在很大程度上决定着oracle的响应性能。我社oracle数据库总的内存大小为8G,根据数据库管理员的分析建议,将SGA适当调整为1.6G,并进行共享池、缓冲区高速缓存、大型池及java池进行相应的大小分配。
2) 根据实时会话的峰值连接情况及操作系统资源使用情况,增加数据库最大连接会话数至700,修改了事务处理参数至850及其它初始化参数。例如我们将sort_area_size由默认32K提升为2M,log_buffer由32K提至2M,optimizer_index_caching由默认0提至90,optimizer_index_cost_adj由默认100设置为50等。
3) 分析表和索引,更改优化模式。针对我社应用表查询操作较多的应用特点,一方面建立表关键字索引,另一方面进行表及索引的分析,将optimizer_mode值调整为first_rows,以尽快返回查询结果。
4) 针对具体应用中出现百万条记录以上的大数据表进行了时间分区划分,降低单表查询时间。在表设计,将blob字段存储于单独的表中,可减少表行迁移的开销。
随应用的深入,系统性能也是随着应用情况发生变化。因此,以上的参数调优及结构调整过程也需进行阶段性的调整及分析。
3、 核查系统程序中数据库连接的关闭与连接代码,核查SQL语句执行效率
结合数据库参数及结构的调优,程序代码中数据库连接关闭的处理及SQL语句的执行效率在很大程序上也决定着应用系统的性能。经过测试过程中我们发现数据库会话数已大于在系统高峰期出现的最大连接数,可仍然存在出现多个active状态的会话,在问题严重还将产生用户类型锁。因此我们将每个应用程序进行了数据库连接代码及关闭代码的核查,纠正了部分漏关数据库连接的程序性错误。同时,我们尽量减少数据库会话连接的时间及次数。虽然此部分工作需付出较大工作量,经改进后系统的测试情况分析,有了较明显的改进效果。
Oracle SQL调整是Oracle调优中最重要的领域之一,也许您会发现只需要通过一些简单的SQL调优就可以大幅度提升SQL语句的性能。Oracle SQL是个复杂的过程,首先我们可利用oracle 提供的Diagnostic pack 中top SQL 及Tuning pack中SQL Analyze 的SQL 分析工具判断哪些语句执行效率较低及存在改进余地并进行调优。在调优过程中我们总结出以下方法:
1) 尽可能消除不必要的大表搜索是减少数据库不必要的I/O的有效方法。例如多次循环对表的查询可更改为采用一次取得结果集再进行对象的逻辑循环处理,便大大减少SQL的执行。
2) 合理使用join操作,减少表间级联查询。在有的查询中可采用nested loop join快一些,有些则是hash join快一些,另外一些则是sort_merge join更快。
3) 合理利用索引并确保最优的索引使用对于改善查询的速度将起着很重要的作用。
4) 在某些SQL语句中,排序方法也是改进执行效率的重要因素。
5) 对最经常使用并且记录量较小的数据表查询可采用数据库cache方法或内存数据库提高效率,例如平台单点登录时的用户信息权限表。
4、 改进部分主要影响性能的程序执行效率。
结合数据库的改进与调优,根据测试分析的结果。在我社的应用系统中,有10%的功能却占据着主要系统应用,例如信息首页展示、信息上载、邮件收件展示等。针对此部分功能,我们进行了程序逻辑的改进,优化数据库SQL执行效率,减少大对象的操作,增强对象的持久性及复用性。例如在首页展示程序中,我们一方面减少取得的表元素对象,另一方面将原来写在jsp页面中的业务逻辑移至servlet,并优化业务逻辑处理过程,提升了执行效率。经并发测试,由原有的平均响应时间6秒改进为2秒。
5、 根据测试的结果进行系统负载预估与评价。
准确的对系统进行负载评估也是进行系统测试及调优的主要目标,同时也是对系统稳定运行评估的重要依据。经过压力测试的模拟过程,得到大量的模拟数据将作为系统负载评估的主要依据。经过一系列的调优过程,系统所能承受的负载也将发生一定的变化。系统负载评估可通过循环的系统测试及生产系统的实时监测进行。
五、 总结
软件测试及系统调优是一门技术,是一个从实践至理论再到实践的循环反复的过程。不同的环境、不同的业务模型、不同的对象,采用的测试方法与系统改进手段也都不一致。然后,在实际系统性能调优过程中还是可能会遇到这样那样的问题,甚至会出现经过系统调整导致性能下降的情况。只有通过大量的测试作为调优的补充才可尽量蔽免这样情况的发生。系统调优不是一次性的伟大工程,尤其系统性能参数调优往往需要进行多次测试与反复试验。因此,测试作为调优的依据,调优是测试的动力,测试与调优是的并进的过程,互为补充。
结合我社的实践经验,软件测试及系统调优是个持续的过程。根据测试结果的分析,结合有效的调优手段是保证系统不断趋于良性运行的重要手段。以上是我社系统测试及调优的实践总结,供大家交流,互相促进。