天天看点

R1 rebuilder memo 2013年8月1日

一、测试目标

    为了保证每次的生产环境均为一个可靠的代码版本,同时为了有效的节省上线时间,我们基于TDD测试驱动开发模式进行敏捷测试。

    每一次测试结论均为了尽早的发现问题,解决问题。

    每一次测试的目标均为代码和性能级别的,希望可以及时整改。整改方式分两阶段进行:1、代码修改,这种修改主要涉及到数据库SQL代码和ASP.net代码。建议先优化SQL代码,至于开发代码,我们建议在上线前基于最优选的.net Framework平台进行。2、平台优化修改,目前监理机和生产用服务器环境不一样,因此平台级别旨在数据库、操作系统环境,而非硬件环境。

二、测试方法

    功能测试:我们将R1系统部署在生产环境的服务器上,基于千兆交换机进分发至各个功能测试人员终端中,网段为192.168.20.1XX。由各个业务人员进行功能模拟及演练测试。

    性能测试:基于专业工具进行,目前我们使用过的工具有:

    1、Rational Robot 黑盒功能及性能测试

    2、Rational PuriflyPlus 代码内存溢出、代码覆盖率测试,修正代码质量

    3、Loadrunner 压力测试,目前使用Web HTTP协议1000并发用户许可

    4、Quest Spotlight on Oracle 数据库性能监控及性能诊断平台

    5、Web Performance Tools & WCAT 应用服务器及ASP.net性能工具

三、测试结论

1、代码

1、CSS样式表未保存为UTF-8模式,导致首页显示错误。已修复。

2、存在部分调用DLL的内存的请求IIS 6.0版本的内存猛增情况,建议优化DLL或基于IIS 7.0/7.5进行测试。Ipedf.Core.dll,FreeTextBox.dll特别突出

3、部分SQL有必要进行调优,详细SQL见下图,但此处的SQL调优不是最终模式,建议在生产环境下重构,如基于11GR2构建建议选择基于成本的优化器。

2、数据库

1、IO在监理机中成为了重要瓶颈,希望这个问题在存储环境下可以得到提升。

2、数据库SGA/PGA已经在监理机中达到最优化设计,但依然无法避免内存占用及释放缓慢的事实,这个情况需要参数化优化解决。此问题在增加一个并发用户数的情况下愈发严重,目前经过测试。47个用户并发访问的混合场景下,IIS已经无法响应新的连接请求。

4、IIS调优和Oracle调优迫在眉睫。

3、R1结论

目前按照开发计划,此R1(0731)版本可以部署为R1版本。我们周一需要在生产环境下进一步调优和性能优化。优化内容如下:

1、SGA/PGA参数化调整

2、IIS参数化调整,部署IIS性能包

3、增加数据库成本优化器的SQL优化措施。

四、测试过程截图

负载及数据库伸缩性测试:

C:\Documents and Settings\Administrator\My Documents\My Benchmark Factory Trial\Data

CPU利用率较高,此数据库的扩展性取决于CPU资源而非内存资源。这应该是DLL调用程序无法支持多核计算的原因,如果将Visual Studio新版本重新编译DLL作为目标X64编译器和多核计算特性,则DLL效率会更高。

30个页面的不同用户的并发访问,系统利用率已经居高不下,这与监理机虚拟化环境有关,需要重新在服务器上进行测试。

很慢的SQL语句如下:

当并发降低后,我们可以看到会话直线下降

重做日志文件资源很平均,这说明日志交换效率很高。

