Oracle 색인 조각 및 데이터 시트 공간 사용 현황 조회

-- 색인 파편 상 태 를 점검 해 단일 표 만 분석 할 수 있다.블록 크기, 색인 pctfree 의 값 크기, rowid 의 길이 에 따라 값 을 수정 해 야 합 니 다.
 
  
select index_name, c.NMB "    ", d.SMB "   "
  from (select index_name,
               round((select num_rows numrows
                        from dba_tables
                       where table_name = upper('tableName')
                         AND owner = upper('ownerName')) /
                     ((8192 - 819.2 - 4 - 20 - 72 - 32) /
                     ((sum(AVG_COL_LEN)) + 2 + 18)) * 8192 / 1024 / 1024) NMB
          from (SELECT b.index_name  index_name,
                       a.column_name,
                       a.AVG_COL_LEN AVG_COL_LEN
                  FROM dba_tab_columns a,
                       (select b.index_name, b.column_name, b.index_owner
                          from dba_ind_columns b
                         where b.table_name = upper('tableName')
                           and B.INDEX_OWNER = upper('ownerName')
                         order by b.index_name) b
                 WHERE a.TABLE_NAME = upper('tableName')
                   AND A.OWNER = upper('ownerName')
                   and a.column_name = b.column_name
                 order by b.index_name)
         group by index_name) c,
       (SELECT segment_name, round(sum(bytes) / 1024 / 1024) SMB
          FROM dba_segments
         WHERE OWNER = upper('ownerName')
         group by segment_name) d
 where c.index_name = d.segment_name;

색인 조각 이 심 하면 색인 재 구축:
--ALTER INDEX indexName rebuild online nologging;

DECLARE 
    CURSOR myCur IS
        select INDEX_NAME from user_indexes WHERE TABLE_NAME=upper('tableName') AND INDEX_TYPE='NORMAL';
    v_cname myCur% rowtype;
    vsSql varchar2(256);
begin
open myCur;   
    loop      
       fetch myCur into v_cname;     
       exit when myCur% notfound;                        
       vsSql:='ALTER INDEX ' || v_cname.INDEX_NAME  || ' rebuild online nologging';
       EXECUTE IMMEDIATE vsSql;
    end loop;  
 close myCur;
end;

 
지정 한 데이터 테이블 의 공간 분배 와 실제 사용 상황 보기:
select ta.Used_Blocks, tt.*
from (
       SELECT COUNT(DISTINCT DBMS_ROWID.ROWID_BLOCK_NUMBER(rowid) || DBMS_ROWID.ROWID_RELATIVE_FNO(rowid)) as Used_Blocks
       FROM tableName
     ) ta
     cross join (
       select t.*
       from user_segments t
       where t.segment_type = 'TABLE'
             and t.segment_name = upper('tableName')
       order by t.blocks desc
     ) tt;

데 이 터 를 대량으로 삭제 한 후의 높 은 수위 선 은 표 스캐닝 성능 문 제 를 일 으 키 고 데이터 공간 을 방출 한다.
--
alter table tableName enable row movement;
alter table tableName shrink space cascade;
alter table tableName disable row movement;


  http://www.cnblogs.com/linjiqin/archive/2012/01/15/2323030.html
  http://blog.csdn.net/wyzxg/article/details/5631721
 
첨부, 통계 정보 업데이트, 캐 시 비우 기
--analyze table       :
analyze table my_table compute statistics; 
--OR
EXEC DBMS_STATS.gather_table_stats(ownname => 'socct', tabname =>'tableName', estimate_percent =>100, cascade =>true, method_opt => 'for all columns size auto');

--    (        ),Command window  :
alter system flush shared_pool;
alter system flush buffer_cache;

좋은 웹페이지 즐겨찾기