| Windows DNA 應用程序中的數(shù)據(jù)訪問組件進行壓力測試 
 內(nèi)容介紹 介紹Microsoft? Windows? DNA 應用程序的開發(fā)和部署中經(jīng)常被忽略的步驟是對應用程序進行壓力測試,確保當生產(chǎn)環(huán)境中最大數(shù)量的授權(quán)用戶訪問該應用程序時,它將按預期執(zhí)行。本文強調(diào)當涉 及使用 Microsoft Data Access Components (MDAC) 開發(fā)應用程序時壓力測試的重要性,并且提供一些提示使該過程更容易完成。 本文的目的是幫助有經(jīng)驗的開發(fā)人員和 IT 專業(yè)人員設計和實現(xiàn)完整的壓力測試方案,診斷測試結(jié)果,并建議進行某些更改以糾正缺陷。本文假設讀者熟悉 Microsoft Windows NT? Server、Microsoft SQL Server?、Microsoft Internet Information Server (IIS)、Active Server Pages (ASP)、Microsoft ActiveX? 數(shù)據(jù)對象 (ADO) 和 Microsoft Component Services 環(huán)境(或者如果使用的是 Windows NT,為 Microsoft Transaction Server [MTS])等技術(shù)。 應該強調(diào) COM 或 DCOM 組件中業(yè)務邏輯和數(shù)據(jù)訪問過程的正確實現(xiàn),包括 ADO 組件。由于性能和可靠性的原因,這些過程不應該駐留在 Active Server Page 中。如果您關(guān)心應用程序?qū)⑷绾卧趬毫ο逻\行,則您可能已經(jīng)設計了利用這些組件和組件服務環(huán)境益處的應用程序。 本文不嘗試討論由客戶端瀏覽器或帶寬限制引起的壓力問題,而是主要專注于服務器端數(shù)據(jù)訪問組件和它們與 Internet Information Server 的交互。本文也不處理因使用 Remote Data Services (RDS) 所帶來的難題。 為什么要對應用程序進行壓力測試?在生產(chǎn)環(huán)境中部署應用程序之前應該總是先執(zhí)行壓力測試。對支持 Web 的應用程序進行壓力測試的基本目的是達到下列目標: 
 對于要獲得成功的大多數(shù) Web 應用程序,用戶體驗最為關(guān)鍵。然而,使應用程序經(jīng)過壓力測試過程有許多充足的理由,包括: 
 準備運行壓力測試要確定最佳情況下的服務器分析值(也稱為基準),應首先在受控環(huán)境中測試試驗系統(tǒng)配置。其次,應該在模擬生產(chǎn)環(huán)境中測試以確定生產(chǎn)環(huán)境配置如何影響試驗系統(tǒng)的結(jié)果。 在準備開發(fā)循環(huán)的壓力測試階段時,需要注意以下方面: 
 硬件與軟件配置試驗系統(tǒng)應盡可能鏡像生產(chǎn)系統(tǒng)。CPU、RAM 和網(wǎng)絡帶寬的硬件配置是將在壓力測試期間被檢測的最重要方面。應努力復制軟件配置,例如適當?shù)?Microsoft Windows 版本和 Service Pack、MDAC 版本、Internet Information Server 配置和將在實際生產(chǎn)系統(tǒng)中的相同機器上運行的任何其他應用程序。安裝和注冊中間層業(yè)務規(guī)則和數(shù)據(jù)訪問 COM 組件,并按應用程序設計要求對它們進行配置。 務必將測試 Web 站點配置成能夠在進程內(nèi)或進程外運行,具體配置成什么樣以最終配置的要求為準。選擇該選項將確定 Web 應用程序是在 IIS 所在的同一地址空間中運行,還是在它自己的獨立地址空間中運行。該配置對于要執(zhí)行的壓力測試有主要影響。下圖顯示了 Microsoft Windows NT 4.0 和 Microsoft Windows 2000 中進程外應用程序的“壓力屬性”屬性頁配置。在 Windows NT 4.0 中,選擇“在單獨的內(nèi)存空間運行(獨立進程)”復選框以在進程外運行 Web 應用程序。在 Windows 2000 中,選擇“中”或“高”的“應用程序保護”設置以在進程外運行 Web 應用程序。 
 圖 1:Windows NT 4.0“壓力屬性”頁 
 圖 2:Windows 2000“壓力屬性”頁 服務器配置配置 Internet Information Server 以鏡像生產(chǎn)服務器。“Internet 服務管理器”屬性頁為 IIS 提供各種可用的調(diào)整選項。特別重要的是確定是否啟用記錄(可以大大減慢系統(tǒng)速度)并且在“性能”選項卡下,選擇預期的每天點擊數(shù)。 數(shù)據(jù)服務器是可能解決與壓力相關(guān)的多數(shù)問題的地方。為了有效執(zhí)行查詢,必須正確標準化數(shù)據(jù)庫設計。因此,必須用準備與應用程序一起使用的實際數(shù)據(jù)庫 設計進行壓力測試,并且應確保用應用程序?qū)⑸傻淖畲髷?shù)據(jù)量填充表。此外,確保測試數(shù)據(jù)服務器配置選項(最重要的是鎖定級別和隔離級別以及使用的優(yōu)化技 術(shù),例如表索引)匹配生產(chǎn)數(shù)據(jù)服務器的配置選項。 安全配置應用程序的安全方案對壓力下的應用程序會有嚴重的性能影響,特別是系統(tǒng)包含加密技術(shù)(如 Microsoft Cryptography API)時更是如此。因此,應該配置測試系統(tǒng)以使用相同的安全方案,但不必使用相同的憑據(jù)。Microsoft Windows NT LAN Manager (NTLM) 傳遞身份驗證系統(tǒng)可能是訪問后端數(shù)據(jù)存儲區(qū)的 Intranet 應用程序的最通用安全協(xié)議。如果可能的話,應該考慮使用組件服務(或 Windows NT 中的 MTS)中的角色,以簡化安全身份驗證過程并提高效率,以及提高性能和穩(wěn)定性。 用戶負載配置首先確定預期訪問應用程序的最大用戶數(shù),然后將該數(shù)字加倍;成功的應用程序所服務的用戶數(shù)最可能比預期的多。此外,計算多數(shù)用戶需要訪問的時間,然 后確定那段時間(應該是測試應用程序的時間)內(nèi)的網(wǎng)絡負載。該策略使您能夠測試用戶負載影響以及系統(tǒng)范圍的硬件配置,確保應用程序在網(wǎng)絡負載高峰期內(nèi)按預 期響應。 選擇正確的壓力工具在實際的數(shù)據(jù)中心情況中,由于太多用戶通過 Intranet 或 Internet 連接到 Web 應用程序,Web 服務器經(jīng)歷高連接水平。Web 壓力工具應能夠模擬發(fā)生高并發(fā)連接數(shù)的情形,并以充足的線程滿足最大的并發(fā)連接數(shù),同時減小發(fā)送到 Web 服務器的數(shù)據(jù)包大小。幸運地是,有許多可用的工具被設計來模擬這些實際情況。Microsoft 的 Web 應用程序壓力工具就是這些工具中的一個,當前可從在 http://homer.rte.microsoft.com 處的 Microsoft 免費獲得它。它提供所有必要的功能和一些好的附加功能,例如廣泛的報告功能。 Web 應用程序壓力工具Web 應用程序壓力工具通過實際模擬從 Web 應用程序請求頁的多個瀏覽器來激活測試環(huán)境,并允許通過從瀏覽器訪問想要包括到測試中的頁來記錄腳本。然后,該腳本可以在安裝有該應用程序的任何 Windows NT 或 Windows 2000 客戶端上保存和運行。因為 Web 應用程序壓力工具能夠模擬來自每個單獨工作站的多個客戶端,所以具有的可用客戶端計算機不必與生產(chǎn)應用程序具有的一樣多。 
 性能監(jiān)視器為了有效地對數(shù)據(jù)訪問組件進行壓力測試并正確地診斷結(jié)果,使用監(jiān)視和記錄運行統(tǒng)計的方法極為重要。性能監(jiān)視器是隨 Microsoft Windows NT 和 Microsoft Windows 2000 一起提供的工具,它是適用于在 Internet Information Server 中和數(shù)據(jù)服務器上監(jiān)視和記錄這些統(tǒng)計的最好工具。 其他工具除了在 Internet Information Server 上使用性能監(jiān)視器外,還有必要監(jiān)視數(shù)據(jù)服務器上的某些自定義計數(shù)器。大多數(shù)高性能數(shù)據(jù)服務器應用程序,例如 Microsoft SQL Server、Oracle 和 Microsoft Exchange Server,都包括自定義性能監(jiān)視器計數(shù)器,可用于測定應用程序和其運行在的硬件的健康情況。 運行壓力測試認真地擬定了測試策略后,實際運行測試是容易的。性能測試的第一個任務是使用工具,例如 Microsoft Web 應用程序壓力工具,將壓力施加到 Web 站點并測量 Web 服務器每秒能處理的最大請求數(shù)。這是定量測量。第二個任務是確定哪一個資源阻止每秒請求數(shù)的提高,例如 CPU、內(nèi)存或后端相關(guān)性,這個過程更具有藝術(shù)性,而不單是一種精確測量的技術(shù)。 首先,選擇打算運行的 ASP 頁。(尋找 Web 站點的最慢頁并使用這些頁。)具體的選擇取決于哪些頁最頻繁訪問數(shù)據(jù)庫并且具有最多或最復雜的查詢。該選擇非常重要:包括比必需的更多的頁比遺漏一些關(guān)鍵 代碼路徑要好。如果適當?shù)脑?,還可考慮讓測試應用程序按指定的順序訪問一系列頁,并像應用程序?qū)⒃谡鎸嵡闆r中所做的那樣,將 cookie 或查詢字符串傳遞到每一頁。 
 當在 Internet Information Server 中運行應用程序時,應該(使用性能監(jiān)視器)監(jiān)視以下計數(shù)器: 
 
 如下圖所示,性能監(jiān)視器中的 Active Server Pages 每秒請求數(shù)計數(shù)器將顯示應用程序的實際吞吐量(此例中每秒的請求數(shù)為 1.000)。該統(tǒng)計使您能夠診斷壓力下的 Internet Information Server 性能,并查明潛在的瓶頸。這反過來使您得以判斷應用程序以可接受的響應時間服務數(shù)量最多的用戶的能力。 
 圖 3:性能監(jiān)視器 運行 ASP 技術(shù)的 Web 服務器從啟動時建立的池中給每頁分配一個線程;如果所有線程都已使用,后面的頁請求將被放置在隊列中。通過用性能監(jiān)視器監(jiān)視總的隊列長度,可以確定有多少客戶端正在等待服務器的響應。 兩個最常見的與壓力有關(guān)的非硬件數(shù)據(jù)庫問題是死鎖和鎖定并發(fā)。在數(shù)據(jù)服務器上,使用數(shù)據(jù)存儲區(qū)將提供的自定義性能監(jiān)視器計數(shù)器時,應該至少監(jiān)視下列內(nèi)容: 
 Web 應用程序也應配置成利用 OLE DB 資源池,該資源池由 Microsoft SQL Server 7.0 的中間層 OLE DB 提供程序自動管理。通過基于每頁創(chuàng)建連接對象并立即釋放它們,數(shù)據(jù)庫可以處理數(shù)千個并發(fā)用戶,而使用的開放式數(shù)據(jù)庫連接數(shù)少得多。這可保留數(shù)據(jù)庫資源并提 供更大的可縮放性。應通過跟蹤數(shù)據(jù)服務器上的用戶連接數(shù)(使用性能監(jiān)視器)監(jiān)視此性能增強。隨著吞吐量增加,當池控制數(shù)據(jù)服務器上實際創(chuàng)建的連接數(shù)時,用 戶連接數(shù)應保持穩(wěn)定。 針對數(shù)據(jù)庫調(diào)節(jié)應用程序的過程對實現(xiàn)性能目標至關(guān)重要,并且必須作為因素計入開發(fā)循環(huán)。這應包括優(yōu)化分配內(nèi)存的大小、應用程序在磁盤驅(qū)動器和控制器上的分布以及 ActiveX 組件的計算機位置。要特別考慮盡可能消除進程間的數(shù)據(jù)封送處理,因為這是非常昂貴的操作。 運行壓力測試的時間應比應用程序在實際用戶環(huán)境中不中斷運行的預計時間長百分之五十。許多問題,尤其是內(nèi)存泄漏,只有在應用程序運行時間超過預期時間后才會暴露出來。 壓力測試期間查找的內(nèi)容每個性能監(jiān)視器計數(shù)器的平均值取決于特定的應用程序和硬件配置。因此,當壓力測試運行時,應該檢查每個計數(shù)器中是否有任何偏離這些平均值的異常偏差。 監(jiān)視 Internet Information Server當查找瓶頸時,在 Internet Information Server 計算機上監(jiān)視的最重要方面如下: 
 根據(jù)設計的應用程序環(huán)境,在壓力測試期間可能還有其他要跟蹤的性能方面。下列任何可能的情況可能表明應用程序有問題,在最終發(fā)布前應修復這些問題。 CPU 使用率 CPU 使用率的減少可能表明應用程序性能的降低,可能是線程爭用問題。 當監(jiān)視用戶時間和內(nèi)核時間之間的 CPU 時間比時,記住作為規(guī)則,用戶時間應是 CPU 總時間的百分之八十至九十。因此,超過百分之二十的內(nèi)核模式時間表明有內(nèi)核級別 API 調(diào)用爭用。 為了使計算機物有所值,應該在峰值負載期間注冊超過百分之五十的處理器使用率。更低的使用率值可能提示您需要解決系統(tǒng)中的其他瓶頸。 內(nèi)存使用 內(nèi)存使用暴漲或逐步增加是另外一個問題,這個問題經(jīng)常被認為是長期運行的服務器應用程序的常見問題。通常,這是內(nèi)存和資源泄漏在測試階段暴露出來的地方。 吞吐量 監(jiān)視 Active Server Pages 每秒請求數(shù)計數(shù)器使您得以確定應用程序開始什么時候以及是否有性能問題。該計數(shù)器在實際的應用程序中通常有所不同,但是通過認真地設置線程數(shù)和并發(fā)連接數(shù) (例如,通過 Web 應用程序壓力工具配置屏幕進行設置),將能夠模擬穩(wěn)定的請求數(shù)。該計數(shù)器值的突然減少預示著麻煩。 可選測試方面 下面的是壓力測試期間可能發(fā)現(xiàn)值得監(jiān)視的其他方面的示例: 
 監(jiān)視數(shù)據(jù)服務器內(nèi)部處理數(shù)據(jù)服務器的各種 MDAC 服務和格式化用于顯示的數(shù)據(jù)通常會消耗專用于 Web 應用程序的大多數(shù)可用服務器資源。因此,當對應用程序進行壓力測試時,如果與應用程序的數(shù)據(jù)訪問和數(shù)據(jù)操作區(qū)域有關(guān),則必須特別考慮這些組件的性能。 數(shù)據(jù)庫用戶連接、鎖爭用和死鎖是數(shù)據(jù)服務器上要監(jiān)視的主要對象。定期查看數(shù)據(jù)庫的管理控制臺中的進程信息(例如,在運行 SQL Server 的計算機上,是在 SQL 企業(yè)管理器的 Current Activity 區(qū)域中)。檢查阻塞的服務器進程 ID,它是不返回響應的數(shù)據(jù)查詢的常見原因。這是個爭用問題,并且通常要求對數(shù)據(jù)庫設計或應用程序邏輯進行重大更改。 可以用不同的方法識別死鎖。識別死鎖的最常用的方法是使用性能監(jiān)視器中的 Number of Deadlocks/sec 自定義計數(shù)器。應用程序應該已經(jīng)檢查死鎖問題并適當響應,因為允許數(shù)據(jù)服務器指定死鎖受害人(即,將被取消以解決死鎖的用戶或會話)會引起應用程序問題。 應用程序應在遇到死鎖時檢測死鎖情況,并相應響應。遇到死鎖時一般做法是等待幾毫秒,然后再重試操作;通常,死鎖僅是對時間敏感的錯誤,當重試操作時該錯 誤將會消失。 計算壓力測試結(jié)果當完成壓力測試并且測試結(jié)果可用于檢查時,目標性能基準與測試期間收集的統(tǒng)計的比較將指出所需要的更改,以確保用戶將需要的吞吐量。以下是需要進行性能改正應檢查和計算的特定方面: 
 硬件也許增加應用程序吞吐量最簡單和最經(jīng)濟的解決方案是硬件升級。通常,升級硬件比付錢給開發(fā)人員團隊重寫部分應用程序要經(jīng)濟高效得多。例如,只是通過 將更多的 RAM 添加到服務器,您可以使應用程序的吞吐量加倍。然而,如果測試結(jié)果表明 CPU 使用率是瓶頸,則升級可能更貴,因為可能必須升級整個計算機來增加 CPU 的使用數(shù)量與速度。 其他與硬件有關(guān)的增強包括增加硬盤和控制器的速度以及添加更快或附加的網(wǎng)絡接口卡。 數(shù)據(jù)庫設計當計算有關(guān)數(shù)據(jù)庫設計的問題時,請尋找作用點。分析死鎖統(tǒng)計,并確認已經(jīng)優(yōu)化了應用程序以盡可能避免死鎖。如果有必要,請考慮更改數(shù)據(jù)訪問算法以避免爭用。用不同的索引解決方案進行實驗。檢查數(shù)據(jù)服務器的查詢執(zhí)行計劃以確認查詢正在使用適當?shù)乃饕鹊取? ActiveX 組件應認真分析包含對 ActiveX 數(shù)據(jù)對象類型庫的引用的 ActiveX 組件以進行可能的優(yōu)化。不要使用 ADO 中允許的默認屬性。為避免意外使用默認屬性,應總是指定某些屬性,例如,Cursor Type 和 Cursor Location 屬性。 客戶端游標如果 Web 應用程序消耗了異乎尋常的大量內(nèi)存,則游標定位的不適當使用可能就是問題的原因。當使用客戶端游標 (recordset.cursorlocation = adUseClient) 時,注意客戶端實際是 Internet Information Server,而不是瀏覽器。(該規(guī)則的例外情況是當使用 Remote Data Services 時,本文不對此進行討論。)開發(fā)人員常犯的錯誤是假定客戶端游標的使用將整個記錄集移動到瀏覽器而不是運行 IIS 的計算機。因此,記住您實際正在將記錄集存儲到運行 IIS 的計算機上將使您更多地意識到所用的資源。 例如,如果應用程序要求訪問列出有效州或縣代碼的表并且該信息存儲在數(shù)據(jù)服務器中,則使用客戶端游標創(chuàng)建駐留在 IIS 計算機上的記錄集,然后本地訪問該代碼將更有效,這樣避免了當應用程序訪問該信息時需要另外往返于數(shù)據(jù)服務器。一定要注意利弊關(guān)系,如果內(nèi)存不可用,則不 要以大內(nèi)存要求加重 IIS 的負載。 ASP 執(zhí)行如果包含數(shù)據(jù)訪問過程的 ASP 頁花費太長時間執(zhí)行,則可能需要將數(shù)據(jù)訪問代碼從 ASP 頁移動到 ActiveX 組件,該組件一般放置在 Microsoft Transaction Server(在 Windows NT 中)的包中或 Component Services(在 Windows 2000 中)的包中,這取決于正在運行的操作系統(tǒng)。該編輯代碼運行效率比包含在 Active Server Page 中的解釋腳本代碼有效得多。 Internet Information Server 負載監(jiān)視正使用 Internet Information Server 的應用程序數(shù)量和類型??赡苄枰砑痈郊拥姆掌?,將應用程序移動到另一服務器,或者考慮實現(xiàn) Windows Load Balancing Service。 成功運行壓力測試的提示
 結(jié)束摘要Internet 使您的應用程序可以比傳統(tǒng)的客戶端-服務器應用程序面向更多的潛在用戶。隨著越來越多的組織將 Web 作為他們業(yè)務策略的策略部分,他們需要確保他們選擇的技術(shù)可以處理他們苛求的需要。除了容易使用的工具,這些組織還需要基礎(chǔ)結(jié)構(gòu)來滿足他們用戶負載要求。 因此,壓力測試是測試體系的基礎(chǔ)部分這個理念比以前更重要,特別是當將 MDAC 合并到應用程序中時。 
 負載下的壓力測試和反復調(diào)節(jié)應用程序的好處是簡單明了: 
 | 
|  |