超大型Oracle數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的設(shè)計(jì)方法
一、概論
超大型系統(tǒng)的特點(diǎn)為:
1.處理的用戶數(shù)一般都超過百萬,有的還超過千萬,數(shù)據(jù)庫(kù)的數(shù)據(jù)量一般超過1TB;
2.系統(tǒng)必須提供實(shí)時(shí)響應(yīng)功能,系統(tǒng)需不停機(jī)運(yùn)行,要求系統(tǒng)有很高的可用性及可擴(kuò)展性。
為了能達(dá)到以上要求,除了需要性能優(yōu)越的計(jì)算機(jī)和海量存儲(chǔ)設(shè)備外,還需要先進(jìn)的數(shù)據(jù)庫(kù)結(jié)構(gòu)設(shè)計(jì)和優(yōu)化的應(yīng)用系統(tǒng)。
一般的超大型系統(tǒng)采用雙機(jī)或多機(jī)集群系統(tǒng)。下面以數(shù)據(jù)庫(kù)采用Oracle 8.0.6并行服務(wù)器為例來談?wù)劤笮蛿?shù)據(jù)庫(kù)設(shè)計(jì)方法:
·確定系統(tǒng)的ORACLE并行服務(wù)器應(yīng)用劃分策略
·數(shù)據(jù)庫(kù)物理結(jié)構(gòu)的設(shè)計(jì)
·系統(tǒng)硬盤的劃分及分配
·備份及恢復(fù)策略的考慮
二、Oracle并行服務(wù)器應(yīng)用劃分策略
Oracle并行服務(wù)器允許不同節(jié)點(diǎn)上的多個(gè)INSTANCE實(shí)例同時(shí)訪問一個(gè)數(shù)據(jù)庫(kù),以提高系統(tǒng)的可用性、可擴(kuò)展性及性能。Oracle并行服務(wù)器中的每個(gè)INSTANCE實(shí)例都可將共享數(shù)據(jù)庫(kù)中的表或索引的數(shù)據(jù)塊讀入本地的緩沖區(qū)中,這就意味著一個(gè)數(shù)據(jù)塊可存在于多個(gè)INSTANCE實(shí)例的SGA區(qū)中。那么保持這些緩沖區(qū)的數(shù)據(jù)的一致性就很重要。Oracle使用 PCM( Parallel Cache Management) 鎖維護(hù)緩沖區(qū)的一致性,Oracle同時(shí)通過I DLM( 集成的分布式鎖管理器)實(shí)現(xiàn)PCM 鎖,并通過專門的LCK進(jìn)程實(shí)現(xiàn)INSTANCE實(shí)例間的數(shù)據(jù)一致。
考慮這種情況:INSTANCE1對(duì)BLOCK X塊修改,這時(shí)INSTANCE2對(duì)BLOCK X塊也需要修改。Oracle并行服務(wù)器利用PCM鎖機(jī)制,使BLOCK X從INSTANCE 1的SGA區(qū)寫入數(shù)據(jù)庫(kù)數(shù)據(jù)文件中,又從數(shù)據(jù)文件中把BLOCK X塊讀入INSTANCE2的SGA區(qū)中。發(fā)生這種情況即為一個(gè)PING。PING使原來1個(gè)MEMORY IO可以完成的工作,變成2個(gè)DISK IO和1個(gè) MEMORY IO才能夠完成,如果系統(tǒng)中有過多的PING,將大大降低系統(tǒng)的性能。
Oracle并行服務(wù)器中的每個(gè)PCM鎖可管理多個(gè)數(shù)據(jù)塊。PCM鎖管理的數(shù)據(jù)塊的個(gè)數(shù)與分配給一個(gè)數(shù)據(jù)文件的PCM鎖的個(gè)數(shù)及該數(shù)據(jù)文件的大小有關(guān)。當(dāng)INSTANCE 1和INSTANCE 2要操作不同的BLOCK,如果這些BLOCK 是由同一個(gè)PCM 鎖管理的,仍然會(huì)發(fā)生PING。這些PING稱為FALSE PING。當(dāng)多個(gè)INSTANCE訪問相同的BLOCK而產(chǎn)生的PING是TRUE PING。
合理的應(yīng)用劃分使不同的應(yīng)用訪問不同的數(shù)據(jù),可避免或減少TRUE PING;通過給FALSE PING較多的數(shù)據(jù)文件分配更多的PCM鎖可減少 FALSE PING的次數(shù),增加PCM鎖不能減少TRUE PING。
所以, Oracle并行服務(wù)器設(shè)計(jì)的目的是使系統(tǒng)交易處理合理的分布在INSTANCE實(shí)例間,以最小化PING,同時(shí)合理的分配PCM鎖,減少FALSE PING。設(shè)計(jì)的關(guān)鍵是找出可能產(chǎn)生的沖突,從而決定應(yīng)用劃分的策略。應(yīng)用劃分有如下四種方法:
1.根據(jù)功能模塊劃分,不同的節(jié)點(diǎn)運(yùn)行不同的應(yīng)用
2.根據(jù)用戶劃分,不同類型的用戶運(yùn)行在不同的節(jié)點(diǎn)上
3.根據(jù)數(shù)據(jù)劃分,不同的節(jié)點(diǎn)訪問不同的數(shù)據(jù)或索引
4.根據(jù)時(shí)間劃分,不同的應(yīng)用在不同的時(shí)間段運(yùn)行
應(yīng)用劃分的兩個(gè)重要原則是使PING最小化及使各節(jié)點(diǎn)的負(fù)載大致均衡。
三、數(shù)據(jù)庫(kù)物理結(jié)構(gòu)的設(shè)計(jì)
數(shù)據(jù)庫(kù)物理結(jié)構(gòu)設(shè)計(jì)包括確定表及索引的物理存儲(chǔ)參數(shù),確定及分配數(shù)據(jù)庫(kù)表空間,確定初始的回滾段,臨時(shí)表空間,redo log files等,并確定主要的初始化參數(shù)。物理設(shè)計(jì)的目的是提高系統(tǒng)的性能。整個(gè)物理設(shè)計(jì)的參數(shù)可以根據(jù)實(shí)際運(yùn)行情況作調(diào)整。
● 表及索引數(shù)據(jù)量估算及物理存儲(chǔ)參數(shù)的設(shè)置
表及索引的存儲(chǔ)容量估算是根據(jù)其記錄長(zhǎng)度及估算的最大記錄數(shù)確定的。在容量計(jì)算中考慮了數(shù)據(jù)塊的頭開銷及記錄和字段的頭開銷等等。表及索引的initial和next存儲(chǔ)參數(shù)一般設(shè)為相等,pctincrease設(shè)為0。
● 表空間的設(shè)計(jì)
Oracle數(shù)據(jù)庫(kù)的表和索引是透過表空間tablespace存儲(chǔ)在數(shù)據(jù)庫(kù)中的。在tablespace設(shè)計(jì)時(shí)一般作以下考慮:
1、一般較大的表或索引單獨(dú)分配一個(gè)tablespace。
2、Read only對(duì)象或Read mostly對(duì)象分成一組,存在對(duì)應(yīng)的tablespace中。
3、若tablespace中的對(duì)象皆是read only對(duì)象,可將tablespace設(shè)置成read only模式,在備份時(shí),read only tablespace只需備份一次。
4、高頻率insert的對(duì)象分成一組,存在對(duì)應(yīng)的tablespace中。
5、增、刪、改的對(duì)象分成一組,存在對(duì)應(yīng)的tablespace中。
6、表和索引分別存于不同的tablespace。
7、存于同一個(gè) tablespace中的表(或索引)的extent 大小最好成倍數(shù)關(guān)系,有利于空間的重利用和減少碎片。
● DB BLOCK SIZE
超大型數(shù)據(jù)庫(kù)DB BLOCK SIZE一般在4KB 至 64KB,而最常用的是8KB、 16KB或32KB。選用較大的DB BLOCK SIZE可使INDEX的高度降低,也會(huì)提高IO效率。
● Redo Log Files
Oracle進(jìn)程redo log writer (LGWR)將日志寫入日志文件。一般日志文件最好建在專用的鏡像盤上。日志文件組的個(gè)數(shù)及文件的大小的設(shè)定與系統(tǒng)交易量的大小有關(guān)。ORACLE并行服務(wù)器中每個(gè)INSTANCE使用各自的一組rego log files。一般的每組日志文件的個(gè)數(shù)為3-7個(gè),每個(gè)的大小為200MB-500MB。
● 數(shù)據(jù)文件大小
建議用標(biāo)準(zhǔn)的文件大小,如200M、1GB、2GB、4GB、8GB等,可簡(jiǎn)化空間的維護(hù)工作。
● 回滾段
回滾段一般建在專用的表空間中。每一個(gè)INSTANCE實(shí)例擁有各自的回滾段。設(shè)置回滾段的一般原則是: initial 及 next 存儲(chǔ)參數(shù)的值是相等的,同時(shí)還是DB BLOCK SIZE的倍數(shù)。每個(gè)回滾段的minextents設(shè)為20,optimal參數(shù)的值保證回滾段縮小時(shí)不低于20個(gè)extents。
● 臨時(shí)表空間
臨時(shí)表空間一般建在專用的表空間中。每一個(gè)INSTANCE實(shí)例擁有各自的臨時(shí)表空間。這樣使用臨時(shí)表空間時(shí)不會(huì)有PING。設(shè)置臨時(shí)表空間的initial=next。
四、系統(tǒng)硬盤的劃分及分配
在多機(jī)集群環(huán)境下,Oracle并行服務(wù)器通過操作系統(tǒng)提供的DRD服務(wù)來共享同一個(gè)數(shù)據(jù)庫(kù)。每一個(gè)INSTANCE對(duì)數(shù)據(jù)庫(kù)的數(shù)據(jù)文件的訪問都是通過該數(shù)據(jù)文件所在的DRD服務(wù)進(jìn)行的。
考慮以下情況:主機(jī)1上有DRD服務(wù)1,該服務(wù)對(duì)應(yīng)的數(shù)據(jù)文件有1、2、13、35、67等,這時(shí)如果主機(jī)2上的INSTANCE2需要讀取數(shù)據(jù)文件13,通過DRD服務(wù)調(diào)度,主機(jī)1通過DRD服務(wù)訪問磁盤陣列上的數(shù)據(jù)文件13,把INSTANCE2需要的數(shù)據(jù)讀到內(nèi)存,然后通過MEMORY IO把數(shù)據(jù)傳到主機(jī)2的INSTANCE2。寫操作是讀操作的逆過程。
通過以上分析可知,系統(tǒng)硬盤的劃分及分配的原則是盡量減少M(fèi)EMORY IO。
五、備份及恢復(fù)策略的考慮
數(shù)據(jù)庫(kù)的備份與恢復(fù)在系統(tǒng)設(shè)計(jì)中占很重要的地位。好的備份及恢復(fù)策略可以降低系統(tǒng)的運(yùn)行風(fēng)險(xiǎn),減少因硬件故障而造成的損失。
Oracle備份方法:
1.物理備份
將數(shù)據(jù)庫(kù)的物理文件通過操作系統(tǒng)的命令或工具備份到備份介質(zhì)上。物理備份往往用于存儲(chǔ)介質(zhì)故障時(shí)恢復(fù)數(shù)據(jù)庫(kù)系統(tǒng)的數(shù)據(jù)。
根據(jù)數(shù)據(jù)庫(kù)運(yùn)行方式的不同,可進(jìn)行不同的物理備份:
a)物理冷備份(offline backup)
物理冷備份要求數(shù)據(jù)庫(kù)在關(guān)閉(所有INSTANCEs停止)的情況下進(jìn)行。這種備份必須是完全備份,即需備份所有的數(shù)據(jù)文件、控制文件(control file)、日志文件(redo log file)、初始參數(shù)文件等等。
物理冷備份的步驟簡(jiǎn)單,但要求系統(tǒng)能夠停止。
b)物理熱備份(online backup)
物理熱備份是在數(shù)據(jù)庫(kù)系統(tǒng)正常運(yùn)行的情況下進(jìn)行的數(shù)據(jù)庫(kù)備份。這種備份可以是數(shù)據(jù)庫(kù)的部分備份,既備份數(shù)據(jù)庫(kù)的某個(gè)表空間(tablespace)或某個(gè)數(shù)據(jù)文件(datafile),也可備份控制文件(control file)。
物理熱備份要求數(shù)據(jù)庫(kù)在ARCHIVELOG模式下運(yùn)行。這種備份一般用于應(yīng)用系統(tǒng)不能停機(jī)的情況。
c)歸檔日志文件備份(archived log file backup)
要使數(shù)據(jù)庫(kù)系統(tǒng)能夠恢復(fù)到故障點(diǎn)前一時(shí)刻狀態(tài),或恢復(fù)到某指定時(shí)刻狀態(tài),數(shù)據(jù)庫(kù)必須采用ARCHIVELOG模式。在ARCHIVELOG模式下,數(shù)據(jù)庫(kù)系統(tǒng)會(huì)產(chǎn)生歸檔日志文件(archive log files)。歸檔日志文件也需備份到備份介質(zhì)上。在恢復(fù)時(shí),這些文件可使數(shù)據(jù)庫(kù)恢復(fù)到最近狀態(tài)。
歸檔日志文件產(chǎn)生在指定目錄下,這些文件一生成就可以備份到備份介質(zhì)上,DBA可根據(jù)磁盤空間情況,定時(shí)將它們備份出去。
2.邏輯備份
邏輯備份是通過Oracle提供的Export工具,將數(shù)據(jù)庫(kù)的結(jié)構(gòu)定義及其數(shù)據(jù)卸出到特定格式的文件中,并備份該文件。
在實(shí)際應(yīng)用中,邏輯備份與物理備份并用。一般來說,物理備份用于磁盤介質(zhì)損壞或數(shù)據(jù)文件損壞;邏輯備份用于數(shù)據(jù)庫(kù)中的某些對(duì)象被破壞或用戶誤操作。
備份策略的考慮主要在以下三個(gè)方面:
● 存儲(chǔ)空間
● 對(duì)現(xiàn)行運(yùn)行的系統(tǒng)的性能影響
● 恢復(fù)時(shí)間的影響
如果需要節(jié)省空間和恢復(fù)時(shí)間就需要增加備份的頻率,但是備份操作會(huì)明顯增加現(xiàn)行運(yùn)行的系統(tǒng)的負(fù)載。、
Oracle的恢復(fù)方法
根據(jù)不同的備份方法采用不同的恢復(fù)方法。
使用物理備份恢復(fù)
Oracle提供了三種恢復(fù)手段:
1、數(shù)據(jù)庫(kù)級(jí)的恢復(fù)
2、表空間(Tablespace)的恢復(fù)
3、數(shù)據(jù)文件的恢復(fù)
數(shù)據(jù)庫(kù)級(jí)的恢復(fù)要求數(shù)據(jù)庫(kù)在關(guān)閉但Mount的狀態(tài)下進(jìn)行。表空間及數(shù)據(jù)文件的恢復(fù)可在數(shù)據(jù)庫(kù)運(yùn)行的狀態(tài)下進(jìn)行。
使用邏輯備份恢復(fù)
當(dāng)數(shù)據(jù)庫(kù)中的某一對(duì)象被損壞,或用戶的誤操作使數(shù)據(jù)破壞(如誤刪表) 時(shí)可用邏輯備份恢復(fù)。用邏輯備份只能恢復(fù)到備份時(shí)刻的狀態(tài)。
