重復數據刪除能夠最大程度地減少存儲需求、加速備份和恢復、降低網絡流量,從而顯著改善數據庫環境。 但在發布 DB2 v9.7 FixPack 3 之前,如果需要為重復數據刪除設備優化 DB2 備份映像,則必須合理地設置多個 BACKUP DATABASE 命令選項。否則,備份目標的重
重復數據刪除能夠最大程度地減少存儲需求、加速備份和恢復、降低網絡流量,從而顯著改善環境。
但在發布 DB2 v9.7 FixPack 3 之前,如果需要為重復數據刪除設備優化 DB2 備份映像,則必須合理地設置多個 BACKUP DATABASE 命令選項。否則,備份目標的重復數據刪除設備很可能無法使用您生成的數據流來識別冗余的數據“塊”。為了簡化將 DB2 數據庫備份到重復數據刪除設備的過程(同時提高刪除備份映像中重復數據的效率),IBM 在 DB2 v9.7 FixPack 3 中為 BACKUP DATABASE 命令引入了 DEDUP_DEVICE 選項,并在 FixPack 4 中改進了該選項的行為。在這篇專欄文章中,我將介紹重復數據刪除是什么,以及重復數據刪除的常見實現方法。此外,我還會介紹如何執行 DB2 備份操作,包括如何在指定了 BACKUP DATABASE 命令的 DEDUP_DEVICE 選項時執行此操作,以及如何在未指定此選項時執行該操作。最后,我會提供一些建議:如果您使用 DB2 v9.7 FixPack 4 以外的版本,應該如何為重復數據刪除設備優化 DB2 備份映像。
重復數據刪除是什么?它是如何實現的?
重復數據刪除(有時也稱為“智能壓縮”或者“單實例存儲”)是一種特殊的數據壓縮形式,旨在消除冗余數據。與其他壓縮形式類似,重復數據刪除的工作方式是檢查數據,識別具有等同字節模式的部分。如果發現此類模式,則會僅將數據的單獨一個惟一實例寫入存儲;將出現的重復實例替換為“數據指針”,引用之前存儲的版本。考慮到相同的字節模式可能會出現數十次、數百次乃至數千次,使用重復數據刪除設備之后,需要物理存儲的數據量可能會大幅減少。
例如,假設一個電子郵件系統包含某個 4 MB 附件的 100 個完全相同的實例。如果在未使用重復數據刪除的情況下備份這個電子郵件系統,保存該附件的全部 100 個實例,那么需要 400 MB 的存儲空間。然而,如果將相同的電子郵件系統備份到重復數據刪除設備,那么實際上僅儲存了附件的一個實例,后續出現的每個實例僅引用已保存的副本。這樣,備份該系統所需的 400 MB 存儲空間就會縮減為 4 MB!
如前所述,大多數重復數據刪除設備的工作方式都是對比相對較大的數據“塊”,例如整個文件或者文件中較大的部分。設備會為所檢查的每個塊指派一個標識符,這個標識符通常使用加密散列函數計算得出。很多實現都假設:如果標識符等同,則對應的數據也等同。其他一些實現摒棄了這種假設,而是執行逐個字節的對比,驗證標識符相同的數據是否確實相同。無論如何,如果確定某個特定的數據塊在刪除了重復數據的命名空間內已經存在,就會使用一個指向已存儲數據的鏈接取代該數據塊。隨后,在訪問刪除了重復數據的數據時,如果遇到鏈接,就會將該鏈接替換為它所指向的數據。當然,整個過程對于最終用戶和應用程序都是透明的。
通常情況下,重復數據刪除通過兩種方法之一執行:“內聯”或“后處理”。使用內聯重復數據刪除時,會在將數據寫入磁盤之前執行散列計算和查找。這樣,內聯重復數據刪除能夠顯著減少所需的原始磁盤容量,因為任何未經過重復數據刪除處理的數據均不會寫入磁盤。出于這方面的原因,內聯重復數據刪除往往被視為最有效、最經濟的重復數據刪除方法。盡管某些內聯重復數據刪除解決方案供應商已經能實現與后處理重復數據刪除水平相當的性能,但由于內聯重復數據刪除需要耗費時間來執行散列計算和查找,因此會減緩某些操作的速度。
對于后處理重復數據刪除,所有數據會在重復數據刪除過程開始之前寫入磁盤。這種方法的優勢在于,無需在存儲數據之前等待散列計算和查找完成。缺點在于,必須暫時將重復數據寫入存儲,因此需要的初始存儲量更多一些。這種方法也會延長完成重復數據刪除的延遲時間。
傳統 DB2 備份操作的工作方式
為了理解 BACKUP DATABASE 命令的 DEDUP_DEVICE 選項如何為重復數據刪除設備優化 DB2 備份映像,最好先了解一下發起備份操作時,數據通常會得到怎樣的處理。在 DB2 備份操作開始時,會啟動一個或多個緩沖區操作器 db2bm 線程。這些線程負責訪問數據庫中的數據,并將它們以流程方式傳送至一個或多個備份緩沖區。另外還會啟動一個或多個介質控制器 db2med 線程。這些線程負責將備份緩沖區中的數據寫入目標備份設備上的文件。(所用的 db2bm 線程數量由 BACKUP DATABASE 命令的 PARALLELISM 選項控制;所用的 db2med 線程數量由 OPEN n SESSIONS 選項控制。)最終,將指派一個 DB2 代理 db2agent 線程負責指導緩沖區操作器線程與介質控制器線程之間的通信。圖 1 展示了這個過程。
圖1:DB2 備份流程模型。
通常情況下,會讀取緩沖區操作器 db2bm 線程檢索到的數據,并跨介質控制器 db2med 線程使用的所有輸出流來多路復用這些數據,將數據置入輸出流中的方式沒有確定的模式。(圖 2 展示了這種行為。)因此,在將輸出流導向重復數據刪除設備時,設備會嘗試識別已經備份的數據塊,這會造成了某些問題。
圖 2:默認數據庫備份行為。請注意,表空間的元數據會出現在輸出流中,先于該表空間的任何數據,空區段永遠不會置入輸出流。