대용량 테이블 인덱스 생성 및 통계 수집, 통계 10% Sampling
대용량 테이블이고 DML(INSERT, UPDATE, DELETE 등)가 계속 일어나는 테이블에 신규 인덱스 생성을 하려면
Lock이 걸려서 서비스가 원활하지 않을 수 있습니다.
그럴 경우에 아래와 같이 ONLINE, NOLOGGING 옵션을 사용하면 좋습니다.
ONLINE은 서비스 중에 Lock이 걸리지 않고 인덱스 생성하는 옵션입니다.
NOLOGGING은 UNDO, REDO를 최소하면서 인덱스 생성할 수 있게 도와주는 옵션입니다.
1. 테이블 EMPLOYEE 에 기 생성된 인덱스 확인
SELECT IDX.OWNER, IDX.INDEX_NAME, IDX.TABLE_OWNER,
IDX.TABLE_NAME, IDX.TABLESPACE_NAME, IDX_COL.COLUMN_NAME
FROM DBA_INDEXES IDX, DBA_IND_COLUMNS IDX_COL
WHRE IDX.TABLE_NAME = 'EMPLOYEE'
AND IDX.INDEX_NAME=IDX_COL.INDEX_NAME
ORDER BY INDEX_NAME;
2. 아래의 구문을 사용한 인덱스 생성
CREATE INDEX EMP.IX_EMPLOYEE01 ON EMP.IX_EMPLOYEE(IDX01, IDX02, IDX03, IDX04)
NOLOGGING TABLESPACE TS_IDX_EMP LOCAL ONLINE;
3. 생성된 인덱스 10% 샘플링 통계수집
BEGIN
SYS.DBMS_STATS.GATHER_INDEX_STATS (
OwnName => 'EMP'
,IndName => 'IX_EMPLOYEE01'
,Estimate_Percent => 10
,Degree => 4
,No_Invalidate => FALSE);
END;
/
감사합니다.