电竞比分网-中国电竞赛事及体育赛事平台

分享

SQL SERVER 2000壓力測試

 伊蓮 2007-02-13
 
-- 大記錄量,大信息容量

這是我剛進(jìn)入現(xiàn)在公司的時候所作的兩個測試報告之一,現(xiàn)公布出來,希望能對大家有所幫助。

隨著Microsoft的新一代關(guān)系數(shù)據(jù)庫系統(tǒng)SQL SERVER 2000(以下簡稱SQL2K)的發(fā)布,業(yè)界紛紛瞄準(zhǔn)了它的性能,尤其是針對于Oracle 8的性能比較。在一系列的測試中,SQL2K的的確確沒有辜負(fù)微軟對它的期望,獲得了相當(dāng)不錯的成績,終于肩負(fù)起對抗Oracle,搶占高端數(shù)據(jù)庫市場的使命。

在關(guān)系數(shù)據(jù)庫的應(yīng)用當(dāng)中,當(dāng)隨著數(shù)量級或者容量級的數(shù)據(jù)急劇膨脹,很多數(shù)據(jù)庫的性能就飛速下降。因此在要求嚴(yán)格的應(yīng)用中,通常Oracle數(shù)據(jù)庫是作為用戶的首選,然而其高昂的價格卻讓人望而卻步。隨著SQL2K的到來,我們期待著Microsoft的SQL2K在大記錄量和大容量的情況下能有優(yōu)秀的表現(xiàn)。在此,我們針對SQL2K在這兩方面表現(xiàn)的性能作了測試。

測試計劃:

整個測試過程分為兩個部分,第一部分是數(shù)據(jù)庫大容量狀態(tài)下的執(zhí)行情況,第二部分是數(shù)據(jù)庫在大記錄量下的執(zhí)行情況。為了方便測試,我們編寫了一個程序進(jìn)行各種數(shù)據(jù)庫操作,并進(jìn)行效率紀(jì)錄。

在兩個部分的測試中,我們分別在空數(shù)據(jù)庫環(huán)境下進(jìn)行各種數(shù)據(jù)庫基本操作,并記錄各個操作所需要的時間,然后再插入了大容量/大記錄量的數(shù)據(jù)后,再作同樣的操作并紀(jì)錄操作所需時間。最后對前后的時間進(jìn)行比較。當(dāng)然,由于網(wǎng)絡(luò)傳輸?shù)葐栴},可能導(dǎo)致一些誤差,但是這對我們的測試不會有太大的影響。

 

測試準(zhǔn)備:

★     測試環(huán)境:

OS:Windows 2000 Server

Database:Microsoft SQL Server 2000

Database Server:ADV2000

 

★     創(chuàng)建數(shù)據(jù)庫:

使用“企業(yè)管理器”在數(shù)據(jù)庫服務(wù)器上創(chuàng)建數(shù)據(jù)庫test,并且設(shè)置其大小為10GB,以避免在默認(rèn)容量大小下,隨著數(shù)據(jù)庫容量增加而導(dǎo)致服務(wù)器動態(tài)分配磁盤空間的時候引起開銷。

隨后再在test數(shù)據(jù)庫上創(chuàng)建一個Tab表,包含以下幾個字段:

字段名

數(shù)據(jù)類型

字段情況

可否為空

id

Int,4

主鍵,自加

不可

name

Char, 10

 

不可

age

Int,  4

 

不可

Photo

Image, 16

 

(表一)

 

       ★ 并且我們使用Delphi 6編寫了一個測試程序,采用ADO接口,連接數(shù)據(jù)庫服務(wù)器ADV2000。測試程序主要完成一下的功能:

1、  插入2000條數(shù)據(jù)(insert)

2、  選擇1000條數(shù)據(jù)(select)

3、  更新1000條數(shù)據(jù)(update)

4、  刪除1000條數(shù)據(jù)(delete)

