一、測試目标
為了保證每次的生産環境均為一個可靠的代碼版本,同時為了有效的節省上線時間,我們基于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