字典托管轉到本地托管以提高Oracle數據庫性能
在Oracle數據庫中,其表空間管理主要有兩種模式,分別為“字典托管”模式和“本地托管”模式。這兩種模式雖然對于終端用戶來說,可能沒有明顯的差異。但是從數據庫工程師角度來講,其差異是非常巨大的。最重要的一點,如果采用本地托管模式的話,從性能上來講要優于字典托管模式。在這篇文章中,筆者就給大家介紹一下,如何通過這個管理模式的轉變來提高Oracle數據庫的性能,以及轉換時注意的內容。
一、轉換過程中的注意點及實現方法。
如上圖所示,Oracle數據庫中表空間可以分為系統System表空間和非系統表空間。這兩種表空間都支持字典托管模式和本地托管模式。但是由于系統表空間的特殊性,將其從字典托管模式轉換到本地托管模式時,有一些特別需要注意的內容。筆者等一下會特別強調這一方面的事項。
根據經驗,筆者發現在Oracle11G或者10G數據庫中執行表空間的轉換,主要有“遷移”和“重建”兩種方法。不過筆者這里并不建議采用遷移的方案。因為通過遷移的方式將表空間從字典托管模式轉換為本地托管模式的時候,盤區映射將會移入到表空間的數據文件頭中。注意,此時系統是不能夠使用自動分配或者統一盤區尺寸管理。也就是說,無法使用本地托管模式的優勢,無法有效的減少碎片。在這種情況下,還必須為表空間中的每個段指定存儲語句。不過遷移方法也并不是一無用處,其能夠在一定程度上帶來性能的提升。不過其提升的效果沒有“重建數據庫”的方法那么好。另外特別重要的是,數據庫系統將無法從遷移總獲得策略方面的優勢。如無法像本地托管模式那樣對盤區進行有效的操作。
所以筆者這里建議大家采用的是“重建數據庫”法。雖然這個方法在操作上要比遷移方法復雜一點,但是最終帶來的效果還是蠻客觀的。這也就是說,產出要大于投入。其實這個重建數據庫的過程也就是四個步驟。
第一步:導出表空間中的段。在Oracle數據庫中,可以在命令行模式下使用Expdb等語句將數據庫中已有的段導出來。如果數據庫管理員對于命令行不熟悉的話,也可以借助其管理控制臺來導出所有的數據段。
第二步:刪除原有的表空間。如果數據庫管理員仍然需要用到原來的服務器,那么就需要將這個服務器上原有的表空間刪除。注意,這里采用的不是遷移方案。所以不是像操作系統升級一樣,在原版本的功能上進行升級。而是徹底的刪除之后,再重新安裝。為了減少文件碎片影響轉換后的效果,最好對相關的磁盤分區再采取格式化的操作。盡量提供一個干凈的環境。
第三步:重建建立表空間。在建立表空間的時候,可以采用關鍵字management local來說明要創建的是本地托管表空間。在重新創建表空間的時候,筆者有一個小小的建議。即在創建表空間之前,最好能夠先分析一下數據段的大小。然后盡可能的巴一個單獨的表空間分割成幾個不同大小的盤區,以容納不同大小的段。這可以有效的減少碎片,從后提高數據庫的性能。雖然這個分析數據段的過程在這個轉換過程中并不是必需的。但是這個過程本來就是為了提高數據庫的性能,所以在這個過程中同時考慮數據段的大小,可以提到1加1大于2的效果。所以筆者還是非常推薦這么做的。
第四步:重新導入段。表空間建立好之后,再將剛才導出的段再導入到數據庫中。這種重建的方法就相當于一開始采用的就是本地托管表空間。為此可以避免因為“字典托管”模式而造成的不兼容現象。也就是說,可以將本地托管模式的優勢發揮到最有效的狀況。
|
|