oracle高水位線處理
簡單概念:
高水位線簡單理解可以理解成放過水的木桶中留下的水痕,告訴別人它曾經有這麼多水,類比到資料庫,
某a表曾經存放0資料,那高水位線就在0這裡,如果存放10000,那高水位線就在10000這,如果delete
(truncate不會保留高水位線)了後,那高水位線還是在10000這,代表曾經到達的最高位。全表掃描會
一直掃到高水位線,即使裡面全是空的,所以會延長全表掃描的時間。
判斷高水位線:
1.定性的方法,資料塊多、行數少,表的塊數量與表大小比對,必定存在高水位線
select owner,tablespace_name,TABLE_NAME,BLOCKS,NUM_ROWS*AVG_ROW_LEN/1024/1024 "m",NUM_ROWS,EMPTY_BLOCKS, AVG_SPACE_FREELIST_BLOCKS,AVG_ROW_LEN,NUM_FREELIST_BLOCKS from dba_tables where TABLE_NAME='LIS_INSPECTION_RESULT';
2.儲存過程判斷
網上有很多可以搜尋。
3.查詢資料庫中某個表空間下,可以實際儲存和需要的表空間差別最大的前10張表
從統計資訊的出平均每行的長度和總行數
AVG_ROW_LEN*NUM_ROWS/1024/1024/0.9=判斷的儲存size(AVG_ROW_LEN*NUM_ROWS),
建議收集統計資訊後查比較準確,90%的使用率,所以算大小再/0.9。Dba_tables中的AVG_ROW_LEN
以位元組(b)為單位 BLOCKS*8/1024=塊數x每個塊8k/1024
語句(替換表)
SELECT NUM_ROWS,AVG_ROW_LEN*NUM_ROWS/1024/1024/0.9 NEED, BLOCKS*8/1024 TRUE,(BLOCKS*8/1024-AVG_ROW_LEN* NUM_ROWS/1024/1024/0.9) RECOVER_MB,TABLE_NAME FROM dba_tables WHERE TABLESPACE_NAME='BB' AND BLOCKS*8/ 1024-AVG_ROW_LEN*NUM_ROWS/1024/1024/0.9>100 AND rownum<11 order by RECOVER_MB desc;
不準確的可能性:
1.統計資訊未收集,dba_tables檢視裡記錄的不是最新的資料。
2.可能lob欄位的原因,lob的資訊不記錄在dba_tables裡。
處理方法:
1.重建表(不建議使用,整個表會鎖住,且索引需要重建)
alter table table_name move;
Rebuild index
收集統計資訊
2.shrink(收縮表)(建議使用)
時間較短,過程中部影響使用,開始和結束的時候會有鎖,建議晚上業務低峰期操作
shink表空間必須為ASSM管理
select TABLESPACE_NAME,BLOCK_SIZE,SEGMENT_SPACE_MANAGEMENT,ALLOCATION_TYPE from dba_tablespaces;
Auto為是assm管理
需要先開啟行遷移
alter table TEST_TAB enable row movement;
再收縮
alter table table_name shrink space;
關閉
alter table test_stud1 disable row movement;
1.對錶的shrink space並不會導致其上的索引一併收縮空間。
2.SHRINK SPACE不支援對存在函式索引的表的操作。
3.SHRINK SPACE COMPACT只對目標物件做空間碎片整理,但並不調整高水位標誌,也不會回收空間。但SHRINK SPACE則還會調整高水位標誌,並回收空間。
假如 要同時壓縮表的索引:ALTER TABLE TEST_TAB SHRINK SPACE CASCADE
3.expdp/impdp
匯入匯出一遍
4.複製到另個表,換名字
複製要儲存 的資料到臨時表t,drop原表,然後rename臨時表t為原表
5.Alter table table_name deallocate unused
注:這證明,DEALLOCATE UNUSED為釋放HWM上面的未運用 空間,但是並不會釋放HWM下面的自由空間,也不會移動HWM的位置.
6.線上重定義
略
7.truncate(不現實)
8.等等方法
來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/69980685/viewspace-3002074/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle delete 高水位線處理問題Oracledelete
- oracle 高水位分析處理Oracle
- ORACLE的簡單處理高水位Oracle
- oracle 高水位線及如何有效的降低高水位線Oracle
- ORACLE 高水位線(HWM)Oracle
- oracle 回收高水位線Oracle
- Oracle 降低高水位線Oracle
- oracle回收高水位線Oracle
- Oracle 高水位查詢和處理方法彙總Oracle
- Oracle之降低高水位線Oracle
- oracle 高水位線詳解Oracle
- oracle的高水位線HWMOracle
- oracle的高水位線(HWM)Oracle
- 一、oracle 高水位線詳解Oracle
- 降低Oracle高水位線的方法Oracle
- Oracle的高水位線介紹Oracle
- Oracle 高水位線的一點研究Oracle
- oracle表碎片以及整理(高水位線)Oracle
- Oracle高水位Oracle
- ORACLE資料庫降低高水位線方法Oracle資料庫
- Oracle高水位線(HWM)及效能優化Oracle優化
- 對Oracle高水位線的研究實踐Oracle
- Oracle表段中的高水位線HWMOracle
- oracle回收高水位Oracle
- Oracle 高水位(HWM)Oracle
- Oracle案例10——HWM(高水位線)效能優化Oracle優化
- oracle高水位問題Oracle
- Oracle 高水位(HWM)標記Oracle
- delete與高水位線HWM回收delete
- 關於高水位線和deletedelete
- 高水位線、行遷移行連結
- ORACLE高水位表的查詢方法Oracle
- 深入瞭解oracle的高水位(HWM)Oracle
- Oracle表段中高水位線HWMOracle
- Oracle 找出需要回收高水位的表Oracle
- oracle11g表的高水位線hwm與dbms_space系列一Oracle
- 水庫斷面水位中--水勢顯示效果處理--日期處理 SQLSQL
- Oracle段高水位(HWM, high water mark)問題Oracle