程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> DB2數據庫 >> DB2教程 >> DB2 備份與恢復性能優化及其在 SAP 系統中的實踐

DB2 備份與恢復性能優化及其在 SAP 系統中的實踐

編輯:DB2教程

DB2 備份和恢復簡介

數據庫運行過程中可能會遇到諸如存儲介質損壞,服務器故障,供電中斷等不可預測的問題導致數據丟失或損毀。因此,采取一定備份和恢復策略就顯的尤為重要。隨著企業用戶數據量的不斷增長,如何快速而有效的對數據進行備份和恢復,就成為數據庫日常維護的重要議題。這也是本文討論的重點。

下面我們簡單介紹 DB2 提供的數據庫備份和恢復的方法和命令。DB2 數據庫通過 BACKUP DATABASE 和 RESTORE DATABASE 命令來進行數據庫的備份和恢復。例如:

db2 “backup database HIA online to E:\backup compress include logs” 
db2 “restore database HIA from E:\backup” 

DB2 的備份和恢復命令已經被集成進 DB2 引擎。它能夠提供不同粒度和不同級別的備份和恢復:

完整的數據庫或者某個表空間的備份與恢復

離線或在線的數據庫備份

完整、增量或者 delta 方式的數據庫備份與恢復

同時,DB2 備份和恢復命令還具有一系列的參數用來調整數據庫備份和恢復的效率。例如我們可以通過 UTIL_IMPACT_PRIORITY 參數來調整 DB2 在備份過程中的 CPU 占用率。由於 DB2 備份恢復的參數優化與 DB2 備份和恢復的進程模型具有密切的關系,所以我們首先來看一下 DB2 備份和恢復的工作原理。

DB2 備份和恢復的工作原理

DB2 備份和恢復主要由兩種不同的 EDU 共同完成數據庫的備份和恢復操作。其中 db2bm(備份和恢復緩沖區操縱程序)用來在表空間和系統緩存間進行數據傳輸,db2med(備份和恢復介質控制器)用來在系統緩存和外部介質之間進行數據傳輸。db2bm 和 db2med 均在 db2agent 的協調下進行工作。其中,db2bm 需要通過 db2pfchr(緩沖池預取進程)從容器中預取數據,或者通過 db2pclnr(緩沖池頁清楚程序)向容器中寫入數據。在 DB2 V9.5 版本之前,db2bm 和 db2med 是以進程方式存在於內存中,而在 DB2 V9.5 版本後改為線程方式。DB2 備份進程模型如下圖 1 所示。

圖 1. DB2 備份進程模型
DB2 備份與恢復性能優化及其在 SAP 系統中的實踐

以 DB2 備份為例,從圖中我們可以看出,其存在 3 個表空間(tablespace1,tablespace2,tablespace3)和 3 個外部存儲介質。第一個 db2bm 進程負責從 tablespace1 和 tablespace2 中順次讀取數據,並將它們寫入到系統緩存中。即 db2bm 進程會首先對 tablespace1 進行備份,當備份完成後,db2bm 會開始對 tablespace2 的備份。第二個 db2bm 進程負責從 tablespace3 中讀取數據並寫入系統緩存。同時,每一個外部存儲介質對應於一個 db2med 進程,db2med 進程負責將系統緩存中的數據寫入到外部設備中。

DB2 恢復過程與 DB2 備份過程類似,在這裡就不再重復解釋。如下圖 2 所示。

圖 2. DB2 恢復進程模型
DB2 備份與恢復性能優化及其在 SAP 系統中的實踐

對於 DB2 備份和恢復過程來說,在 EDU 內部,DB2 並不會控制 db2bm 進程從表空間往系統緩存的寫入或讀取速度,同樣的,db2med 進程在系統緩存和外部介質之間的傳輸速度也不會受到限制。DB2 備份和恢復工具會以盡可能快的速度向外部介質寫入和讀取數據。我們只能夠通過外部參數 UTIL_IMPACT_PRIORITY 對 DB2 備份和恢復進行整體控制。