INSERT INTO mgmt_bug_adv_home_patch

            (advisory_name, bug_number, host_name, home_location,

             home_location_display, patch_guid, prereq_release, target_guid,

             patch_id, patch_release_id, patch_platform_id, container_guid,

             patch_valid_status)

   SELECT advisories.advisory_name AS advisory_name,

          advisories.bug_number AS bug_number, homes.home_host AS host_name,

          homes.home_directory AS home_location,

          homes.home_name AS home_location_display,

          patches.patch_guid AS patch_guid,

          CASE

             WHEN (   (patches.patch_type = 'Patchset')

                   OR (INSTR (homes.home_version, aru_rel.release_name) <> 1)

                  )

                THEN aru_rel.release_name

             ELSE NULL

          END AS prereq_release,

          homes.host_target_guid AS target_guid, patches.patch_id AS patch_id,

          patches.patch_release_id AS patch_release_id,

          patches.patch_platform_id AS patch_platform_id,

          homes.home_id AS container_guid,

          patches.patch_valid_status AS patch_valid_status

     FROM mgmt_aru_releases aru_rel,

          mgmt_aru_products aru_products,

          mgmt_bug_advisory_bug advisories,

          mgmt$cpf_patch_info patches,

          TABLE (CAST (:b1 AS cpf_home_array)) homes

    WHERE patches.patch_fixes_bug = advisories.bug_number

      AND (   patches.patch_platform_id = 2000

           OR (    homes.home_platform_type = '0'

               AND homes.home_aru_platform = patches.patch_platform_id

              )

           OR (    homes.home_platform_type = '1'

               AND patches.patch_platform_id IN (453, 23)

              )

          )

      AND aru_products.em_target_type = homes.home_target_type

      AND patches.patch_product_id = aru_products.product_id

      AND aru_rel.release_id = patches.patch_release_id

      AND EXISTS (

             SELECT 1

               FROM mgmt_bug_fix_applic_comp_list facl

              WHERE facl.ap_guid = patches.patch_ap_guid

                AND facl.bug_number = patches.patch_fixes_bug

                AND NOT EXISTS (

                       SELECT 1

                         FROM mgmt_aru_oui_components p,

                              mgmt_bug_fix_applicable_comp fac

                        WHERE fac.component_list_guid =

                                                      facl.component_list_guid

                          AND fac.oui_component_release_id = p.component_id

                          AND NOT EXISTS (

                                 SELECT 1

                                   FROM mgmt_inv_component c,

                                        mgmt_inv_versioned_patch patch

                                  WHERE c.container_guid = homes.home_id

                                    AND c.component_guid = patch.component_guid(+)

                                    AND p.component_name = c.NAME

                                    AND p.component_release =

                                           DECODE (patch.VERSION,

                                                   NULL, c.VERSION,

                                                   patch.VERSION

                                                  )

                                    AND ROWNUM = 1)

                          AND ROWNUM = 1)

                AND NOT EXISTS (

                       SELECT 1

                         FROM mgmt_inv_patch ip, mgmt_inv_patch_fixed_bug ibf

                        WHERE ip.container_guid = homes.home_id

                          AND ip.patch_guid = ibf.patch_guid

                          AND ibf.bug_number = facl.bug_number

                          AND ROWNUM = 1)

                AND ROWNUM = 1)

IIS在压力测试达到229个业务同时进行的时候,出现了内存告警。IIS成为了瓶颈,同时IIS已经无法连接到TNS数据库侦听了,数据库无法响应请求。数据库和IIS成为了信息孤岛。因此需要优化 Oracle .NET Provider,并减少连接数。将长连接增加timeout时间断开以释放资源。

100个用户无法通过测试

INSERT INTO H_Lineitem

(l_orderkey,l_partkey,l_suppkey,l_linenumber,l_quantity,l_extendedprice,l_discount,l_tax,l_returnflag,l_linestatus,l_shipdate,l_commitdate,l_receiptdate,l_shipinstruct,l_shipmode,l_comment)

VALUES (:l_orderkey,:l_partkey,:l_suppkey,:l_linenumber,:l_quantity,:l_extendedprice,:l_discount,:l_tax,:l_returnflag,:l_linestatus,TO_DATE(:l_shipdate,'mm/dd/YYYY'),TO_DATE(:l_commitdate...

内存分页文件、磁盘的性能很低下。这是NTFS的问题,SCLM系统小文件的DML操作很多,建议基于NTFS 2008版本或基于Linux系统构建磁盘系统。ORACLE基于LINUX需要作为备选。

select  1-(sum(decode(name, 'physical reads', value,0))/   

(sum(decode(name, 'db block gets', value,0)) +   

(sum(decode(name, 'consistent gets', value,0)))))   

"Read Hit Ratio"    

from  v$sysstat;  

Read Hit Ratio         

----------------------

0.5727084284578206785954506891429477684885

1 rows selected

上一篇: 秒角士网站
下一篇: 咖啡项目

继续阅读