ORACLE FREELIST HWM(3)

jss001發表於2009-02-08
4.最佳化
4.1手工回收儲存空間
在HIGH WATER MARK以上的塊對效能沒有影響,但是會耗費空間。如何空間大小是一個考慮的問題,就可以決定回收空塊。

假設表T1的儲存示意圖如圖2.5所示,使用ALTER TABLE ... DEALLOCATE UNUSED語句可以回收HWM以上的空間。比如:

alter table t1 deallocate unused;

回收後T1的儲存示意如圖4.1.1

如果在ALTER TABLE ... DEALLOCATE UNUSED語句中使用了KEEP關鍵字,則可以在HWM之後保留指定大小的空閒空間,比如:

alter table t1 deallocate unused keep 10K;

回收後T1的儲存示意如圖4.1.2

4.2刪減表
根據3.2.1可以得到HWM以下塊的使用情況。如何p大於時,對全表掃描效能會產生影響,同時也會耗用空間。

如果能夠確認應用有良好的索引幾乎不會用到全表掃描,那麼HIGH WATER MARK以下的空塊,儘管耗費了空間,不會對訪問產生影響。如果不能確定,那麼就需要考慮刪減表。

刪減表的操作將刪除表中所有的記錄,並且重置HWM標記。表在刪減之後將成為一個空表。

在Oracle中刪減表只有如下的兩種辦法:

1.使用drop語句

先使用drop語句刪除整個表,然後再重建這個表。在刪除-重建的過程中,與表相關的所有索引、完整性約束以及觸發器都會丟失,並且所有依賴於該表的物件都會變為INVALID狀態,同時原來爭對錶的授權也會失效。因此採用這種方式刪除表中的記錄代價太大。

2.使用TRUNCATE語句

TRUNCATE語句屬於DDL語句,不會產生任何回退資訊,並且被立即自動提交。在執行TRUNCATE語句時不會影響到與被刪減表相關的任何資料庫物件與授權,也不會觸發表中所定義的觸發器。此外,在對標進行刪減時,HWM將重置,已經為表分配的儲存空間將被回收。

在執行TRUNCATE語句時,可以透過drop storage子句和reuse storage子句來控制被釋放的區是否回收到表空間中。如何作線上系統的TRUNCATE,不希望表長時間鎖住,那麼可以使用reuse storage子句,僅將HWM重置。

4.3 free list最佳化
free list 競爭出現在多個程式使用同一個free list並試圖同時修改free list頭部資料塊時。可以透過查詢檢視v$waitsate的class型別為data block 的記錄來檢查競爭情況。

產 生data block型別競爭的主要原因是多個程式試圖同時修改free list頭部資料塊。 然而,它也會出現在當程式準備將塊讀入buffer cathe時,另一個程式需要訪問同一個塊。如果能在V$SESSION_WAIT中正好捕獲buffer busy waits,就可以透過查詢V$SESSION_WAIT中的P3來判定是那一類。A 0 或 1014代表讀型別,其他的值為修改競爭的型別。

下 一步需要確定競爭涉及那些段。 如果能夠在V$SESSION_WAIT捕獲waits,就可以用P1和P2的值 (對應file 和 block) 在DBA_EXTENTS中找到段名。 如何是一個表,就很可能需要重建表來建立更多的process freelists。 一種計算需要建立多少個freelist的方法是dump一些段中接近HWM的塊,檢查interested transaction list的個數,具體方法可參見3.1。interested transactions個數的峰值加1 就是需要的最小process freelists的值。

從2.3和2.4可以看出,使用多個free list可能導致更多的空塊未被使用, 也可能導致段更快地擴充套件。如果效能是當前所關心的重點,那麼多free lists 可以用來提高併發訪問能力,當然會增加一些額外空間的耗用。然而,如果空間使用大小是首先考慮的因素,那麼推薦使用single freelist,使引數FREELISTS=1, 當然就不能提升併發事務的效能了。

V$WAITSTAT 也可顯示其他型別class的競爭,包括segment header 和free list。 出現在同一個free list group中多個事務需要同時更新它們的free list header記錄時。 有多種方法來解決這個問題如重建表採用更多的free list groups,或者增加 _bump_highwater_mark_count大小,或者調整應用本身。[@more@]

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

相關文章