5、  插入100,000條帶圖片數(shù)據(jù)(用于大容量測試)/插入1,000,000條不帶圖片測試(用于大記錄量測試)

 

測試過程

整個測試過程分為大容量數(shù)據(jù)測試和大記錄量數(shù)據(jù)測試:

大容量數(shù)據(jù)測試:

在大容量的數(shù)據(jù)測試中,我們通過插入圖片來使數(shù)據(jù)庫的容量膨脹,所以在以下的所有數(shù)據(jù)庫操作中,例如插入數(shù)據(jù),都是指的插入帶圖片的數(shù)據(jù)。測試中選擇了一張41,958字節(jié)的圖片,并且大容量測試是在插入100,000條記錄以后的測試,因此我們可以大致估計當(dāng)時的數(shù)據(jù)表的容量為 (41958 * 100000) / (1024 * 1024) = 4001.43MB。

 

首先通過測試程序按順序進(jìn)行如下測試,在空表中“插入2000條紀(jì)錄->選擇1000條記錄->更新1000條記錄->刪除1000條記錄”,并記錄下各操作所需要的時間。測試結(jié)果如下圖和表中:

(圖一)

 

Insert 2000條紀(jì)錄

Select 1000條紀(jì)錄

Update 1000條紀(jì)錄

Delete 1000條紀(jì)錄

132.781 S

41.94 S

0.841 S

1.552S

(表二)

 

上面的測試是在空數(shù)據(jù)表中進(jìn)行數(shù)據(jù)庫各種基本操作的測試,并且記錄了所需要的時間。然后我們插入100,000條帶有圖片的紀(jì)錄,使數(shù)據(jù)表的數(shù)據(jù)量膨脹到4001.43MB,接下來的工作就是測試大容量環(huán)境下的各種數(shù)據(jù)庫操作情況。

(圖二)

 

同樣按照以上的的步驟進(jìn)行測試:“插入2000條紀(jì)錄->選擇1000條記錄->更新1000條記錄->刪除1000條記錄”,并記錄下各操作的時間,如下:

(圖三)

 

Insert 2000條紀(jì)錄

Select 1000條紀(jì)錄

Update 1000條紀(jì)錄

Delete 1000條紀(jì)錄

139.05 S

42.36 S

0.971 S

2.264 S

(表三)

通過對比,我們發(fā)現(xiàn):

在大記錄量(百萬條記錄得數(shù)據(jù)量下),對SQL2K的影響并不算大,其性能影響也比較小,從下圖以看出來:

(圖四)

從這個柱狀圖可以反映出在需要大量時間的SQL操作中,SQL2K在大容量數(shù)據(jù)環(huán)境下的性能基本能保持,不會有太多的性能下降。但是從后面兩個只需要極短時間執(zhí)行的SQL操作從圖中無法反映出什么情況。

那讓我們通過計算再來看一下了,下面是在大容量數(shù)據(jù)環(huán)境下,同樣操作增加的時間與初始數(shù)據(jù)庫環(huán)境下所需時間的百分比:

Insert 2000條紀(jì)錄

Select 1000條紀(jì)錄

Update 1000條紀(jì)錄

Delete 1000條紀(jì)錄

4.72%

1.001%

15.46%

45.88%

(表四)

從表中中可以看出,Update和Delete操作的時候,好像在大容量環(huán)境下的性能損失嚴(yán)重。但是考慮到,因為存取的數(shù)據(jù)庫服務(wù)器與客戶端位于不同的機(jī)器上,雖然通過100M的內(nèi)部網(wǎng)連接,但是由于網(wǎng)絡(luò)的問題,導(dǎo)致了存取中網(wǎng)絡(luò)的延時。當(dāng)操作所需要的時間比較大的時候,這一點(diǎn)延時對時間比例影響不大,而一旦操作所需要的時間比較短的時候,這個延時就顯得尤為突出了。

