新聞中心
我們今天主要向大家講述的是將DB2數(shù)據(jù)庫表“合理”映射到表空間的一些規(guī)則的描述,在DB2數(shù)據(jù)庫中,是按照表、以及表空間與數(shù)據(jù)庫,這3個級別來存儲數(shù)據(jù)的。由于表空間的設(shè)置直接跟數(shù)據(jù)庫的性能相關(guān)。

目前創(chuàng)新互聯(lián)已為1000+的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)站空間、綿陽服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計(jì)、新華網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
為此在表空間中數(shù)據(jù)表的部署是否合理就直接影響到數(shù)據(jù)庫的運(yùn)行效率。在DB2數(shù)據(jù)庫中,是按照DB2數(shù)據(jù)庫表、表空間、數(shù)據(jù)庫三個級別來存儲數(shù)據(jù)的。由于表空間的設(shè)置直接跟數(shù)據(jù)庫的性能相關(guān)。為此在表空間中數(shù)據(jù)表的部署是否合理就直接影響到數(shù)據(jù)庫的運(yùn)行效率。筆者認(rèn)為,如果要讓數(shù)據(jù)表合理的映射到表空間,至少需要遵守如下的規(guī)則。
規(guī)則一:根據(jù)表的訪問率來映射表空間。
在一個數(shù)據(jù)庫系統(tǒng)中,表的訪問率是不同的。根據(jù)不完全的預(yù)測,一個數(shù)據(jù)庫中大概只有40%到50%左右的表其具有比較高的訪問率。而其他的數(shù)據(jù)表很難的才用到一回。如在一個為ERP而設(shè)計(jì)的數(shù)據(jù)庫系統(tǒng)中,采購訂單、銷售訂單等對應(yīng)的數(shù)據(jù)表訪問率是很高的,但是成本調(diào)整單等對應(yīng)的數(shù)據(jù)表一年到頭難得使用幾次。
所以在數(shù)據(jù)庫部署中,數(shù)據(jù)庫管理員首先要根據(jù)企業(yè)應(yīng)用的實(shí)際情況,將數(shù)據(jù)庫中的表按照其使用的頻率進(jìn)行分類。然后將使用頻率高的表放在一個表空間,或者根據(jù)模塊放在幾個不同的表空間中。然后將他們存放在性能比較高的硬盤上,或者存放在活躍程度低的硬盤中。如此的話,I/O爭用的現(xiàn)象就會少的多,從而提高數(shù)據(jù)庫的性能。
規(guī)則二:根據(jù)字段的使用程度來規(guī)劃表。
不僅不同的表訪問頻率有很大的差別,即使是同一個DB2數(shù)據(jù)庫表中,其字段的訪問頻率也會有很大不同。如在一些人事管理系統(tǒng)數(shù)據(jù)庫中,有些公司會將員工的身份證復(fù)印件或者照片掃描存放到數(shù)據(jù)庫中。這些圖片在數(shù)據(jù)庫中需要利用LOB數(shù)據(jù)類型來存放。由于這個數(shù)據(jù)類型比較大,為此無論是在查詢還是數(shù)據(jù)庫備份的時候,都會給其帶來負(fù)面的影響。
如當(dāng)用戶在查詢員工信息時,如果在SELECT語句中不加入字段的名稱,而采用全部查詢的方式,那么查詢的速度會很慢。隨著圖片數(shù)量的增多,其速度會呈幾何級別下降。但是實(shí)際上,用戶平時并不需要訪問這些員工的身份證復(fù)印件或者照片信息。所以在查詢的時候,將這些沒有的信息給他們顯示出來,也是一種浪費(fèi),而且還影響數(shù)據(jù)庫的性能。
為此在設(shè)計(jì)表的時候,如果某些列不經(jīng)常用到,而且這些列的數(shù)據(jù)類型又是大數(shù)據(jù)類型或者說很多都是NULL值(數(shù)據(jù)庫在處理NULL值的時候效率要比其他的只慢許多),此時最好將這些列跟其它的列分開在不同的表中存放。由于他們的訪問頻率不同,就可以按照上面第一個規(guī)則來映射表空間,以提高數(shù)據(jù)庫的訪問性能。
不過需要注意的是,如果身份證復(fù)印件等信息經(jīng)常需要用到的,那么也最好將他們分開在兩個表中。只是將存放復(fù)印件信息的表也存放在性能比較好的硬盤中,以提高訪問這些數(shù)據(jù)的效率。之所以仍然需要將他們分開存放,這主要是考慮到備份的性能。因?yàn)檫@些LOB數(shù)據(jù)類型會降低數(shù)據(jù)庫的備份效率,為此可以在數(shù)據(jù)庫比較空閑的時候?qū)@些LOB數(shù)據(jù)所在的表空間進(jìn)行獨(dú)立的備份。
規(guī)則三:索引數(shù)據(jù)、長字段數(shù)據(jù)、普通數(shù)據(jù)分開存放。
筆者在進(jìn)行表空間設(shè)計(jì)的時候,往往會將索引數(shù)據(jù)、長字段數(shù)據(jù)與普通數(shù)據(jù)分開來存放。即將一個表空間用來存放索引數(shù)據(jù),一個表空間用來存儲長字段數(shù)據(jù),另一個表空間庸才存儲普通的數(shù)據(jù)。這主要是通過在建立表的時候?yàn)檫@些數(shù)據(jù)類型建立不同的DB2數(shù)據(jù)庫表,然后將表根據(jù)數(shù)據(jù)類型分類的不同將他們存放在不同的表空間中。
這主要是根據(jù)三種數(shù)據(jù)的作用不同而考慮的。眾所周知,給表設(shè)置索引之后可以在很大程度上提高數(shù)據(jù)庫的性能。這主要是因?yàn)槿绻O(shè)置索引好,數(shù)據(jù)庫系統(tǒng)會先從索引找查找數(shù)據(jù)。查找相應(yīng)的數(shù)據(jù)后會直接根據(jù)記錄序列號從其他表中讀取相關(guān)記錄。也即是說只在索引表中查詢,而不會在其他表中查找記錄。
所以說如果能夠提高索引表的工作效率,那么就可以在很大程度上提高數(shù)據(jù)庫的查詢性能。為此筆者建議,將索引數(shù)據(jù)存放在單獨(dú)的表空間中。如果硬件條件允許的話,并且企業(yè)對于查詢具有比較高的性能要求,就將索引表空間存放在單獨(dú)的硬盤中,以防止硬盤的I/O爭用。如果硬件條件不允許的話,那么至少也要將這個索引表空間存放在性能比較高的硬盤上。
另外為了提高索引的工作效率,最好不講在長字段上添加索引。如對于文本型的字段,雖然也可以為其添加索引。但是給其添加索引的話,工作效率并不會很高。此時將這個索引數(shù)據(jù)存放在單獨(dú)的表空間中,這個表空間就會變得很大。根據(jù)筆者這么多年的工作經(jīng)驗(yàn),可以告訴大家,在長字段上設(shè)置索引,是得不償失的。
將長字段分開來存放,還有一個原因就是節(jié)省存儲空間。根據(jù)使用的經(jīng)驗(yàn),長字段的使用效率是比較低的。也就是說,在長字段數(shù)據(jù)類型中,一定會存在沒有使用的空間。所以會有一定程度的浪費(fèi)。具體的浪費(fèi)數(shù)量要根據(jù)長字段的數(shù)據(jù)類型大小以及在列中出現(xiàn)的數(shù)據(jù)的大小是否相對一致。
因?yàn)殚L字段數(shù)據(jù)會被系統(tǒng)盡可能的平均分配到頁面中。而長字段數(shù)據(jù)的最后頁面往往不能夠占滿其規(guī)定的字節(jié),為此對于長字段來說,存儲空間的浪費(fèi)是不可避免的。故最好是將他們存放在不同的表中。這并不是說可以避免空間的浪費(fèi),而是指在有需要的時候可以更加方便的回收這些被浪費(fèi)的空間。
規(guī)則四:根據(jù)備份的需要來規(guī)劃表空間。
當(dāng)數(shù)據(jù)庫中的數(shù)據(jù)量比較多的時候,對數(shù)據(jù)庫進(jìn)行備份是一項(xiàng)比價花時間的工作。為此對于大型的數(shù)據(jù)庫,管理員往往不會對整個數(shù)據(jù)庫進(jìn)行備份。而是在表空間的級別上,進(jìn)行單獨(dú)的備份。如此的話,就可以將數(shù)據(jù)庫備份的時間分開來,從而可以有效減少對數(shù)據(jù)庫正常作業(yè)產(chǎn)生的負(fù)面影響。
如以前有個客戶,他們的業(yè)務(wù)非常的頻繁,為此每天的數(shù)據(jù)都會有很大的增長。為了提高他們數(shù)據(jù)庫性能,筆者決定采用在表空間級別上進(jìn)行備份的策略。根據(jù)數(shù)據(jù)庫繁忙程度的不同,分別在中午午休時間與晚上下班時間進(jìn)行數(shù)據(jù)庫的備份作業(yè)。
這家企業(yè)數(shù)據(jù)庫的空閑時間不讀,只有中午一個小時與晚上二個小時的空閑時間。而根據(jù)預(yù)測,要完成海量數(shù)據(jù)庫的備份,起碼需要150分鐘的時間。所以在空間時間內(nèi)無法完成整個數(shù)據(jù)庫的備份。為此筆者只好在DB2數(shù)據(jù)庫表空間級別上進(jìn)行備份,即將整個數(shù)據(jù)庫的備份工作分散在這三個小時內(nèi)完成。從而將數(shù)據(jù)庫備份對服務(wù)器產(chǎn)生的性能影響降低到最低。
規(guī)則五:根據(jù)表的大小來規(guī)劃表空間。
在整個數(shù)據(jù)庫中,表的大小往往會有很大的差異。有些表可能只有不到幾百條記錄;而有些表則往往有上百萬、上千萬條記錄。根據(jù)表記錄數(shù)量的不同,可以將表分為大表與小表。在規(guī)劃表空間的時候,這個就是需要考慮的一個因素。
如可以將一些小表存放在一個單獨(dú)的表空間中,并且是存放到SMS類型的表空間。因?yàn)閷τ谛”韥碚f,其I/O對于其性能的影響并不是很大。然后對那些大表,并且需要進(jìn)行快速訪問的,就需要選擇合適的DMS表空間。這主要是因?yàn)閷τ诖驞B2數(shù)據(jù)庫表操作,往往會涉及到很多的輸入輸出,此時這個I/O往往會成為其性能的瓶頸。
可見,要將表映射到合適的表空間不是一件很容易的事情。這不僅要求數(shù)據(jù)庫管理員具有很深厚的技術(shù)功底,更重要的是要求他們有比較豐富的實(shí)際項(xiàng)目經(jīng)驗(yàn)。有時候這個項(xiàng)目經(jīng)驗(yàn)可能比固定的規(guī)則更加有用。所以希望數(shù)據(jù)庫管理在牢記上面這些規(guī)則的同時,要學(xué)會靈活應(yīng)用。
而不能夠在平時的工作中死搬硬套。如對于一些比較小型的應(yīng)用,以上這些規(guī)則根據(jù)其不到應(yīng)有的效果。相反,在這表空間設(shè)計(jì)上反而浪費(fèi)了很多時間。故一般在比較大型的數(shù)據(jù)庫應(yīng)用中才需要通過表空間規(guī)劃來提升數(shù)據(jù)庫性能。
當(dāng)前文章:DB2數(shù)據(jù)庫表“合理”映射到表空間的5個規(guī)則
文章分享:http://www.dlmjj.cn/article/dpihcco.html


咨詢
建站咨詢
