背景
隨著創建的數據量不斷增長,為了容納這些數據,公共和企業資料庫也在不斷擴張。就在 4 年前,WinterCorp 評定世界最大的資料庫是超過 100 TB 的數據倉庫。在這項評選的 10 年歷史當中,Yahoo! 的一個資料庫是首個超過 100 TB 的系統。
定義
沒有標準的定義,單純的大小不再是唯一的評判標準,而只是一個因素。一種比較可行的定義來自 Robert Hollebeek 博士,他是賓夕法尼亞大學的物理學教授,與人共創了 National Scalable Cluster Project,多次因在分散式集群系統和數據挖掘方面的工作獲得國際大獎。Hollebeek 說,在 5 年前,一個 TB 級資料庫就可以算是“超大”資料庫,但是,如今的資料庫必須是 PB 級的才可以稱之為超大。“另一種定義是,如果一個資料庫的索引即使是超級計算機或計算機集群的 TB 級物理記憶體都無法容納,那么可以稱之為超大資料庫,”他說。
存在的問題
需要那么多索引的資料庫的確稱得上超大,這種資料庫的性能和資料庫管理是個很大的問題。
Hollebeek 說,當存放數據所需的硬體總量已成問題時,這樣的資料庫也可稱之為超大資料庫:“當您有數千個磁碟單元,或者放並行計算機的架子擺滿整個房間時,就變得難以管理了。”
Confederacion Espanola de Cajas de Ahorros(CECA)是西班牙儲蓄銀行聯合會,它的 IBM Information Champion Manuel Gomez Burriel 也認為,易管理性可以將通常意義的“大型”數據與超大資料庫區分開來。“通常的管理任務在規定的時間內已經無法完成,” Gomez 說道。恢復一個損壞的資料庫需要數小時的時間,然而可用的時間只有數分鐘。性能也會受影響, 因為資料庫實在太大,資料庫中的任何有效部分都無法裝入記憶體中的快取。僅僅是回響應用程式對數據的請求就會帶來難以接受的 CPU 開銷。
現狀
仔細研究一個非常大的資料庫,可以從中得出一些教訓,這些教訓同樣適用於其他大的或不那么大的資料庫。Hollebeek 是 National Digital Mammography Archive(NDMA)的技術主管,NDMA 是為容納一個以每年 28 PB 的速度增長的資料庫而設計的系統。NDMA 由 美國國立衛生研究院(National Institutes of Health)資助,它建立了一個分散式系統格線,用於醫療記錄和圖像的存儲。 該系統存儲乳房攝影檢查、MRI 掃描等組成一個“病例”的相關檔案,每個病例可能占 1 GB,而這樣的病例有數百萬個。 除了解決存儲和訪問大量數據的問題外,NDMA 還必須處理與存儲在分布在不同地理位置的系統上的密封式(siloed)數據相關的問題——這是全球企業都存在的一個相同的問題。 為了與四家參與該項目的研究醫院建立連線,NDMA 在每家醫院安裝了加密的、安全的線路和“接入點(point of presence)”,它們是用於加密檔案和使用專用網路協定有效傳送大塊數據的硬體。
“我們的項目規模非常大,而且不能喪失任何醫療數據。我們需要穩定的、高度可靠的技術,這種技術還必須真正快速,並且可以並行,因為系統的結構基於構建並行計算機集群。” Hollebeek 說,“它必須能夠容錯,因為索引表崩潰或消失是不可容忍的。” NDMA 使用了 IBM DB2 Parallel Edition 軟體來存儲 資料庫索引。NDMA 將實際圖像數據存儲在並行磁碟矩陣上的平面檔案資料庫中,由那裡用於作業系統(此處為 Linux)的本地檔案系統管理。
建議
關於處理通過廣域網(WAN)連線的超大資料庫的幾點建議:
注意通過網路(無論是 Internet 還是私有網)傳送大量數據的問題。要尋找高效地傳送大量數據的方法,例如 在傳送和接收位置安裝接入點,或者使用傳送大型(多 MB)數據塊的協定。
不要改變接收的數據的格式。無損的壓縮雖好,但是為了在大型資料庫中節省少量的空間而重新格式化和存儲接收的數據,會導致更多問題,實屬不值。例如,對於醫療數據,如果在更改格式時出錯,並導致數據不可用,那么就是特別嚴重的問題。
一旦索引表再也無法裝入記憶體,資料庫的性能就會直線下降,所以應該儘量升級記憶體,以便存放那些表。 然後,利用數據中的任何並行結構,通過聚集有效地增加容量。如果不行,則為索引再建立索引。
系統特點
超大型系統的特點為:
1.處理的用戶數一般都超過百萬,有的還超過千萬,資料庫的數據量一般超過1TB;
2.系統必須提供實時回響功能,系統需不停機運行,要求系統有很高的可用性及可擴展性。
為了能達到以上要求,除了需要性能優越的計算機和海量存儲設備外,還需要先進的資料庫結構設計和最佳化的套用系統。
設計方法
一般的超大型系統採用雙機或多機集群系統。下面以資料庫採用ORACLE 8.0.6並行伺服器為例來談談超大型資料庫設計方法:
·確定系統的ORACLE並行伺服器套用劃分策略
·資料庫物理結構的設計
·系統硬碟的劃分及分配
·備份及恢復策略的考慮
ORACLE並行伺服器套用劃分策略
ORACLE並行伺服器允許不同節點上的多個
INSTANCE實例同時訪問一個
資料庫,以提高系統的可用性、可擴展性及性能。
ORACLE並行伺服器中的每個INSTANCE實例都可將共享資料庫中的表或索引的數據塊讀入本地的緩衝區中,這就意味著一個數據塊可存在於多個INSTANCE實例的SGA區中。那么保持這些緩衝區的數據的一致性就很重要。ORACLE 使用 PCM( Parallel Cache Management) 鎖維護緩衝區的一致性,ORACLE同時通過IDLM( 集成的分散式鎖管理器)實現PCM 鎖,並通過專門的LCK進程實現INSTANCE實例間的數據一致。
考慮這種情況:INSTANCE1對BLOCK X塊修改,這時INSTANCE2對BLOCK X塊也需要修改。ORACLE並行伺服器利用PCM鎖機制,使BLOCK X從INSTANCE 1的SGA區寫入資料庫數據檔案中,又從數據檔案中把BLOCK X塊讀入INSTANCE2的SGA區中。發生這種情況即為一個PING。PING使原來1個MEMORY IO可以完成的工作,變成2個DISK IO和1個 MEMORY IO才能夠完成,如果系統中有過多的PING,將大大降低系統的性能。
ORACLE並行伺服器中的每個PCM鎖可管理多個數據塊。PCM鎖管理的數據塊的個數與分配給一個數據檔案的PCM鎖的個數及該數據檔案的大小有關。當INSTANCE 1和INSTANCE 2要操作不同的BLOCK,如果這些BLOCK 是由同一個PCM 鎖管理的,仍然會發生PING。這些PING稱為FALSE PING。當多個INSTANCE訪問相同的BLOCK而產生的PING是TRUE PING。
合理的套用劃分使不同的套用訪問不同的數據,可避免或減少TRUE PING;通過給FALSE PING較多的數據檔案分配更多的PCM鎖可減少 FALSE PING的次數,增加PCM鎖不能減少TRUE PING。
所以,
ORACLE並行伺服器設計的目的是使系統交易處理合理的分布在
INSTANCE實例間,以最小化PING,同時合理的分配PCM鎖,減少FALSEPING。設計的關鍵是找出可能產生的衝突,從而決定套用劃分的策略。套用劃分有如下四種方法:
根據功能模組劃分,不同的節點運行不同的套用
根據用戶劃分,不同類型的用戶運行在不同的節點上
根據數據劃分,不同的節點訪問不同的數據或索引
根據時間劃分,不同的套用在不同的時間段運行
套用劃分的兩個重要原則是使
PING最小化及使各節點的負載大致均衡。
資料庫物理結構的設計
資料庫物理結構設計包括確定表及索引的物理存儲參數,確定及分配
資料庫表空間,確定初始的回滾段,臨時表空間,redo log files等,並確定主要的初始化參數。物理設計的目的是提高系統的性能。整個物理設計的參數可以根據實際運行情況作調整。
● 表及索引數據量估算及物理存儲參數的設定
表及索引的存儲容量估算是根據其記錄長度及估算的最大記錄數確定的。在容量計算中考慮了數據塊的頭開銷及記錄和欄位的頭開銷等等。表及索引的initial和next存儲參數一般設為相等,pctincrease設為0。
● 表空間的設計
ORACLE資料庫的表和索引是透過表空間tablespace存儲在資料庫中的。在tablespace設計時一般作以下考慮:
一般較大的表或索引單獨分配一個tablespace。
Read only對象或Read mostly對象分成一組,存在對應的tablespace中。
若tablespace中的對象皆是read only對象,可將tablespace設定成read only模式,在備份時,read only tablespace只需備份一次。
高頻率insert的對象分成一組,存在對應的tablespace中。
增、刪、改的對象分成一組,存在對應的tablespace中。
表和索引分別存於不同的tablespace。
存於同一個 tablespace中的表(或索引)的extent 大小最好成倍數關係,有利於空間的重利用和減少碎片。
● DB BLOCK SIZE
超大型資料庫DB BLOCK SIZE一般在4KB 至 64KB,而最常用的是8KB、 16KB或32KB。選用較大的DB BLOCK SIZE可使INDEX的高度降低,也會提高IO效率。
● Redo Log Files
ORACLE 使用專用的進程redo log writer (
LGWR)將日誌寫入日誌檔案。一般日誌檔案最好建在專用的鏡像盤上。日誌檔案組的個數及檔案的大小的設定與系統交易量的大小有關。ORACLE並行伺服器中每個INSTANCE使用各自的一組rego log files。一般的每組日誌檔案的個數為3-7個,每個的大小為200MB-500MB。
● 數據檔案大小
建議用標準的
檔案大小,如200M、1GB、2GB、4GB、8GB等,可簡化空間的維護工作。
● 回滾段
回滾段一般建在專用的表空間中。每一個INSTANCE實例擁有各自的回滾段。設定回滾段的一般原則是: initial 及 next 存儲參數的值是相等的,同時還是DB BLOCK SIZE的倍數。每個回滾段的minextents設為20,optimal參數的值保證回滾段縮小時不低於20個extents。
● 臨時表空間
臨時表空間一般建在專用的表空間中。每一個INSTANCE實例擁有各自的臨時表空間。這樣使用臨時表空間時不會有PING。設定臨時表空間的initial=next。
系統硬碟的劃分及分配
在多機集群環境下,
ORACLE並行伺服器通過作業系統提供的DRD服務來共享同一個資料庫。每一個INSTANCE對資料庫的數據檔案的訪問都是通過該數據檔案所在的DRD服務進行的。
考慮以下情況:主機1上有DRD服務1,該服務對應的數據檔案有1、2、13、35、67等,這時如果主機2上的INSTANCE2需要讀取數據檔案13,通過DRD服務調度,主機1通過DRD服務訪問磁碟陣列上的數據檔案13,把INSTANCE2需要的數據讀到記憶體,然後通過MEMORY IO把數據傳到主機2的INSTANCE2。寫操作是讀操作的逆過程。
通過以上分析可知,系統硬碟的劃分及分配的原則是儘量減少MEMORY IO。
備份及恢復策略的考慮
資料庫的備份與恢復在系統設計中占很重要的地位。好的備份及恢復策略可以降低系統的運行風險,減少因硬體故障而造成的損失。
1.ORACLE備份方法:
物理備份將資料庫的物理檔案通過作業系統的命令或工具備份到備份介質上。物理備份往往用於存儲介質故障時恢複數據庫系統的數據。
根據資料庫運行方式的不同,可進行不同的物理備份:
a)物理冷備份(offline backup)
物理冷備份要求資料庫在關閉(所有INSTANCEs停止)的情況下進行。這種備份必須是完全備份,即需備份所有的數據檔案、控制檔案(control file)、日誌檔案(redo log file)、初始參數檔案等等。
物理冷備份的步驟簡單,但要求系統能夠停止。
b)物理熱備份(online backup)
物理熱備份是在資料庫系統正常運行的情況下進行的資料庫備份。這種備份可以是資料庫的部分備份,既備份資料庫的某個表空間(tablespace)或某個數據檔案(datafile),也可備份控制檔案(control file)。
物理熱備份要求資料庫在ARCHIVELOG模式下運行。這種備份一般用於套用系統不能停機的情況。
c)歸檔日誌檔案備份(archived log file backup)
要使資料庫系統能夠恢復到故障點前一時刻狀態,或恢復到某指定時刻狀態,資料庫必須採用ARCHIVELOG模式。在ARCHIVELOG模式下,資料庫系統會產生歸檔日誌檔案(archive log files)。歸檔日誌檔案也需備份到備份介質上。在恢復時,這些檔案可使資料庫恢復到最近狀態。
歸檔日誌檔案產生在指定目錄下,這些檔案一生成就可以備份到備份介質上,DBA可根據磁碟空間情況,定時將它們備份出去。
2.邏輯備份
在實際套用中,邏輯備份與物理備份並用。一般來說,物理備份用於磁碟介質損壞或數據檔案損壞;邏輯備份用於資料庫中的某些對象被破壞或用戶誤操作。
備份策略的考慮主要在以下三個方面:
● 存儲空間
● 對現行運行的系統的性能影響
● 恢復時間的影響
如果需要節省空間和恢復時間就需要增加備份的頻率,但是備份操作會明顯增加現行運行的系統的負載。
ORACLE的恢複方法
根據不同的備份方法採用不同的恢複方法。
使用物理備份恢復
ORACLE提供了三種恢復手段:
1、資料庫級的恢復
2、表空間(Tablespace)的恢復
3、數據檔案的恢復
資料庫級的恢復要求資料庫在關閉但
Mount的狀態下進行。表空間及數據檔案的恢復可在資料庫運行的狀態下進行。
使用邏輯備份恢復
當資料庫中的某一對象被損壞,或用戶的誤操作使數據破壞(如誤刪表) 時可用邏輯備份恢復。用邏輯備份只能恢復到備份時刻的狀態。