一
概論
超大型系統的特點為
處理的用戶數一般都超過百萬
有的還超過千萬
數據庫的數據量一般超過
TB
系統必須提供實時響應功能
系統需不停機運行
要求系統有很高的可用性及可擴展性
為了能達到以上要求
除了需要性能優越的計算機和海量存儲設備外
還需要先進的數據庫結構設計和優化的應用系統
一般的超大型系統采用雙機或多機集群系統
下面以數據庫采用ORACLE
並行服務器為例來談談超大型數據庫設計方法
·確定系統的ORACLE並行服務器應用劃分策略
·數據庫物理結構的設計
·系統硬盤的劃分及分配
·備份及恢復策略的考慮
二
ORACLE並行服務器應用劃分策略
ORACLE並行服務器允許不同節點上的多個INSTANCE實例同時訪問一個數據庫
以提高系統的可用性
可擴展性及性能
ORACLE並行服務器中的每個INSTANCE實例都可將共享數據庫中的表或索引的數據塊讀入本地的緩沖區中
這就意味著一個數據塊可存在於多個INSTANCE實例的SGA區中
那麼保持這些緩沖區的數據的一致性就很重要
ORACLE 使用 PCM( Parallel Cache Management) 鎖維護緩沖區的一致性
ORACLE同時通過I DLM( 集成的分布式鎖管理器)實現PCM 鎖
並通過專門的LCK進程實現INSTANCE實例間的數據一致
考慮這種情況
INSTANCE
對BLOCK X塊修改
這時INSTANCE
對BLOCK X塊也需要修改
ORACLE並行服務器利用PCM鎖機制
使BLOCK X從INSTANCE
的SGA區寫入數據庫數據文件中
又從數據文件中把BLOCK X塊讀入INSTANCE
的SGA區中
發生這種情況即為一個PING
PING使原來
個MEMORY IO可以完成的工作
變成
個DISK IO和
個 MEMORY IO才能夠完成
如果系統中有過多的PING
將大大降低系統的性能
ORACLE並行服務器中的每個PCM鎖可管理多個數據塊
PCM鎖管理的數據塊的個數與分配給一個數據文件的PCM鎖的個數及該數據文件的大小有關
當INSTANCE
和INSTANCE
要操作不同的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
設計的關鍵是找出可能產生的沖突
從而決定應用劃分的策略
應用劃分有如下四種方法:
根據功能模塊劃分
不同的節點運行不同的應用
根據用戶劃分
不同類型的用戶運行在不同的節點上
根據數據劃分
不同的節點訪問不同的數據或索引
根據時間劃分
不同的應用在不同的時間段運行
應用劃分的兩個重要原則是使PING最小化及使各節點的負載大致均衡
三
數據庫物理結構的設計
數據庫物理結構設計包括確定表及索引的物理存儲參數
確定及分配數據庫表空間
確定初始的回滾段
臨時表空間
redo log files等
並確定主要的初始化參數
物理設計的目的是提高系統的性能
整個物理設計的參數可以根據實際運行情況作調整
● 表及索引數據量估算及物理存儲參數的設置
表及索引的存儲容量估算是根據其記錄長度及估算的最大記錄數確定的
在容量計算中考慮了數據塊的頭開銷及記錄和字段的頭開銷等等
表及索引的initial和next存儲參數一般設為相等
pctincrease設為
● 表空間的設計
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一般在
KB 至
KB
而最常用的是
KB
KB或
KB
選用較大的DB BLOCK SIZE可使INDEX的高度降低
也會提高IO效率
● Redo Log Files
ORACLE 使用專用的進程redo log writer (LGWR)將日志寫入日志文件
一般日志文件最好建在專用的鏡像盤上
日志文件組的個數及文件的大小的設定與系統交易量的大小有關
ORACLE並行服務器中每個INSTANCE使用各自的一組rego log files
一般的每組日志文件的個數為
個
每個的大小為
MB-
MB
● 數據文件大小
建議用標准的文件大小
如
M
1GB
2GB
GB
GB等
可簡化空間的維護工作
● 回滾段
回滾段一般建在專用的表空間中
每一個INSTANCE實例擁有各自的回滾段
設置回滾段的一般原則是
initial 及 next 存儲參數的值是相等的
同時還是DB BLOCK SIZE的倍數
每個回滾段的minextents設為
optimal參數的值保證回滾段縮小時不低於
個extents
● 臨時表空間
臨時表空間一般建在專用的表空間中
每一個INSTANCE實例擁有各自的臨時表空間
這樣使用臨時表空間時不會有PING
設置臨時表空間的initial=next
四
系統硬盤的劃分及分配
在多機集群環境下
ORACLE並行服務器通過操作系統提供的DRD服務來共享同一個數據庫
每一個INSTANCE對數據庫的數據文件的訪問都是通過該數據文件所在的DRD服務進行的
考慮以下情況
主機
上有DRD服務
該服務對應的數據文件有
等
這時如果主機
上的INSTANCE
需要讀取數據文件
通過DRD服務調度
主機
通過DRD服務訪問磁盤陣列上的數據文件
把INSTANCE
需要的數據讀到內存
然後通過MEMORY IO把數據傳到主機
的INSTANCE
寫操作是讀操作的逆過程
通過以上分析可知
系統硬盤的劃分及分配的原則是盡量減少MEMORY IO
五
備份及恢復策略的考慮
數據庫的備份與恢復在系統設計中占很重要的地位
好的備份及恢復策略可以降低系統的運行風險
減少因硬件故障而造成的損失
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可根據磁盤空間情況
定時將它們備份出去
邏輯備份
邏輯備份是通過ORACLE提供的Export工具
將數據庫的結構定義及其數據卸出到特定格式的文件中
並備份該文件
在實際應用中
邏輯備份與物理備份並用
一般來說
物理備份用於磁盤介質損壞或數據文件損壞
邏輯備份用於數據庫中的某些對象被破壞或用戶誤操作
備份策略的考慮主要在以下三個方面
● 存儲空間
● 對現行運行的系統的性能影響
● 恢復時間的影響
如果需要節省空間和恢復時間就需要增加備份的頻率
但是備份操作會明顯增加現行運行的系統的負載
ORACLE的恢復方法
根據不同的備份方法采用不同的恢復方法
使用物理備份恢復
ORACLE提供了三種恢復手段
數據庫級的恢復
表空間(Tablespace)的恢復
數據文件的恢復
數據庫級的恢復要求數據庫在關閉但Mount的狀態下進行
表空間及數據文件的恢復可在數據庫運行的狀態下進行
使用邏輯備份恢復
當數據庫中的某一對象被損壞
或用戶的誤操作使數據破壞(如誤刪表) 時可用邏輯備份恢復
用邏輯備份只能恢復到備份時刻的狀態
總之
數據庫系統的設計是一門高深的學問
本文是作者基於幾年管理超大型計費系統經驗和教訓
參考ORACLE
文檔的基礎上完成的
由於本人才疏學淺
難免有不當和錯誤之處
敬請有識之士批評指正
From:http://tw.wingwit.com/Article/program/Oracle/201311/17219.html