我們今天主要描述的提高DB2數據備份和恢復效率的實際操作步驟的描述,在設計數據備份和恢復的方案時,我們主要考慮的有2個方面的問題。一是備份與恢復策略本身是否安全,即能否及時的准確的完成對數據庫的備份工作。
二是要考慮數據備份與恢復方案的執行效率高不高。
如果備份或者恢復一個DB2數據庫需要花費幾個小時時間,那麼及時這個備份與恢復方案再安全,也於事無補。或者說,是一個不合適的解決方案。為此在考慮備份恢復方案本身安全性的同時,也需要兼顧備份與恢復的效率。在這篇文章中,筆者就介紹一下提高DB2數據備份與恢復效率的一些常用技巧。
經過筆者多個案例的實際應用,證明這些技巧在提高DB2數據庫備份與恢復的性能具有很大的幫助。
一、了解數據的邏輯存儲結構。
如果以前有Oracle數據庫經驗的管理員,那麼了解DB2數據庫的邏輯存儲結構就比較容易了,因為兩者在這方面很類似。對於DB2數據庫來說,其邏輯存儲結構主要分為數據表、表空間與數據庫三個級別。數據表包含在表空間之中,而表空間又包含在數據庫當中。換一句話說,一個DB2數據庫包含多個表空間,而每個表空間又包含了多個數據表。
一個數據表示不能夠保存在多個表空間當中的。同理,一個表空間也不能夠保存在多個數據庫之中。這跟小學的實施,班級裡分組類似。一個班(相當於一個數據庫)分為四個小組(每個小組相當於一個表空間),然後每個小組又是由一個個的學生組成的(一個個學生相當於一個個數據表)。
這個組織結構可以有什麼好處呢?此時學校校長(相當於數據庫管理員)就可以按照班級、小組為單位對數據進行管理,也可以對學生進行一對一的面談,從而提高數據庫管理的靈活性。
而對於DB2數據備份與恢復作業來說,采用如此的邏輯結構,數據庫管理員既可以對整個數據庫進行備份與恢復(對整個班級進行管理);也可以以表空間為單位,對表空間中的所有數據表進行備份與恢復操作(以小組為單位進行管理);甚至可以對單獨的數據表進行備份與恢復的操作(對單個學生進行管理)。即可以分別從數據表、表空間、數據庫三個級別來進行備份與恢復的操作。
這分級別的管理,不僅增強了操作的靈活性,而且還可以提高備份與操作的效率。如現在用戶需要對某個表進行更新,如需要調整價格表中的價格。此時數據庫管理員就只需要對價格表進行更新即可,而不需要對整個數據庫進行備份。顯然這可以減少備份的時間。若出現問題的話,也只需要對這張表中的內容進行恢復。這也可以在很大程度上減少恢復的時間。恢復一張表肯定比恢復整個數據庫所用的時間要少的多。
二、合理規劃表空間提高數據庫備份恢復性能。
既然數據庫備份與恢復可以按三個級別來進行,那麼數據庫管理員可以根據這個特性來合理規劃表空間,以提高數據庫備份與恢復的性能。如在DB2數據庫中,雖然對於LOB等大容量數據類型提供了很好的支持。
但是,畢竟其容量比較大,有時候其所占的數據庫容量可能達到整個數據庫的二分之一。為此這些大容量的數據類型就成為了數據庫備份與恢復作業作業的性能瓶頸。如果在數據庫備份與恢復的時候,不備份這些LOB數據類型的數據,那麼數據庫備份與恢復的時間可能會減少三分之一,甚至二分之一。
為此筆者建議,在規劃數據表的時候,最好將LOB數據類型的數據與其他數據分成兩張表來存放。如在一個產品信息表的表中,包含一個產品圖片的字段,這個字段就是一個LOB數據類型。雖然可以將它們設計在同一個表中。不過筆者還是建議將他們分為兩個表來存放,然後通過關鍵字將他們連接起來。
最後將這個兩張表分別存放到不同的表空間中。如將有LOB數據類型的表統一保存在LOB表空間中。如此有什麼好處呢?當數據庫進行備份時,平時可以只對非LOB表空間中的數據進行備份。由於LOB表空間中的一些信息一般不怎麼會更新,就可以一個星期更新一次。或者讓其在數據庫比較空閒的時間進行備份。
經過一段時間的測試,可以發現每天或者每周數據庫的空閒時斷。如此規劃的話,就可以將平時備份的效率提高。同理,在恢復的時候也可以按照表空間級別來進行恢復,從而縮短數據庫恢復的時間。
這個方案的核心就是將LOB等大容量數據類型的數據與普通表獨立開來,並且存放在不同的表空間中。然後將LOB表空間與非LOB表空間進行分開管理,分開備份與恢復,從而提高數據庫備份與恢復的效率。為此在建立表時將LOB數據類型與其他數據類型分開存放是關鍵。
三、對於圖片等LOB數據類型的另類處理方式。
當數據庫中LOB數據類型比較多的時候,往往會在很大程度上影響數據庫的性能。不僅DB2數據備份與恢復會受到影響,連平時的查詢也會受到牽連。為此筆者有時候給企業部署DB2數據庫系統的時候,往往會建議他們,不要將圖片等信息存放在數據庫中。那麼當用戶需要查詢圖片信息時,該如何處理呢?筆者建議他們將圖片統一放到網絡上的一個共享服務器中。
然後在數據庫中只存放這個圖片的路徑。最後在客戶端界面設計時,可以創建一個指向圖片的鏈接。當用戶需要訪問某個產品的圖片信息時,則只需要點擊產品管理界面上的圖片鏈接,就可以打開這張圖片。在這種情況下,數據庫實際存儲的只是圖片的路徑(也就是一個普通的字符型字段),而不是圖片本身。故可以提高客戶端窗口顯示的速度,同時也可以提高數據庫備份與恢復的效率。
四、為系統設置合適的並行度與緩存來提高數據庫備份與恢復性能。
數據庫備份與恢復的性能除了跟數據類型有關之外,還跟系統的並行度與緩沖區有關。通常情況下,如果硬件設備支持的話,增加並行度與增加緩沖區的大小可以提高數據庫備份與恢復的性能。為此在對DB2數據庫進行備份的時候,可以通過給並行度、緩沖區樹木和緩沖區大小分配合適的值來提高數據庫備份與恢復的性能。
如一般情況下,筆者建議將數據庫緩沖區的大小設置為數據內存的二倍到三倍。如果備份中包含大容量的數據類型,可以適當提高整個比例。並且將數據庫緩沖區的數目設置為硬盤I/O緩沖數目的兩倍。如此設置之後,數據庫的備份與恢復性能能夠得到很大的改善。
不過需要注意的是,這個調整會受到服務器硬件資源的限制。當服務器內存等硬件設備不支持這麼大的數據緩沖區與數據緩沖區數目時,反而會因為沒有足夠的內存分配給緩沖區,從而導致DB2數據備份與恢復的失敗。為此筆者建議,在調整數據緩沖區的時候,需要特別注意。
一般來說,調整好這些參數之後,需要持續追蹤一段時間,以確保這些調整不會影響到數據庫的正常備份與恢復,不會與數據庫的硬件配置相沖突。