Oracle/etc

SYSAUX

pbj1102 2022. 1. 25. 12:37
반응형

*SYSAUX TBS 가 비정상적으로 늘어날 경우 아래와 같은 문구로 Shrink 가능 

 - 늘어나는 이유. 

   DB에서는 스냅샷 보관주기가 설정되어 있어 과거의 스냅샷은 delete 가 이루어짐.

   하지만 자동으로 shrink를 해주지 않음. 

   결국 공간만 계속 늘어나는 것.

   이 외에 비정상적인 부분

   스냅샷 보관주기 만큼 테이블(WRH$_ 테이블들) 이 가지고 있어야 하는데 그러지 못하는 경우 - 버그임

 

 

 

 

기본적으로 아래의 패키지를 이용하여 스냅샷을 삭제함. 

그러나 너무 오래 걸리고 비효율적이라 생각됨. 

 

수행 패키지 

EXEC DBMS_WORKLOAD_REPOSITORY.DROP_SNAPSHOT_RANGE(:MIN sanp, :MAX snap);

  > 삭제만 되고 줄여주진 않음 (rebuild 가 안됨)

 

 

 

해당 패키지 수행시 도는 쿼리를 추출하였더니 아래와 같이 delete 쿼리가 도는 것을 확인함

baseline 이 설정이 되어 있지 않으면 그냥 delete 문임. 

 

delete from WRH$_SYSSTAT tab 
                where dbid = 777160365
                AND tab.snap_id BETWEEN 1 and 21092
                and not exists 
                        (select 1
                        from WRM$_BASELINE b
                        where (tab.dbid = b.dbid)
                        and (tab.snap_id >= b.start_snap_id)
                        and (tab.snap_id <= b.end_snap_id));
                        
commit;

 

그래서 나는 sysaux 에서 큰 사이즈를 갖고 있는 extent 만 추출하여 shrink 하는 것이 효율적이라 생각함

아래는 해당 처리를 위해 적어 놓은 것

 

 

 -- SYSAUX 사용 확인
 select occupant_name , space_usage_kbytes/1024 "MB"
    from v$sysaux_occupants
    order by MB desc;



-- 줄이기 전 대상 확인 & 줄인 후 확인
SELECT OWNER, SEGMENT_NAME, SEGMENT_TYPE, BYTES/1024/1024 "MB"
   FROM DBA_SEGMENTS 
   WHERE TABLESPACE_NAME ='SYSAUX'
   and bytes/1024/1024 > 50
   ORDER BY MB DESC;
  

  
-- 테이터 파일 마지막 extent id 확인, 마지막 extent의 스냅샷 주기만 남겨놓고 삭제 후 쉬링크 하면 됨
select owner, segment_name, segment_type, max(block_id)  from DBA_EXTENTS
where file_id ='2'
group by owner, segment_name, segment_type
ORDER BY max(block_id) DESC ;


SQL> select d.dbid,w.snap_interval,w.retention from DBA_HIST_WR_CONTROL w, v$database d where w.dbid = d.dbid;

      DBID SNAP_INTERVAL        RETENTION
---------- -------------------- --------------------
1039230559 +00000 00:20:00.0    +00008 00:00:00.0





SQL> SELECT DBID, CREATED FROM V$DATABASE;

      DBID CREATED
---------- ------------
1039230559 26-NOV-15





SQL> SELECT MIN(SAVTIME) FROM WRI$_OPTSTAT_HISTGRM_HISTORY;

MIN(SAVTIME)
---------------------------------------------------------------------------
01-MAY-16 05.42.47.017071 AM +09:00






3. ASH 테이블 SNAP_ID MIN, MAX 값
select min(snap_id),MAX(snap_id) from dba_hist_snapshot;
--MIN MAX
--70283 72486


--4. 보관중인 ASH 
select min(snap_id),MAX(snap_id) from WRH$_ACTIVE_SESSION_HISTORY;
--MIN     MAX
--1 72486

 

> WRH$_ACTIVE_SESSION_HISTORY 테이블의 snap_id 값이 1부터 존재 

  dba_hist_snapshot 테이블은 70283 

즉, 1 ~ 70282 까지 삭제하면 됨

 



5. PURGE 구동 확인 및 RETENTION
select SNAP_INTERVAL,RETENTION,MOST_RECENT_PURGE_TIME from sys.wrm$_wr_control
SNAP_INTERVAL RETENTION MOST_RECENT_PURGE_TIME
+00000 00:20:00.0 +00030 00:00:00.0 2017/01/09 22:28:17






EXEC DBMS_WORKLOAD_REPOSITORY.DROP_SNAPSHOT_RANGE(:MIN sanp, :MAX snap);



