本地管理tablespace(LMT)和自動分段空間管理(ASSM)提供了一種管理數據庫裡個體對象freelist的新方法
除了這些ASSM特性
Oracle
i還提供了幾個新的DBMS PL/SQL工具包
用來使用ASSM查看和管理tablespace
這些工具包包括
dbms_space
space_usage
dbms_repair
rebuild_freelists
現在讓我們來看看這些工具包是如何使用ASSM的tablespace的
關於ASSM的補充材料
要獲得更多關於ASSM的信息
請閱讀我的 上一篇文章
Oracle
i裡稀疏表格的問題
如果一個高度動態的對象(例如表格或者索引)由多個freelist來定義
而且對這個表格的INSERT和DELETE活動繁重
那麼在這種情況下
稀疏表格通常就會在非ASSM的tablespace中發生
在稀疏表格裡
表格會顯示有數千個剩余的區塊
然而這個表格卻會不斷地擴展
其行為就好像Oracle沒有任何剩余的數據塊了
數據倉裡的稀疏表格會消耗掉巨大的不必要的存儲空間
即使在表格還有很多剩余空間的情況下
它們還是會消耗掉很多G字節的新存儲空間
要記住
當你有多個freelist的時候
freelists是獨立的
而且Oracle不能分享freelist的區塊
不管你是否在使用ASSM
任何INSERT SQL聲明都只會附加到一個freelist裡
而且它只會使用附加到那個freelist裡的剩余區塊(見圖A)
圖A
Oracle
i裡不平衡的freelist
導致稀疏表格的原因是在INSERT和DELETE並發活動之間缺乏負載平衡
在這個例子裡
我有三個為表格定義的freelist
但是一個清除任務(SQL刪除操作)作為單個任務在運行
由於這個刪除任務只附加到了這三個freelist中的一個裡
所以所有被刪除的區塊都被添加到了這個freelist
在Oracle
i以前的版本裡
DBA不得不將所有對FREELISTS值的清除任務並行化
這樣才能保證所有的freelist都被空數據塊平均地填充了
還是在Oracle
i以前的版本裡
DBA不得不使用導入/導出(export/import)或者alter table move來重新組織表格
這樣才能平衡每個freelist鏈上的剩余區塊
Oracle
i使用了dbms_repair
rebuild_freelists過程
這就讓這一工作簡單得多了
rebuild_freelists過程的目的是將位圖freelist區塊和主freelist接合起來
並為區段清除掉其他所有的freelist
對於被真正應用集群使用多個freelist groups所訪問的表格和索引
Oracle
i會在原有的freelist組中平均分配剩余區塊
對於帶有多個freelist的表格和索引來說
這是一個重要的特性
因為DBA不再需要重新組織表格已重新平衡過了的位圖freelist
這裡有一個例子
是這個過程被用來為EMP表格重建freelist的
dbms_repair
rebuild_freelists(
SCOTT
EMP
);
Oracle
i裡用於位圖freelist的查看表
Oracle
i還有幾個新的v$和x$查看表
這些查看表會顯示ASSM位圖freelist的狀態
事務處理freelist被保存在x$kvii固定表格的ktsmtf數據列內部
而v$waitstat查看表包含了位圖freelist的信息
要記住
帶有ASSM的freelist結構已經從單向鏈接列表變更為了位圖freelist
在下面的例子裡
你會看到所有和位圖區塊或者位圖索引塊相關的系統等待
select
class
count
time
from
v$waitstat
where
class like
bitmap%
;
有了多位圖的特性
你就應該會很少看到任何等待了
因為有多個位圖freelist可供並發DML使用
就像下面這個例子一樣
CLASS COUNT TIME
bitmap block
bitmap index block
有多少個DBA會使用ASSM?
到底有多少個有經驗的DBA會開始使用ASSM以及有多少會繼續使用原來的方法還有待觀察
雖然ASSM許諾為多個DML聲明提供更高的吞吐量
但是Oracle的專家還是必須小心數據行鏈
並記得在適當的時候為每個表格或者索引使用PCTFREE
From:http://tw.wingwit.com/Article/program/Oracle/201311/17895.html