대량 데이터 적재 등의 작업 시 성능, 속도 등을 고려하여 nologging 방식을
고려하는 경우가 있습니다.
대표적인 방법이 nologging 힌트를 사용하는 것인데요
테이블 nologging + append 힌트를 사용하는 경우 nologging이 작동한다는 것은 알고계실겁니다.
여기서는 index logging 방식에 따른 redo 발생량을 테스트 했습니다.
결론: 인덱스는 logging/nologging에 상관없이 무조건 redo 발생
테이블 logging, 인덱스 nologging
발생한 redo size: 550,581,800
-- table nologging, index logging
SQL> select * from sk.tab1 ;
no rows selected
SQL> select b.name, a.value
from v$mystat a, v$statname b
where a.STATISTIC# = b.STATISTIC#
and b.name in ('redo entries', 'redo size')
;
NAME VALUE
------------------------------ ---------------------
redo entries 36666
redo size 270607988
SQL> insert /*+ append */ into sk.tab1 select * from sk.tab2 ;
2303104 rows created.
SQL> commit ;
Commit complete.
SQL> select b.name, a.value
from v$mystat a, v$statname b
where a.STATISTIC# = b.STATISTIC#
and b.name in ('redo entries', 'redo size')
;
NAME VALUE
------------------------------ ---------------------
redo entries 221892
redo size 821189788
테이블 nologging, 인덱스 nologging
발생한 redo size: 550,182,068
-- table nologging, index nologging
SQL> alter index sk.tab1_ix nologging ;
Index altered.
SQL> select b.name, a.value
from v$mystat a, v$statname b
where a.STATISTIC# = b.STATISTIC#
and b.name in ('redo entries', 'redo size')
;
NAME VALUE
------------------------------ ---------------------
redo entries 223652
redo size 821507600
SQL> insert /*+ append */ into sk.tab1 select * from sk.tab2 ;
2303104 rows created.
SQL> commit ;
Commit complete.
SQL> select b.name, a.value
from v$mystat a, v$statname b
where a.STATISTIC# = b.STATISTIC#
and b.name in ('redo entries', 'redo size')
;
NAME VALUE
------------------------------ ---------------------
redo entries 408806
redo size 1371689668
댓글
댓글 쓰기