在 DB2 備份和恢復過程中,每一個表空間都會由一個單獨的 db2bm 進程負責讀取與寫入。如圖 1 所示,如果備份過程中存在有 2 個 db2bm 進程,那個其中一個 db2bm 進程會負責對其中的兩個表空間進行讀寫操作。並且這 2 個 db2bm 進程會並行的對表空間進行讀寫操作,如 tablespace1 和 tablespace3 中的數據會由不同的 db2bm 並行寫入到系統緩存。db2bm 的數量可以有 PARALLELISM 參數進行指定,如下。

db2 backup database to d:\backup PARALLELISM 4 
db2 restore database from d:\backup PARALLELISM 4

同理,我們可以通過如下的方式指定 db2med 的數目。

db2 backup database to d:\backup e:\backup f:\backup 
db2 restore database from d:\backup e:\backup f:\backup

DB2 會根據我們所指定的目標路徑的數據來生成對應數據的 db2med 進程。

DB2 備份和恢復的優化參數

本節我們將詳細介紹影響 DB2 備份和恢復的優化參數,並結合工作原理解釋它們的具體含義,並給出性能優化建議。

BACKUP 優化參數

在 DB2 備份命令中有如下參數可以用來調整數據庫備份的性能。

BACKUP DATABASE <DB> TO dir | dev WITH num-buf BUFFERS 
BUFFER buff-size PARALLELISM n COMPRESS 
UTIL_IMPACT_PRIORITY priority 

PARALLELISM n

通過使用 PARALLELISM 參數指定了使用 db2bm 進程數目,它決定了從表空間中往系統緩存中寫入的並行性。每一個 db2bm 進程會對應於一個或多個表空間,當一個 db2bm 進程完成對當前表空間的備份後,它會繼續對另外一個表空間進行備份。由於每一個 db2bm 進程至少對應於一個表空間,因此 PARALLELISM 值需要小於數據庫表空間的數目,如果將設置 PARALLELISM 為大於數據庫中表空間的數目,其並不會顯著提高備份的性能。

To dir | dev

如果有多個目標路徑被指定,如 To dir1, dir2, dir3,則可以指定備份時使用的 db2med 的進程數目。多個 db2med 進程會並行的像 dir1, dir2, dir3 中寫入數據,其實第一個目標路徑 dir1 中會保存備份數據的數據頭以及一些特殊的文件。

如果系統中有多個磁盤系統,可以使用多個目標路徑分別指向這些磁盤系統,以提高往磁盤寫入數據的並行性。

BUFFER buff-size

使用 BUFFER buff-size 參數可以指定內部緩存的大小,如圖 1 中的內部緩存(Utility Heap),單位為 4KB。如果 BUFFER 的值沒有指定,則使用 dbm 中的參數 BACKBUFSZ 作為內部緩存的大小。進行備份時,數據首先由表空間寫入內部緩存,當緩存滿後,緩存中的數據會被寫入到外部磁盤中。

BUFFER 值的大小建議設置為 extent 大小的整數倍。如果不同的表空間的 extent 大小不同,則 BUFFER 值建議為它們的最小公倍數。

WITH num-buf BUFFERS

如圖 1 所示,每一個備份過程可以擁有一個或者多個內部緩存。將內部緩存的數目設置為至少 db2med 進程的 2 倍能夠有效的提高備份時的速度,它使得 db2med 進程向外部磁盤寫入數據時無需等待緩存。

同時需要注意的是,(BUFFER buff-size) * (WITH num-buf BUFFERS) < UTIL_HEAP_SZ。UTIL_HEAP_SZ 指定了 DB2 中實用程序堆的大小,此參數指定可由備份、復原和裝入(包括裝入恢復)實用程序同時使用的最大內存量。

UTIL_IMPACT_PRIORITY

UTIL_IMPACT_PRIORITY 可以用來調節備份的速度,其取值在 1 到 100 之間。1 代表最低優先級,100 代表最高優先級。如果此參數不指定,則備份進程會以最快的速度備份數據。

COMPRESS

