天天看點

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

上一篇: 秒角士網站
下一篇: 咖啡項目

繼續閱讀