|
-- 大記錄量,大信息容量 這是我剛進(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表,包含以下幾個字段:
(表一) ★ 并且我們使用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é)果如下圖和表中: (圖一)
(表二) 上面的測試是在空數(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條記錄”,并記錄下各操作的時間,如下: (圖三)
(表三) 通過對比,我們發(fā)現(xiàn): 在大記錄量(百萬條記錄得數(shù)據(jù)量下),對SQL2K的影響并不算大,其性能影響也比較小,從下圖以看出來: (圖四) 從這個柱狀圖可以反映出在需要大量時間的SQL操作中,SQL2K在大容量數(shù)據(jù)環(huán)境下的性能基本能保持,不會有太多的性能下降。但是從后面兩個只需要極短時間執(zhí)行的SQL操作從圖中無法反映出什么情況。 那讓我們通過計算再來看一下了,下面是在大容量數(shù)據(jù)環(huán)境下,同樣操作增加的時間與初始數(shù)據(jù)庫環(huán)境下所需時間的百分比:
(表四) 從表中中可以看出,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條記錄”,如下所示: (圖五)
(表五) 在大容量數(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條記錄”,記錄下每一個操作所需要的時間,如下所示: (圖七)
(表六) 比較兩種狀況下的測試結(jié)果: (圖八) 從第一個操作Insert來看,同樣SQL2K在大記錄量環(huán)境下性能損失不大,但是其它幾個操作結(jié)果從這個圖中依舊無法表現(xiàn)出來,我們只能通過增加時間百分比來作比較:
(表七) 通過增長時間的百分比可以看出在這幾個操作中性能有所損失,但是我們卻無法派出是否是因為這些操作時間太短,因為網(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)是能夠滿足我們的要求。 |
|
|