⑴ 軟體開發資料庫如何進行測試
ZDNet至頂網軟體頻道 在應用系統的測試中,把資料庫應當作為獨立的系統來測試,這無疑會為應用軟體的質量增加可靠的保障,同時還必須結合應用軟體進行集成測試,只有二者有機結合起來,才能最大限度的發揮資料庫和應用軟體的功能。根據以往軟體測試經驗,對資料庫測試的內容和方法,進行了詳細的分析,闡明了資料庫測試在軟體開發中的重要性。1、引言資料庫系統的開發在應用軟體開發中所佔的比重越來越大,隨之而來的問題也越來越突出。比如:數據冗餘,功能和性能方面存在的問題已經嚴重影響應用軟體的使用。軟體測試人員往往重視對軟體功能和編碼的測試,而忽略對軟體性能,特別是資料庫訪問並發測試。因為,他們固有的思想中認為資料庫設計存在問題對系統性能影響不大,或從根本上忽略了資料庫在軟體開發中的地位,直到出現了問題,才想到對資料庫的測試,但往往也是僅僅通過對編碼的測試工作中捎帶對資料庫進行一定的測試,這遠遠是不夠的。目前,中鐵網上訂票系統在大用戶同時在線訂票中系統頻頻癱瘓,就是最好的佐證。所以,在應用軟體的測試工作中,應該將資料庫作為一個獨立的部分進行充分的測試,這樣才可以得到應用軟體所需要的性能優化的資料庫。那麼,應該對哪些內容進行測試,如何進行測試呢?2、資料庫設計的測試資料庫是應用的基礎,其性能直接影響應用軟體的性能。為了使資料庫具有較好的性能,需要對資料庫中的表進行規范化設計。規范化的範式可分為第一範式、第二範式、第三範式、BCNF範式、第四範式和第五範式。一般來說,邏輯資料庫設計應滿足第三範式的要求,這是因為滿足第三範式的表結構容易維護,且基本滿足實際應用的要求。因此,實際應用中一般都按照第三範式的標准進行規范化。但是,規范化也有缺點:由於將一個表拆分成為多個表,在查詢時需要多表連接,降低了查詢速度。故資料庫設計的測試包括前期需求分析產生資料庫邏輯模型和後期業務系統開發中的測試兩部分(這里指的是後者),我在這里稱為實體測試。資料庫是由若乾的實體組成的,包括(表,視圖,存儲過程等),資料庫最基本的測試就是實體測試,通過對這些實體的測試,可以發現資料庫實體設計得是否充分,是否有遺漏,每個實體的內容是否全面,擴展性如何。實體測試,可以用來發現應用軟體在功能上存在的不足,也可以發現數據冗餘的問題。經過測試,測試人員對有異議的問題要及時和資料庫的設計人員進行溝通解決。3、數據一致性測試在進行實體測試後,應進一步檢查下面的內容以保障數據的一致性:3.1 表的主鍵測試根據應用系統的實際需求,對每個表的主鍵進行測試,驗證是否存在記錄不唯一的情況,如果有,則要重新設置主鍵,使表中記錄唯一。3.2 表之間主外鍵關系的測試資料庫中主外鍵欄位在名稱,數據類型,欄位長度上的一致性測試。3.3 級聯表,刪除主表數據後,相應從報表數據應同時刪除的問題例如學生表和學生成績表,學生數據已經刪除,成績表中相應學生的成績記錄應同時刪除。3.4 存儲過程和觸發器的測試存儲過程可以人工執行,但觸發器不能人工處理,所以在對存儲過程和觸發器執行的過程中針對SQL SERVER2005及以上版本可以使用Microsoft SQL Server Profiler性能測試工具進行測試。Microsoft SQL Server Profiler 是 SQL 跟蹤的圖形用戶界面,用於監視資料庫引擎或 Analysis Services 的實例。測試人員可以捕獲有關每個事件的數據並將其保存到文件或表中供以後分析。例如:可以對生產環境進行監視,了解哪些存儲過程由於執行速度太慢影響了性能。4、資料庫的容量測試隨著資料庫系統的使用,數據量在飛速增長,如何在使用前對數據容量的增長情況進行初步估算,為最終用戶提供參考,這在資料庫使用和維護過程中,是非常重要的。可以通過對資料庫設計中基本表的數據大小,和每天數據表的數據產生量進行初步估算。記錄數據量=各個欄位所佔位元組數的總和表的數據量=記錄數據量*記錄數資料庫大小=各表數據量的總和當然,資料庫的大小不僅僅只是基本表的大小,還有系統表,視圖,存儲過程等其它實體所佔的容量,但最基本的數據是表的數據。另外,資料庫的容量還包括資料庫日誌文件的容量,一般應預留資料庫文件的2倍左右。5、資料庫的性能測試應用軟體除了功能外,很重要的一部分就是軟體的性能,而對於資料庫系統,資料庫性能的好壞會直接影響應用軟體的性能,這部分的測試,一般手工測試就顯得無能為力了,這時就要藉助自動化的測試軟體,例如:DataFactory,DataFactory是一種強大的數據產生器,它允許開發人員和測試人員很容易產生百萬行有意義的正確的測試資料庫,該工具支持DB2、Oracle、Sybase、SQL Server資料庫。這樣,就可以模擬出應用軟體長期使用後,海量數據存儲的資料庫的性能狀況。從而盡早發現問題,進行資料庫性能的優化。這里要注意,進行性能測試的時候,一定要注意測試環境的一致性,包括:操作系統、應用軟體的版本以及硬體的配置等,而且在進行資料庫方面的測試的時候一定要注意資料庫的記錄數、配置等要一致,只有在相同條件下進行測試,才可以對結果進行比較。否則無法和用戶對軟體的性能的觀點達成一致。6、資料庫的壓力測試說起測試,我們首先想到的就是軟體正確性的測試,即常說的功能測試。軟體功能正確僅是軟體質量合格指標之一。在實際開發中,還有其它的非功能因素也起著決定性的因素,例如軟體的響應速度。影響軟體響應速度的因素有很多,有些是因為演算法不夠高效;還有些可能受用戶並發數的影響。在眾多類型的軟體測試中,壓力測試正是以軟體響應速度為測試目標,尤其是針對在較短時間內大量並發用戶的訪問時,軟體的抗壓能力。但壓力測試往往是手工難以測試的,必須藉助自動化測試工具。常用的壓力測試有:Web測試、資料庫測試等。資料庫在大多數軟體項目中是不可缺少的,對於它進行壓力測試是為了找出資料庫對象是否可以有效地承受來自多個用戶的並發訪問。這些對象主要是:索引、觸發器、存儲過程和鎖。通過對SQL語句和存儲過程的測試,自動化的壓力測試工具可以間接的反應資料庫對象是否需要優化。這些自動化的測試工具很多,各有特點,基於Java的項目可以使用JMeter,.Net項目可以採用.Net集成開發環境中提供的測試方案。7、結束語總之,在應用系統的測試中,把資料庫應當作為獨立的系統來測試,這無疑會為應用軟體的質量增加可靠的保障,同時還必須結合應用軟體進行集成測試,只有二者有機結合起來,才能最大限度的發揮資料庫和應用軟體的功能。
⑵ 如何使用swingbench進行oracle資料庫壓力測試
1、首先使用VMVARE10搭建一個redhat6.5的虛擬機。
2、在虛擬redhat6.5上安裝ORACLE11G的資料庫。
3、使用oewizard導入測試數據,可以根據向導提示進行數據導入。
4、使用swingbench進行壓力測試。
測試步驟:
1、導數據之前需要修改temp表空間大小,使其能夠容納下相應的導入數據
create temporarytablespace temp tempfile '/home/oracle/oradata/orcl/temp.dbf' size 1g;
alter databasedefault temporary tablespace temp;
2、 安裝swingbench測試軟體,直接解壓縮即可運行。
unzip -x swingbench25919.zip
3、進入swingbench/bin目錄執行oewizard導入1G測試數據,並修改資料庫連接名和DBA密碼
.jpg
輸入導入數據文件存放位置:
.jpg
選擇導入1G數據:
.jpg
數據導完之後在該目錄下運行swingbench執行測試,修改資料庫連接名,用戶連接數設置為300,測試時間設置為10分鍾
.jpg
修改Distributed Controls用於測試過程中搜集測試監控信息,修改完之後測試連接是否正常, 並可以統計主機的cpu disk IO 信息
.jpg
還可以 拉出AWR報表
wKioL1Qx3O2gzw45AADH_p4CEeQ979.jpg
設置 insert,update ,select的比例
.jpg
設置完成之後,點擊左上角綠色按鈕執行測試
wKiom1Qx24zgsNQ-AAEJ51YcKSs614.jpg
.jpg
測試結果可保持為XML文檔,
⑶ 衡量資料庫性能的重要指標
具體來說,本文包括以下內容:
事務
查詢性能
用戶和查詢沖突
容量
配置
NoSQL 資料庫
- 圖1-基於基線評估當前事務響應時間
事務
事務可以觀察真實用戶的行為:能夠在應用交互時捕獲實時性能。眾所周知,測量事務的性能包括獲取整個事務的響應時間和組成事務的各個部分的響應時間。通常我們可以用這些響應時間與滿足事務需求的基線對比,來確定當前事務是否處於正常狀態。
如果你只想衡量應用的某個方面,那麼可以評估事務的行為。所以,盡管容器指標能夠提供更豐富的信息,並且幫助你決定何時對當前環境進行自動測量,但你的事務就足以確定應用性能。無需向應用程序伺服器獲取 CPU 的使用情況,你更應該關心用戶是否完成了事務,以及該事務是否得到了優化。
補充一個小知識點,事務是由入口點決定的,通過該入口點可以啟動事務與應用進行交互。
一旦定義了事務,會在整個應用生態系統中對其性能進行測量,並將每個事務與基線進行比對。例如,我們可能會決定當事務的響應時間與基線相比,一旦慢於平均響應時間的兩個標准差是否就應該判定為異常,如圖1所示。
用於評估事務的基線與正在進行的事務活動在時間上是一致的,但事務會由每個事務執行來完善。例如,當你選定一個基線,在當前事務結束之後,將事務與平均響應時間按每天的小時數和每周的天數進行對比,所有在那段時間內執行的事務都將會被納入下周的基線中。通過這種機制,應用程序可以隨時間而變化,而無需每次都重建原始基線;你可以將其看作是一個隨時間移動的窗口。
總之,事務最能反映用戶體驗的測量方法,所以也是衡量性能狀況最重要的指標。
查詢性能
最容易檢測到查詢性能是否正常的指標就是查詢本身。由查詢引起的問題可能會導致時間太長而無法識別所需數據或返回數據。所以不妨在查詢中排查以下問題。
1. 選擇過多冗餘數據
編寫查詢語句來返回適當的數據是遠遠不夠的,很可能你的查詢語句會返回太多列,從而導致選擇行和檢索數據變得異常緩慢。所以,最好是列出所需的列,而不是直接用 SELECT*。當需要在特定欄位中查詢時,該計劃可能會確定一個覆蓋索引從而加快結果返回。覆蓋索引通常會包含查詢中使用的所有欄位。這意味著資料庫可以僅從索引中產生結果,而不需要通過底層表來構建。
另外,列出結果中所需的列不僅可以減少傳輸的數據,還能進一步提高性能。
2. 表之間的低效聯接
聯接會導致資料庫將多組數據帶到內存中進行比較,這會產生多個資料庫讀取和大量 CPU。根據表的索引,聯接還可能需要掃描兩個表的所有行。如果寫不好兩個大型表之間的聯接,就需要對每個表進行完整掃描,這樣的計算量將會非常大。其他會拖慢聯接的因素包括聯接列之間存在不同的數據類型、需要轉換或加入包含 LIKE 的條件,這樣就會阻止使用索引。另外,還需注意避免使用全外聯接;在恰當的時候使用內部聯接只返回所需數據。
3. 索引過多或過少
如果查詢優化沒有可用的索引時,資料庫會重新掃描表來產生查詢結果,這個過程會生成大量的磁碟輸入/輸出(I/O)。適當的索引可以減少排序結果的需要。雖然非唯一值的索引在生成結果時,不能像唯一索引那樣方便。如果鍵越大,索引也會變大,並通過它們創建更多的磁碟 I/O。大多數索引是為了提高數據檢索的性能,但也需要明白索引本身也會影響數據的插入和更新,因為所有相關聯的指標都必須更新。
4. 太多的SQL導致爭用解析資源
任何 SQL 查詢在執行之前都必須被解析,在生成執行計劃之前需要對語法和許可權進行檢查。由於解析非常耗時,資料庫會保存已解析的 SQL 來重復利用,從而減少解析的耗時。因為 WHERE 語句不同,所以使用文本值的查詢語句不能被共享。這將導致每個查詢都會被解析並添加到共享池中,由於池的空間有限,一些已保存的查詢會被舍棄。當這些查詢再次出現時,則需要重新解析。
用戶和查詢沖突
資料庫支持多用戶,但多用戶活動也可能造成沖突。
1. 由慢查詢導致的頁/行鎖定
為了確保查詢產生精確的結果,資料庫必須鎖定表以防止在運行讀取查詢時再發生其他的插入和更新行為。如果報告或查詢相當緩慢,需要修改值的用戶可能需要等待至更新完成。鎖提示能幫助資料庫使用最小破壞性的鎖。從事務資料庫中分離報表也是一種可靠的解決方法。
2. 事務鎖和死鎖
當兩個事務被阻塞時會出現死鎖,因為每一個都需要使用被另一個佔用的資源。當出現一個普通鎖時,事務會被阻塞直到資源被釋放。但卻沒有解決死鎖的方案。資料庫會監控死鎖並選擇終止其中一個事務,釋放資源並允許該事務繼續進行,而另一個事務則回滾。
3. 批處理操作造成資源爭奪
批處理過程通常會執行批量操作,如大量的數據載入或生成復雜的分析報告。這些操作是資源密集型的,但可能影響在線用戶的訪問應用的性能。針對此問題最好的解決辦法是確保批處理在系統使用率較低時運行,比如晚上,或用單獨的資料庫進行事務處理和分析報告。
容量
並不是所有的資料庫性能問題都是資料庫問題。有些問題也是硬體不合適造成的。
1. CPU 不足或 CPU 速度太慢
更多 CPU 可以分擔伺服器負載,進一步提高性能。資料庫的性能不僅是資料庫的原因,還受到伺服器上運行其他進程的影響。因此,對資料庫負載及使用進行審查也是必不可少的。由於 CPU 的利用率時時在變,在低使用率、平均使用率和峰值使用率的時間段分別檢查該指標可以更好地評估增加額外的 CPU 資源是否有益。
2. IOPS 不足的慢磁碟
磁碟性能通常以每秒輸入/輸出操作(IOPS)來計。結合 I/O 大小,該指標可以衡量每秒的磁碟吞吐量是多少兆。同時,吞吐量也受磁碟的延遲影響,比如需要多久才能完成請求,這些指標主要是針對磁碟存儲技術而言。傳統的硬碟驅動器(HDD)有一個旋轉磁碟,通常比固態硬碟(SSD)或快閃記憶體更慢。直到近期,SSD 雖然仍比 HDD 貴,但成本已經降了下來,所以在市場上也更具競爭力。
3. 全部或錯誤配置的磁碟
眾所周知,資料庫會被大量磁碟訪問,所以不正確配置的磁碟可能帶來嚴重的性能缺陷。磁碟應該適當分區,將系統數據目錄和用戶數據日誌分開。高度活躍的表應該區分以避免爭用,通過在不同磁碟上存放資料庫和索引增加並行放置,但不要將操作系統和資料庫交換空間放置在同一磁碟上。
4. 內存不足
有限或不恰當的物理內存分配會影響資料庫性能。通常我們認為可用的內存更多,性能就越好。監控分頁和交換,在多個非繁忙磁碟中建立多頁面空間,進一步確保分頁空間分配足夠滿足資料庫要求;每個資料庫供應商也可以在這個問題上提供指導。
5. 網速慢
網路速度會影響到如何快速檢索數據並返回給終端用戶或調用過程。使用寬頻連接到遠程資料庫。在某些情況下,選擇 TCP/IP 協議而不是命名管道可顯著提高資料庫性能。
配置
每個資料庫都需設置大量的配置項。通常情況下,默認值可能不足以滿足資料庫所需的性能。所以,檢查所有的參數設置,包括以下問題。
1. 緩沖區緩存太小
通過將數據存儲在內核內存,緩沖區緩存可以進一步提高性能同時減少磁碟 I/O。當緩存太小時,緩存中的數據會更頻繁地刷新。如果它再次被請求,就必須從磁碟重讀。除了磁碟讀取緩慢之外,還給 I/O 設備增添了負擔從而成為瓶頸。除了給緩沖區緩存分配足夠的空間,調優 SQL 查詢可以幫助其更有效地利用緩沖區緩存。
2. 沒有查詢緩存
查詢緩存會存儲資料庫查詢和結果集。當執行相同的查詢時,數據會在緩存中被迅速檢索,而不需要再次執行查詢。數據會更新失效結果,所以查詢緩存是唯一有效的靜態數據。但在某些情況下,查詢緩存卻可能成為性能瓶頸。比如當鎖定為更新時,巨大的緩存可能導致爭用沖突。
3. 磁碟上臨時表創建導致的 I/O 爭用
在執行特定的查詢操作時,資料庫需要創建臨時表,如執行一個 GROUP BY 子句。如果可能,在內存中創建臨時表。但是,在某些情況下,在內存中創建臨時表並不可行,比如當數據包含 BLOB 或 TEXT 對象時。在這些情況下,會在磁碟上創建臨時表。大量的磁碟 I / O 都需要創建臨時表、填充記錄、從表中選擇所需數據並在查詢完成後舍棄。為了避免影響性能,臨時資料庫應該從主資料庫中分離出來。重寫查詢還可以通過創建派生表來減少對臨時表的需求。使用派生表直接從另一個 SELECT 語句的結果中選擇,允許將數據加到內存中而不是當前磁碟上。
NoSQL 資料庫
NoSQL 的優勢在於它處理大數據的能力非常迅速。但是在實際使用中,也應該綜合參考 NoSQL 的缺點,從而決定是否適合你的用例場景。這就是為什麼NoSQL通常被理解為 「不僅僅是 SQL」,說明了 NoSQL 並不總是正確的解決方案,也沒必要完全取代 SQL,以下分別列舉出五大主要原因。
1. 挑剔事務
難以保持 NoSQL 條目的一致性。當訪問結構化數據時,它並不能完全確保同一時間對不同表的更改都生效。如果某個過程發生崩潰,表可能會不一致。一致事務的典型代表是復式記賬法。相應的信貸必須平衡每個借方,反之亦然。如果雙方數據不一致則不能輸入。NoSQL 則可能無法保證「收支平衡」。
2. 復雜資料庫
NoSQL 的支持者往往以高效代碼、簡單性和 NoSQL 的速度為傲。當資料庫任務很簡單時,所有這些因素都是優勢。但當資料庫變得復雜,NoSQL 會開始分解。此時,SQL 則比 NoSQL 更好地處理復雜需求,因為 SQL 已經成熟,有符合行業標準的介面。而每個 NoSQL 設置都有一個唯一的介面。
3. 一致聯接
當執行 SQL 的聯接時,由於系統必須從不同的表中提取數據進行鍵對齊,所以有一個巨大的開銷。而 NoSQL 似乎是一個空想,因為缺乏聯接功能。所有的數據都在同一個表的一個地方。當檢索數據時,它會同時提取所有的鍵值對。問題在於這會創建同一數據的多個副本。這些副本也必須更新,而這種情況下,NoSQL 沒有功能來確保更新。
4. Schema設計的靈活性
由於 NoSQL 不需要 schema,所以在某些情況下也是獨一無二的。在以前的資料庫模型中,程序員必須考慮所有需要的列能夠擴展,能夠適應每行的數據條目。在 NoSQL 下,條目可以有多種字元串或者完全沒有。這種靈活性允許程序員迅速增加數據。但是,也可能存在問題,比如當有多個團體在同一項目上工作時,或者新的開發團隊接手一個項目時。開發人員能夠自由地修改資料庫,也可能會不斷實現各種各樣的密鑰對。
5. 資源密集型
NoSQL 資料庫通常比關系資料庫更加資源密集。他們需要更多的 CPU 儲備和 RAM 分配。出於這個原因,大多數共享主機公司都不提供 NoSQL。你必須注冊一個 VPS 或運行自己的專用伺服器。另一方面,SQL 主要是在伺服器上運行。初期的工作都很順利,但隨著資料庫需求的增加,硬體必須擴大。單個大型伺服器比多個小型伺服器昂貴得多,價格呈指數增長。所以在這種企業計算場景下,使用 NoSQL 更為劃算,例如那些由谷歌和 Facebook 使用的伺服器。
⑷ 資料庫性能優化基準測試的度量指標有哪些
當前業界常見的伺服器性能指標有:
TPC-C
TPC-E
TPC-H
SPECjbb2005
SPECjEnterprise2010
SPECint2006 及 SPECint_rate_2006
SPECfp2006 及 SPECfp_rate_2006
SAP SD 2-Tier
LINPACK
RPE2
一、TPC (Transaction Processing Performance Council) 即聯機交易處理性能協會, 成立於1988年的非盈利組織,各主要軟硬體供應商均參與,成立目標: 為業界提供可信的資料庫及交易處理基準測試結果,當前發 布主要基準測試為:
TPC-C : 資料庫在線查詢(OLTP)交易性能
TPC-E : 資料庫在線查詢(OLTP)交易性能
TPC-H : 商業智能 / 數據倉庫 / 在線分析(OLAP)交易性能
1.TPC-C測試內容:資料庫事務處理測試, 模擬一個批發商的訂單管理系統。實際衡量伺服器及資料庫軟體處理在線查詢交易處理(OLTP)的性能表現. 正規 TPC-C 測試結果發布必須提供 tpmC值, 即每分鍾完成多少筆 TPC-C 資料庫交易 (TPC-C Transaction Per Minute), 同時要提供性價比$/tpmC。如果把 TPC-C 測試結果寫成為 tpm, TPM, TPMC, TPCC 均不屬正規。
2.TPC-E測試內容:資料庫事務處理測試,模擬一個證券交易系統。與TPC-C一樣,實際衡量伺服器及資料庫軟體處理在線查詢交易處理(OLTP)的性能表現。正規TPC-E測試結果必須提供tpsE值,即每秒鍾完成多少筆TPC-E資料庫交易(transaction per second),同時提供$/tpsE。測試結果寫成其他形式均不屬正規。
對比:TPC-E測試較TPC-C測試,在測試模型搭建上增加了應用伺服器層,同時增加了資料庫結構的復雜性,測試成本相對降低。截止目前,TPC-E的測試結果僅公布有50種左右,且測試環境均為PC伺服器和windows操作系統,並無power伺服器的測試結果。除此之外,TPC官方組織並未聲明TPC-E取代TPC-C,所以,說TPC-E取代TPC-C並沒有根據。