關於oracle表空間的規劃方法

tonywi888發表於2007-04-16
事實表(如果很大)的一定要分割槽,而且分割槽方式和你的業務邏輯相關,每個分割槽放在一個單獨的分割槽中。我所指的業務邏輯是指比如一個表基本粒度是 天+客戶程式碼+產品程式碼,如果查詢比較偏重於 時間+客戶,並且每次查詢都涉及到時間,這樣就可以考慮使用混合分割槽,時間 欄位做 Range 分割槽,客戶 欄位 做 Hash 子分割槽。
對於表空間來說,最重要的是如何把要連續訪問的段放在一起,但是由於oracle 不能提供基於段的統計資訊,所以對資料的物理模型設計和訪問模式的詳細瞭解對錶空間的規劃有非常大的好處。然後基於這些原則,我們就可以平衡這些因素。
表空間的使用遵循以下原則:
1. 對每個表空間上的段使用相同的區片尺寸;段引數INITIAL=NEXT,PCTINCREASE=0;可以透過使用Create Tablespace 的‘ MINIMUM EXTENT’ 子句來確保分配的區片是此引數的倍數;
2. 僅在表空間級指定INITIAL、NEXT引數,在建立資料段時不要指定這些引數;
3. 區片的大小根據段大小來確定,原則是均衡順序掃描的效率和空間的利用率,同時確保段的區片數目控制在1024之下;根據此原則,在進行相應測試之後,確定以下區片選取規則:
段大小 區片大小)
128M 128K
128M-4G 4M
4G 128M
4.Oracle9i引入了本地管理表空間,它在管理和效能上都優於傳統的字典管理表空間,它已融合了規則1、2、3 ;要使用此特性,在CREATE TABLESPACE語句中指定EXTENT MANAGEMENT LOCAL子句;
5. 段的區片數目上限應在4096之下,DML操作在此區片數目範圍內不會有明顯的效能差異;但某些DDL操作的速度則與區片的數目關係較大;因此合理的區片數目應保持在1024之下;對於持續不斷擴充套件的段,應監控區片數目,在必要時移至其它表空間;
6. 對於特別大的資料段應控制在4G-128G(Oracle7為5G-160G)之間,它們應存放到單獨的表空間上,同時對於這些特大段應考慮使用分割槽拉提高效能;
7. 使用者的臨時表空間應使用TEMPORARY型別;
8. 當系統的事務規模比較均衡時可以對回滾段使用OPTIMAL引數,否則應避免制定OPTIMAL引數,而定期監控回滾段的大小,並在必要時重建;
9. 臨時段和回滾段絕對不要將使用者資料存放到SYSTEM表空間,它是專為永遠不會Drop和Truncate的系統資料物件而設計的;
10. 建立表空間時指定資料檔案的大小應=區片整數倍+1資料塊,對於Local Managed Tablespace則為區片整數倍+64K;
11. 當表空間使用統一的區片大小時,不要對其進行空間整理,重整的結果不僅耗費精力而且可能會使效能變差;對於未使用統一的區片尺寸的表空間應透過Export/Import重整;
12. 9i 提供了Alter Table …Move [Tablespace…]命令可用於快速重整表,Alter Index …Rebuild…[Tablespace…] 命令可用於快速重建索引;
首先,不同訪問模式的段不應該放在同一個表空間當中,一般而言,我們有以下兩種完全不同的訪問模式需要特別考慮
順序讀寫
段的讀寫基本是以一種連續讀寫的方式進行的,譬如:單執行緒全表掃描,快速全索引掃描,應該被單獨存放在自己的表空間當中,而且,如果可能的話,這些表空間的資料檔案也應當儲存在一些併發訪問儘可能少的磁碟當中,這樣的話,在進行掃描的時候,查詢速度會有非常大的提高。因為,基本上磁碟的尋道時間是最小的,而且大多數資料都可以從硬碟的buffer當中取得。
集中寫
類似大量資料集中寫入或者parallel direct loads 這種應用,應當被放在單獨的表空間當中,而且儘可能儲存在較快的映象盤當中,而不應該選用RAID-5,
還有一個問題就是,對於一些只讀的歷史資料,最好把它們放在單獨的表空間當中,並且標記為只讀,這樣會大大加快備份時的速度。
其次,考慮到磁碟的負載均衡,建議把段分開在不同的裝置上來儲存. 我們需要從兩個不同的角度來進行考慮:
活動性
兩個IO很大的段不應該放在同一個表空間當中,即使這個表空間是由多個資料檔案組成,也沒有辦法避免由於IO 爭用造成的效能下降.
相關性
通常情況下,把相關的一些段從一個表空間當中分離出來,典型地來說就是儘可能把表和索引分在不同地表空間,兩個經常需要做連線地大表分在兩個不同地表空間,這樣就可以避免,資料訪問,索引讀取和執行計劃同時對一個表空間進行大量地IO操作。

常用原則
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 大小最好成倍數關係,有利於空間的重利用和減少碎片。
根據以上原則,資料庫表空間設計如下:原則上每個schema對應一個表空間和一個相應索引表空間;每個schema下的大表對應一個單獨的表空間和索引表空間;對於需要分割槽的特大表,則每個子分割槽對應一個單獨的表空間和索引空間。
[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8570952/viewspace-911102/,如需轉載,請註明出處,否則將追究法律責任。

相關文章