Oracle Freelist和HWM原理探討及相關效能最佳化(3)
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-1017301/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle Freelist和HWM原理探討及相關效能優化(轉)Oracle優化
- ORACLE FREELIST HWM(轉)Oracle
- 土製Excel匯入匯出及相關問題探討Excel
- Oracle案例10——HWM(高水位線)效能優化Oracle優化
- Tornado原理淺析及應用場景探討
- ORACLE 高水位線(HWM)Oracle
- 效能最佳化的相關策略整理
- oracle 雙機部署模式探討Oracle模式
- oracle最佳化相關書籍推薦Oracle
- 深入探討MySQL索引的設計原則及最佳化策略MySql索引
- 關於 Roguelike 的探討,及基於 Roguelike 的新框架框架
- 【JSConf EU 2018】有關瀏覽器彈出式視窗的相關探討JS瀏覽器
- oracle 效能最佳化Oracle
- golang slice相關常見的效能最佳化手段Golang
- webrtc原理及相關api使用邏輯WebAPI
- 關於python中slicing的探討Python
- 關於 js 物件 轉 字串 和 深拷貝 的 探討JS物件字串
- 關於 PHP-fpm master 程式和 worker 職責探討PHPAST
- 五子棋AI:實現邏輯與相關背景探討(上)AI
- 五子棋AI:實現邏輯與相關背景探討(下)AI
- JMeter 擴充套件開發:BeanShell 資料模擬實現及效能探討JMeter套件Bean
- JavaScript 工作原理之十二-網路層探祕及如何提高其效能和安全性JavaScript
- Oracle相關命令Oracle
- 關於 performSelector 的一些小探討performSelector
- SEO關於探討URL的知識!
- 用程式碼探討KVC/KVO的實現原理
- 用程式碼探討 KVC/KVO 的實現原理
- oracle大表效能最佳化Oracle
- Promise探討Promise
- bitset 相關最佳化
- 對多執行緒程式,單核cpu與多核cpu如何工作相關的探討執行緒單核
- 探討:元遊玩和頑皮狗的寬線性關卡
- 關於volatile與指令重排序的探討排序
- 【AWR】Oracle awr相關檢視及體系介紹Oracle
- Oracle 效能最佳化之核心的shmall 和shmmax 引數OracleHMM
- 最佳化系統效能:深入探討Web層快取與Redis應用的挑戰與對策Web快取Redis
- 自研ORM Include拆分查詢(遞迴演算法 支援無限層級) 效能最佳化探討ORM遞迴演算法
- 深入探討 UndefinedUndefined
- 深入探討HBASE