備份壓縮功能能夠在數據寫入外部磁盤前,對內部緩存中的數據進行壓縮,從而減少備份文件的大小。其使用的是一種改進的 Lempel-Zev(LZ)算法。

通過開啟數據壓縮功能,我們可以節省存儲備份的磁盤空間。例如,在下面的例子中,我們將 SAP 的備份的容量從 89GB 縮小到 13GB。

RESTORE 優化參數

在 DB2 恢復命令中有如下參數可以用來調整數據庫恢復的性能。

RESTORE DATABASE <DB> FROM dir | dev WITH num-buf 
BUFFERS BUFFER buff-size PARALLELISM n 

PARALLELISM n

與 DB2 備份命令相同,PARALLELISM 參數用來指定在恢復過程中的 db2bm 的數目。通過增加 PARRALLELISM 值可以提高數據在內部緩存和表空間之間的並行性。

FROM dir | dev

如果指定多個備份存儲路徑,(其取決於備份時目標路徑的數目)如 From dir1, dir2, dir3,則可以指定恢復時 db2med 進程數目的多少,從而加快數據從外部介質寫入內部緩存的速度。

BUFFER buf-size

BUFFER buf-size 的大小為一塊內部緩存的大小,其應該設置為 extent 大小的整倍數,同時需要等於或者為備份時所定義大小的整倍數。如果沒有設置的話,則使用 dbm 中的 RESTBUFSZ 參數作為內部緩存的大小。

WITH num-buff BUFFERS

指定使用的內部緩存的大小,同備份參數相同,其最好設置為 db2med 的 2 倍以提高備份的速度。同時 (BUFFER buff-size) * (WITH num-buf BUFFERS) < UTIL_HEAP_SZ。

我們可以看到,通過調整 DB2 備份和恢復的參數,我們可以根據當前系統所處的不同硬件環境調整數據庫備份和恢復過程中的 db2bm(備份和恢復緩沖區操縱程序)和 db2med(備份和恢復介質控制器)的數目,以及它們在備份和恢復過程中使用的內部緩存的大小和數目等參數,從而提高 DB2 的整體備份和恢復性能。

那麼,在具體的環境中,我們如何利用這些參數以提高備份和恢復的性能,就成為我們下面討論的重點。下一節我們以基於 DB2 的 SAP 系統為例,討論如何在 SAP 系統中提高備份和恢復的性能,進一步詳細說明性能參數在數據庫備份和恢復中的影響。

實例 – 在 SAP 系統中進行快速有效的備份和恢復

本節以基於 DB2 的 SAP 系統的備份和恢復為例,通過備份恢復時間,數據庫備份和恢復參數的調整與比較等,進一步說明性能參數在數據庫備份和恢復中的影響。下文進行備份和恢復的系統硬件環境為 AMD 4 核 CPU,8GB 內存,2 塊 IBM SCSI 磁盤作為備份介質,而 SAP 數據庫存儲在另外 1 塊 RAID5 磁盤上。

SAP 系統的備份

通常,SAP 管理員會通過 SAP 中的 DBACockpit 中的 DBA Planning Calendar 對 SAP 的數據庫進行備份,或者可以通過業務代碼 DB13 直接進入到 DBA Planning Calendar 頁面。在 DBA Planning Calendar 裡選取 Database Backup to Device 彈出選擇畫面,如圖 3 所示。

圖 3. Database Backup to Device 備份選擇頁面
DB2 備份與恢復性能優化及其在 SAP 系統中的實踐

查看原圖(大圖)

從選擇頁面中我們可以看到,其提供了備份方式(Backup Mode),備份類型(Backup Type)的選擇(關於備份方式和備份類型我們在這裡不進行深入的討論)。其他參數的對應關系如下:

壓縮(Compress):對應於 DB2 備份命令中的 COMPRESS 參數。

內部緩存數目(Number of Buffers):對應於 DB2 備份命令中的 WITH num-buff BUFFERS。

內部緩存大小(Buffer Size):對應於 DB2 備份命令中的 BUFFER buf-size,在這裡以頁為單位(4 KB)。

