溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ORACLE高水位表的查找方法

發(fā)布時間:2020-08-17 14:33:11 來源:ITPUB博客 閱讀:270 作者:運維之路 欄目:關系型數(shù)據(jù)庫

 

  1. 高水位的介紹

數(shù)據(jù)庫運行了一段時間,經(jīng)過一些列的刪除、插入、更改操作有些表的高水位線就有可能和實際的表存儲數(shù)據(jù)的情況相差特別多,為了提高檢索該表的效率,建議對這些表進行收縮;

  1. 查找高水位線的表

  1. 查找表需要的存儲空間:表以數(shù)據(jù)塊的形式存儲在數(shù)據(jù)文件中,表的存儲結構是:行×行數(shù),如果知道了總共有多少行,每行的平均長度,兩者相乘,再除于90%的使用率,那么就可以知道實際需要存儲的空間;

    表的存儲結構;

            
            
            
            

    從統(tǒng)計信息得出平均每行的長度和總共的行數(shù),從而知道存儲的SIZE;

  2. 查找表實際存儲的空間:數(shù)據(jù)實際存儲在數(shù)據(jù)文件中是以塊的形式存儲的,每個數(shù)據(jù)文件8K,塊的數(shù)量乘于8k,就可以知道實際已經(jīng)存儲的空間是多少了;

    c) 查找數(shù)據(jù)庫中某個表空間下,可以實際存儲和需要的表空間差別最大的表,查找腳本如下:

    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='PSAPSR3' AND BLOCKS*8/1024-AVG_ROW_LEN*NUM_ROWS/1024/1024/0.9>100

    AND rownum<11 order by RECOVER_MB desc;

    1. 統(tǒng)計信息的更新

因為所有的信息都是根據(jù)dba_tables,表的信息是根據(jù)統(tǒng)計信息得到的,所以如果統(tǒng)計信息不準確,那么整個搜索的結果都可能是錯誤的;

統(tǒng)計信息的腳本:exec dbms_stats.gather_table_stats('user','table_name');

  1. 回收的操作

a) 啟動行遷移:alter table table_name enable row movement ;

b)進行表的收縮:alter table table_name shrink space ;

  1. 檢查結果

SQL> select t.table_name,BLOCKS,EMPTY_BLOCKS,NUM_ROWS

from user_tables

where table_name = upper('table_name');

 

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

本文作者:JOHN

ORACLE技術博客:ORACLE 獵人筆記               數(shù)據(jù)庫技術群:367875324 (請備注ORACLE管理 )  

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI