BI系統中 關於oracle表空間的規劃方法

2021-04-16 04:29:45 字數 2704 閱讀 2160

oracle的表空間劃分將影響oracle的資料訪問速度。我想請問各位大蝦,你們在專案實施的時候是怎麼劃分表空間的,劃分的依據是什麼,有什麼好處以及各個表空間用來存放什麼樣的資料庫物件。

最好能用例項具體說明一下,比如data用來放大表資料,data_2用來放**表資料。

希望各位來討論一下

對於表空間來說,最重要的是如何把要連續訪問的段放在一起,但是由於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下的大表對應乙個單獨的表空間和索引表空間;對於需要分割槽的特大表,則每個子分割槽對應乙個單獨的表空間和索引空間。

Oracle中,關於空值的問題

在oracle資料庫中,空值是乙個特殊的。比如要查詢出乙個表中,某個欄位為空或者不為空的資料,不能直接用 或者 要使用is null或者is not null。以上可以說是乙個常識性問題,一般都不會犯。不過,下面要說的問題,可能會被大多數人忽略 比如,在許可權系統中,根據角色id,要找出具有這個角色...

Oracle空表開關

設定deferred segment creation引數 以下語句可以在cmd裡登入資料庫後執行 檢視引數 show parameter deferred segment creation 設定引數 alter system set deferred segment creation false ...

oracle 匯出空表

資料庫備份 空表不能匯出的問題處理 設定deferred segment creation 引數 設定deferred segment creation 引數為false來禁用 段推遲建立 也就是直接建立segment 無論是空表還是非空表,都分配segment。在sqlplus中,執行如下命令 s...