並行數目(Parallelism):對應於 DB2 備份命令中的 PARALLELISM 參數,通過指定該參數可以調整 db2bm 的數目。

優先級(Priority):對應於 DB2 備份命令中的 UTIL_IMPACT_PRIORITY,通過它我們可以控制 DB2 進行備份的速度。

目標路徑(Device/Directory):對應於 DB2 備份命令中的 To dir | dev,通過指定多個目標路徑我們可以調整 db2med 的數目。

上面我們已經知道系統具體的硬件環境為 4 核 AMD CPU,8GB 內存,2 塊 IBM SCSI 磁盤。那麼下面我們通過幾組不同的參數比較,來對比一下在不同參數下的 DB2 備份性能。

在備份時,比較明顯的提高備份速度的方法是改變 PARALLELISM 的值,如我們分別用表 1 中的參數通過 SAP 備份工具進行備份,其中 PARALLELISM 分別等於 2,4 和 8。運行結果如下圖 4 所示。從圖中我們可以看到,當我們使用 PARALLELISM 為 2 進行備份時,完成整個在線備份的時間大約為 1 個小時。而當使用 PARALLELISM 為 8 時,我們可以將在線備份的時間縮短到 40 分鐘左右。因此,通過增加 PARALLELISM 的參數值在一定程度上是可以提高備份速度。

但是,這也並不意味著 PARALLELISM 的值越大越好。我們需要考慮 CPU 的負載能力。例如在本例中,當我們把 PARALLELISM 的值增加到 16 時,備份時間反而增加到 72 分鐘。

表 1. PARALLELISM 參數值

  Parallelism Number of Buffers / Buffer Size Device / Directory Compress Priority 1 2 8 / 1024 D:\backup Y 100 2 4 8 / 1024 D:\backup Y 100 3 8 8 / 1024 D:\backup Y 100

圖 4. SAP 數據庫備份時間 – 調整 PARALLELISM
DB2 備份與恢復性能優化及其在 SAP 系統中的實踐

同樣,我們也可以通過增加備份的路徑數目來提高備份效率。其備份時的參數和結果如下表 2 和圖 5 所示。通過結果可以看出,我們也可以通過增加磁盤數目,從而提高磁盤在單位時間內的 I/O 數,來達到提高備份速度的目的。

表 2. To dir | dev 參數值

  Parallelism Number of Buffers / Buffer Size Device / Directory Compress Priority 1 1 8 / 1024 D:\backup Y 50 2 1 8 / 1024 D:\backup, F:\backup Y 50

圖 5. SAP 數據庫備份時間 – 多個存儲路徑備份
DB2 備份與恢復性能優化及其在 SAP 系統中的實踐

另外,通過使用壓縮功能也可以提高數據庫的備份速度。如下圖 6 所示。從圖中我們可以看到,采用壓縮功能的備份時間要遠遠小於不壓縮的備份時間。由於 DB2 數據壓縮功能是在備份時由數據庫對緩存中的數據進行實時的壓縮,例如:

采用壓縮的備份文件約為 13 GB

不采用壓縮的備份文件約為 89 GB

因此它可以有效減小備份文件的大小,即它也減小了備份時對磁盤 I/O 的請求數,因此提高了備份的效率。

圖 6. SAP 數據庫備份時間 – 壓縮和非壓縮
DB2 備份與恢復性能優化及其在 SAP 系統中的實踐

SAP 系統的恢復

在企業應用中進行數據庫恢復,通常是當系統出現故障或者其他意外情況導致系統不可用。那麼這時就需要我們能夠快速的將 SAP 數據庫恢復,以減少業務損失。因此,通過調整 RESTORE 參數來提高恢復性能就成為我們十分重要的選擇。

我們通過以下的一些實驗數據來對調整 RESTORE 參數進行進一步的說明。硬件環境與備份系統的環境相同。

當我們進行 SAP 數據庫恢復時,我們可以通過改變 PARALLELISM 的值來提高 DB2 數據庫恢復的速度。如圖 7 所示,通過如下命令對 SAP 系統的數據庫分別進行恢復。我們可以看到,當 PARALLELISM 設置為 8 時(即系統中有 8 個 db2bm 進程同時從表空間讀取數據)的恢復時間幾乎為 PARALLELISM 等於 1 時的一半。

