超大型Oracle數據庫應用系統的設計方法
一、概論
超大型系統的特點為:
1.處理的用戶數一般都超過百萬,有的還超過千萬,數據庫的數據量一般超過1TB;
2.系統必須提供實時響應功能,系統需不停機運行,要求系統有很高的可用性及可擴展性。
為了能達到以上要求,除了需要性能優越的計算機和海量存儲設備外,還需要先進的數據庫結構設計和優化的應用系統。
一般的超大型系統采用雙機或多機集群系統。下面以數據庫采用Oracle 8.0.6并行服務器為例來談談超大型數據庫設計方法:
·確定系統的ORACLE并行服務器應用劃分策略
·數據庫物理結構的設計
·系統硬盤的劃分及分配
·備份及恢復策略的考慮
二、Oracle并行服務器應用劃分策略
Oracle并行服務器允許不同節點上的多個INSTANCE實例同時訪問一個數據庫,以提高系統的可用性、可擴展性及性能。Oracle并行服務器中的每個INSTANCE實例都可將共享數據庫中的表或索引的數據塊讀入本地的緩沖區中,這就意味著一個數據塊可存在于多個INSTANCE實例的SGA區中。那么保持這些緩沖區的數據的一致性就很重要。Oracle使用 PCM( Parallel Cache Management) 鎖維護緩沖區的一致性,Oracle同時通過I DLM( 集成的分布式鎖管理器)實現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鎖,減少FALSE PING。設計的關鍵是找出可能產生的沖突,從而決定應用劃分的策略。應用劃分有如下四種方法:
1.根據功能模塊劃分,不同的節點運行不同的應用
2.根據用戶劃分,不同類型的用戶運行在不同的節點上
3.根據數據劃分,不同的節點訪問不同的數據或索引
4.根據時間劃分,不同的應用在不同的時間段運行
應用劃分的兩個重要原則是使PING最小化及使各節點的負載大致均衡。
三、數據庫物理結構的設計
數據庫物理結構設計包括確定表及索引的物理存儲參數,確定及分配數據庫表空間,確定初始的回滾段,臨時表空間,redo log files等,并確定主要的初始化參數。物理設計的目的是提高系統的性能。整個物理設計的參數可以根據實際運行情況作調整。
● 表及索引數據量估算及物理存儲參數的設置
表及索引的存儲容量估算是根據其記錄長度及估算的最大記錄數確定的。在容量計算中考慮了數據塊的頭開銷及記錄和字段的頭開銷等等。表及索引的initial和next存儲參數一般設為相等,pctincrease設為0。
● 表空間的設計
Oracle數據庫的表和索引是透過表空間tablespace存儲在數據庫中的。在tablespace設計時一般作以下考慮:
1、一般較大的表或索引單獨分配一個tablespace。
2、Read only對象或Read mostly對象分成一組,存在對應的tablespace中。
3、若tablespace中的對象皆是read only對象,可將tablespace設置成read only模式,在備份時,read only tablespace只需備份一次。
4、高頻率insert的對象分成一組,存在對應的tablespace中。
5、增、刪、改的對象分成一組,存在對應的tablespace中。
6、表和索引分別存于不同的tablespace。
7、存于同一個 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。
五、備份及恢復策略的考慮
數據庫的備份與恢復在系統設計中占很重要的地位。好的備份及恢復策略可以降低系統的運行風險,減少因硬件故障而造成的損失。
Oracle備份方法:
1.物理備份
將數據庫的物理文件通過操作系統的命令或工具備份到備份介質上。物理備份往往用于存儲介質故障時恢復數據庫系統的數據。
根據數據庫運行方式的不同,可進行不同的物理備份:
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提供的Export工具,將數據庫的結構定義及其數據卸出到特定格式的文件中,并備份該文件。
在實際應用中,邏輯備份與物理備份并用。一般來說,物理備份用于磁盤介質損壞或數據文件損壞;邏輯備份用于數據庫中的某些對象被破壞或用戶誤操作。
備份策略的考慮主要在以下三個方面:
● 存儲空間
● 對現行運行的系統的性能影響
● 恢復時間的影響
如果需要節省空間和恢復時間就需要增加備份的頻率,但是備份操作會明顯增加現行運行的系統的負載。、
Oracle的恢復方法
根據不同的備份方法采用不同的恢復方法。
使用物理備份恢復
Oracle提供了三種恢復手段:
1、數據庫級的恢復
2、表空間(Tablespace)的恢復
3、數據文件的恢復
數據庫級的恢復要求數據庫在關閉但Mount的狀態下進行。表空間及數據文件的恢復可在數據庫運行的狀態下進行。
使用邏輯備份恢復
當數據庫中的某一對象被損壞,或用戶的誤操作使數據破壞(如誤刪表) 時可用邏輯備份恢復。用邏輯備份只能恢復到備份時刻的狀態。