對于Delete操作中的45.55%的性能損失,還有一個原因是,當(dāng)刪除紀(jì)錄的時候,數(shù)據(jù)庫會重建索引。當(dāng)數(shù)據(jù)量太大的原因下,導(dǎo)致了重建索引耗費(fèi)了較多的時間。

大記錄量數(shù)據(jù)測試:

在大記錄量環(huán)境下的測試,為了讓大容量測試不影響這次測試,首先我們徹底刪除掉大容量測試中使用的表Tab,并且重新創(chuàng)建一個完全一樣的新表Tab用于此次測試。

這個測試中的步驟和上一個測試基本一樣,同樣測試了空表狀況下的各個基本數(shù)據(jù)庫操作所需要的時間,但是,這個測試中我們沒有插入圖片,photo字段沒有插入任何東西,保持為空:“插入2000條紀(jì)錄->選擇1000條記錄->更新1000條記錄->刪除1000條記錄”,如下所示:

(圖五)

 

Insert 2000條紀(jì)錄

Select 1000條紀(jì)錄

Update 1000條紀(jì)錄

Delete 1000條紀(jì)錄

16.274 S

0.07 S

0.04 S

0.04 S

(表五)

 

在大容量數(shù)據(jù)環(huán)境下,我們插入的是100,000條帶有圖片的數(shù)據(jù),從而導(dǎo)致了數(shù)據(jù)量達(dá)到了4001MB,而在這次的大記錄量環(huán)境下的測試,100,000條數(shù)據(jù)量可能已經(jīng)不能滿足我們的需要,我們希望能在更高數(shù)據(jù)量環(huán)境下進(jìn)行測試,以便于增大添入大數(shù)量級數(shù)據(jù)前后操作效率的差異,因此選擇了插入1,000,000條數(shù)據(jù)。

(圖六)

完成我們的大數(shù)量級的數(shù)據(jù)插入以后,進(jìn)行下一步的測試紀(jì)錄:“插入2000條紀(jì)錄->選擇1000條記錄->更新1000條記錄->刪除1000條記錄”,記錄下每一個操作所需要的時間,如下所示:

(圖七)

Insert 2000條紀(jì)錄

Select 1000條紀(jì)錄

Update 1000條紀(jì)錄

Delete 1000條紀(jì)錄

16.574 S

0.05 S

0.05 S

0.051 S

(表六)

 

比較兩種狀況下的測試結(jié)果:

(圖八)

       從第一個操作Insert來看,同樣SQL2K在大記錄量環(huán)境下性能損失不大,但是其它幾個操作結(jié)果從這個圖中依舊無法表現(xiàn)出來,我們只能通過增加時間百分比來作比較:

 

 

Insert 2000條紀(jì)錄

Select 1000條紀(jì)錄

Update 1000條紀(jì)錄

Delete 1000條紀(jì)錄

1.84%

-28.6%

25%

27.5%

(表七)

通過增長時間的百分比可以看出在這幾個操作中性能有所損失,但是我們卻無法派出是否是因為這些操作時間太短,因為網(wǎng)絡(luò)而引起的誤差。

四、測試結(jié)果

總結(jié):雖然在測試中,因為很多的SQL操作因為所需要的時間過短,而導(dǎo)致受到網(wǎng)絡(luò)傳輸?shù)挠绊?。但是我們?nèi)匀豢梢酝ㄟ^所需時間較長的SQL操作進(jìn)行總結(jié):

無論是在大容量(數(shù)GB單位)還是大記錄量(百萬條記錄量)環(huán)境下,SQL SERVER 2000的性能都能保持較高的水平。一般情況下的性能損失不到5%,因此完全能夠滿足我們通常的實(shí)際應(yīng)用。

但是因為硬件等條件的限制下,我們無法對更大容量(十GB、百GB乃至TB容量級),更大記錄量(千萬,億級數(shù)據(jù)量)的環(huán)境下進(jìn)行測試。

總體說來,在普通的企業(yè)級應(yīng)用中,SQL SERVER 2000已經(jīng)是能夠滿足我們的要求。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多