RESTORE DATABASE HIA FROM d:\bkup WITH 8 BUFFERS BUFFER 1024 PARALLELISM 
RESTORE DATABASE HIA FROM d:\bkup WITH 8 BUFFERS BUFFER 1024 PARALLELISM 
RESTORE DATABASE HIA FROM d:\bkup WITH 8 BUFFERS BUFFER 1024 PARALLELISM 

圖 7. SAP 數據庫恢復時間 – 調整 PARALLELISM
DB2 備份與恢復性能優化及其在 SAP 系統中的實踐

另外,我們也可以通過從多個存儲路徑中進行數據庫恢復,從而提高數據庫的恢復速度。如下圖 8 所示。我們通過如下的命令從備份文件中恢復數據庫。從圖 7 中的數據我們可以看出,同時從兩個不同的磁盤目錄中進行恢復的速度在一定程度上要優於從單一磁盤目錄中進行恢復。其原因是在同一時刻,我們可以通過多個磁盤來獲取更多的 I/O 數,從而提高備份數據從磁盤讀取的速度。但是,這也取決於磁盤每秒鐘的 I/O 數和磁盤傳輸數據的速度,因此,在某些情況下,從多個不同磁盤目錄中恢復數據不一定要優於從單一磁盤中恢復。

RESTORE DATABASE HIA FROM 
d:\bkup
 
RESTORE DATABASE HIA FROM 
d:\bkup, f:\bkup

圖 8. SAP 數據庫恢復時間 – 從多個存儲路徑恢復
DB2 備份與恢復性能優化及其在 SAP 系統中的實踐

不同容量下的 DB2 備份和恢復策略

上面我們通過 SAP 系統的備份和恢復實例給出了在不同參數下的 DB2 數據庫的備份和恢復性能。但是在企業的實際應用中,通過調整 DB2 的備份和恢復參數不一定能夠達到理想的效果。通常,對於不同容量的數據庫,我們也需要制定不同的數據庫備份和恢復策略,使得我們能夠對數據庫進行快速的備份和恢復。SAP 推薦的 DB2 數據庫備份恢復策略如下圖 9 所示。

從下圖我們可以看到,SAP 的恢復策略按容量分為小規模應用,中等規模容量,大容量以及極大規模應用:

對於開發和測試的 SAP 數據庫,我們只需要每周對其進行一次在線備份即可。

對於中等規模容量的 SAP 生產系統來說,則我們需要每天進行在線備份。由於它的數據庫大小有限,所以一般來說,我們在幾個小時之內可以完成對它的在線備份。

當數據庫容量上升到大規模應用時,那麼每天進行在線備份就不是一個好的解決方案。在這種情況下,我們可能很難在幾個小時之內完成對數據庫的備份,並且會影響到白天正常的業務運轉。因此,在每天使用增量備份(Incremental Backup)就成為一種好的選擇,它可以減少所需備份的數據量,從而提高備份的速度。同時,我們需要在每個周末進行一次在線備份來對數據庫進行完整的備份。

當數據庫容量繼續上升後,使用增量備份也難以對數據庫進行快速的備份,那麼這時我們就需要使用分割鏡像(Split Mirror)技術對數據庫進行實時的備份。

圖 9. SAP 數據庫備份恢復策略
DB2 備份與恢復性能優化及其在 SAP 系統中的實踐

查看原圖(大圖)

結束語

本文介紹了 DB2 數據庫備份和恢復的基本工作原理,並對 DB2 數據庫備份和恢復的優化參數進行了詳細的解釋,同時通過在 SAP 系統中對 DB2 數據庫的備份和恢復的實例,進一步說明了通過調整優化參數,能夠提高在大數據容量下的數據庫備份和恢復效率。最後,我們也給出了在不同數據庫容量下的數據庫備份和恢復策略,供需要規劃 SAP 和 DB2 系統備份和恢復的讀者參考。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved