[ORACLE] APPEND 힌트 사용 시 인덱스 nologging은 작동하나?



    대량 데이터 적재 등의 작업 시 성능, 속도 등을 고려하여 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
    
    

    댓글