아래는 table, lob , 파티션 별 shrink 명령어


--  table
ALTER TABLE *** SHRINK SPACE CASCADE;

alter table PERFSTAT.STATS$MUTEX_SLEEP enable row movement;

-- lob
select owner, table_name, segment_name, column_name from dba_lobs
where segment_name ='SYS_LOB0000069708C00025$$'
            소유자.테이블           
alter table XDB.XDB$RESOURCE modify lob(param_value_file : 컬럼이름)(shrink space cascade);

#파티션일 경우
alter table SPT.TR_SALE_JOURNAL modify PARTITION P201710 lob(JOURNAL_DATA)(shrink space cascade);


---

@ Statspack  
-- PERFSTAT - STATSPACK 을 지원하기 위한 유저 

- AWR이 제공되지 않는 버전(8.1.6 - )의 서버
- Oracle Standard Edition을 사용하는 서버
Standard Edition에서는 tuning pack, diagnostic pack이 제공되지 않음에 따라 AWR을 사용할 수 없다.

- JOB BROKEN 도 필요 
@@ 삭제 방법

 1. statspack delete - sppurge

지정된 스냅샷 범위만큼을 삭제한다.

SQL>conn perfstat/perfstat 
 SQL> @?/rdbms/admin/sppurge.sql



2.  statspack trucate -  sptrunc

SQL>conn perfstat/perfstat 
 SQL> @?/rdbms/admin/sptrunc.sql





** 통계정보 같은 것
WRI$_OPTSTAT_HISTGRM_HISTORY = 통계정보 히스토그램 수집 관련


현재 통계정보 보관 주기
select dbms_stats.get_stats_history_retention from dual;


통계정보 보관주기 변경
exec dbms_stats.alter_stats_history_retention(14);

2017 01 01 이전 통계정보 삭제
exec dbms_stats.purge_stats(to_timestamp_tz('01-01-2017 00:00:00 Asia/Seoul','DD-MM-YYYY HH24:MI:SS TZR'));


alter table SYS.WRI$_OPTSTAT_HISTGRM_HISTORY enable row movement;
-- ora 10636   >>>  function-based index drop 후 삭제


function-based index 구문 
select dbms_metadata.get_ddl('INDEX','I_WRI$_OPTSTAT_H_OBJ#_ICOL#_ST','SYS') from dual;
 
 
 select dbms_metadata.get_ddl('INDEX','I_WRI$_OPTSTAT_H_ST','SYS') from dual;



-- function index 구문 뽑음. 
  CREATE INDEX "SYS"."I_WRI$_OPTSTAT_H_OBJ#_ICOL#_ST" ON "SYS"."WRI$_OPTSTAT_HISTGRM_HISTORY" ("OBJ#", "INTCOL#", SYS_EXTRACT_UTC("SAVTIME"), "COLNAME") 
  PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "SYSAUX" 





  CREATE INDEX "SYS"."I_WRI$_OPTSTAT_H_ST" ON "SYS"."WRI$_OPTSTAT_HISTGRM_HISTORY" (SYS_EXTRACT_UTC("SAVTIME")) 
  PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "SYSAUX" 





drop INDEX "SYS"."I_WRI$_OPTSTAT_H_OBJ#_ICOL#_ST"; 
drop INDEX "SYS"."I_WRI$_OPTSTAT_H_ST";


alter table WRI$_OPTSTAT_HISTGRM_HISTORY enable row movement;
alter table WRI$_OPTSTAT_HISTGRM_HISTORY shrink space;
alter table WRI$_OPTSTAT_HISTGRM_HISTORY disable row movement;


alter session set workarea_size_policy=manual;
alter session set sort_area_size=104857600;


-- function index 다시 생성
 CREATE INDEX "SYS"."I_WRI$_OPTSTAT_H_OBJ#_ICOL#_ST" ON "SYS"."WRI$_OPTSTAT_HISTGRM_HISTORY" ("OBJ#", "INTCOL#", SYS_EXTRACT_UTC("SAVTIME"), "COLNAME") 
  PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "SYSAUX" 





  CREATE INDEX "SYS"."I_WRI$_OPTSTAT_H_ST" ON "SYS"."WRI$_OPTSTAT_HISTGRM_HISTORY" (SYS_EXTRACT_UTC("SAVTIME")) 
  PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "SYSAUX" 




반응형

'Oracle > etc' 카테고리의 다른 글

Reorg  (0) 2022.01.26
audit  (0) 2022.01.25
2PC_PENDING  (0) 2022.01.25
undo, rollback  (0) 2022.01.25
sequence  (0) 2022.01.25