본문 바로가기
Oracle/운영

[partition] MODIFY DEFAULT ATTRIBUTES COMPRESS FOR OLTP vs COMPRESS FOR OLTP 차이

by 취미툰 2022. 7. 11.
반응형

파티션의 ATTRIBUTE를 변경할 수 있는 명령어 두가지의 차이에대해서 정리한 글입니다.

결론은, ALTER TABLE [테이블명] COMPRESS FOR OLTP은 기존의 파티션 + 새로 ADD하는 파티션의 설정을 모두 변경하는 명령어이고,ALTER TABLE [테이블명]  MODIFY DEFAULT ATTRIBUTES COMPRESS FOR OLTP은 기존의 파티션의 설정은 그대로 두고 새로 ADD하는 파티션의 설정만 변경하는 명령어입니다.

 

ATTRIBUTE란, DBA_TAB_PARTITIONS뷰에서 확인할 수 있습니다.

MODIFY DEFAULT ATTRIBUTES 의 설명은 아래의 문서에서 확인할 수 있습니다.

COMPRESS 방법, PARTITION TABLE,INDEX의 TABLESPACE의 변경등을 수행할 수 있습니다.

https://docs.oracle.com/database/121/VLDBG/GUID-C003E6DB-3867-4407-86D2-A51F30AF07CC.htm#VLDBG1177

 

About Modifying Default Attributes

You can modify the default attributes that are inherited for range, hash, list, interval, or reference partitions using the MODIFY DEFAULT ATTRIBUTES clause of ALTER TABLE. For hash partitioned tables, only the TABLESPACE attribute can be modified.

docs.oracle.com

 

COMPRESSION

요약하면 해당 파티션에 대한 압축여부를 나타냅니다. 

Indicates the actual compression property for a partition of a simple partitioned table, or the default (if specified) for subpartitions for composite partitioned tables, otherwise NONE.
- NONE - The partition is composite, and a default setting is not specified for compression. See Also: the *_TAB_SUBPARTITIONS view
- ENABLED - The setting for compression is enabled.
- DISABLED - The setting for compression is disabled.

 

COMPRESS_FOR

압축했을 시 파티션의 압축유형을 나타냅니다.

Default compression for what kind of operations:
- BASIC
- ADVANCED
- QUERY LOW
- QUERY HIGH1
- ARCHIVE LOW1
- ARCHIVE HIGH1
- NULL

 

테스트

사전조회

기본적으로 조회결과 ,생성시에 적용했던 COMPRESSION=ENABLED 와 COMPRESS_FOR=ADVANCED를 설정값으로 가지고 있습니다.

SQL> select TABLE_OWNER,TABLE_NAME,PARTITION_NAME,COMPRESSION,COMPRESS_FOR From dba_tab_partitions
where table_name='DW_CC_CCL9001'
order by PARTITION_NAME;

TABLE_OWNER  TABLE_NAME          PARTITION_NAME         COMPRESSION            COMPRESS_FOR                   
-------------------------------- ---------------------- ---------------------- ------------------------------ 
...생략                    
YSBAE        DW_CC_CCL9001       PT_CC_CCL9001_202209   ENABLED                ADVANCED                      
YSBAE        DW_CC_CCL9001       PT_CC_CCL9001_202210   ENABLED                ADVANCED

 

#1.ALTER TABLE [테이블명] COMPRESS FOR OLTP

1. MOVE PARTITION명령으로 특정파티션들의 COMPRESS_FOR 변경.

ALTER TABLE YSBAE.DW_CC_CCL9001 MOVE PARTITION PT_CC_CCL9001_202209 COMPRESS;
ALTER TABLE YSBAE.DW_CC_CCL9001 MOVE PARTITION PT_CC_CCL9001_202210 NOCOMPRESS;

 

수행결과, 각각 파티션의 설정값들이 변하였습니다.

SQL> select TABLE_OWNER,TABLE_NAME,PARTITION_NAME,COMPRESSION,COMPRESS_FOR From dba_tab_partitions
where table_name='DW_CC_CCL9001'
and partition_name in ('PT_CC_CCL9001_202209','PT_CC_CCL9001_202210')
order by PARTITION_NAME desc;

TABLE_OWNER     TABLE_NAME      PARTITION_NAME          COMPRESSION            COMPRESS_FOR                   
--------------- --------------------------------------- ---------------------- ------------------------------ 
YSBAE           DW_CC_CCL9001   PT_CC_CCL9001_202210    DISABLED                                             
YSBAE           DW_CC_CCL9001   PT_CC_CCL9001_202209    ENABLED                BASIC

 

2.명령어 수행

ALTER TABLE DW_CC_CCL9001 COMPRESS FOR OLTP;

확인결과 모든 파티션들의 설정이 다시 COMPRESS FOR OLTP 형식으로 변경되었습니다.

SQL> select TABLE_OWNER,TABLE_NAME,PARTITION_NAME,COMPRESSION,COMPRESS_FOR From dba_tab_partitions
where table_name='DW_CC_CCL9001'
and partition_name in ('PT_CC_CCL9001_202209','PT_CC_CCL9001_202210')
order by PARTITION_NAME desc;

TABLE_OWNER       TABLE_NAME        PARTITION_NAME           COMPRESSION            COMPRESS_FOR                   
----------------- ----------------- ------------------------ ---------------------- ------------------------------ 
YSBAE             DW_CC_CCL9001     PT_CC_CCL9001_202210     ENABLED                ADVANCED                      
YSBAE             DW_CC_CCL9001     PT_CC_CCL9001_202209     ENABLED                ADVANCED

 

 

#2.ALTER TABLE [테이블명] MODIFY DEFAULT ATTRIBUTES COMPRESS FOR OLTP

 

1.사전확인과 동일한 환경이므로, 변경 후 조회를  한번더 수행하여 확인합니다. 

ALTER TABLE YSBAE.DW_CC_CCL9001 MOVE PARTITION PT_CC_CCL9001_202209 COMPRESS;
ALTER TABLE YSBAE.DW_CC_CCL9001 MOVE PARTITION PT_CC_CCL9001_202210 NOCOMPRESS;
SQL> select TABLE_OWNER,TABLE_NAME,PARTITION_NAME,COMPRESSION,COMPRESS_FOR From dba_tab_partitions
where table_name='DW_CC_CCL9001'
and partition_name in ('PT_CC_CCL9001_202209','PT_CC_CCL9001_202210')
order by PARTITION_NAME desc;

TABLE_OWNER     TABLE_NAME      PARTITION_NAME          COMPRESSION            COMPRESS_FOR                   
--------------- --------------------------------------- ---------------------- ------------------------------ 
YSBAE           DW_CC_CCL9001   PT_CC_CCL9001_202210    DISABLED                                             
YSBAE           DW_CC_CCL9001   PT_CC_CCL9001_202209    ENABLED                BASIC

2.명령어 수행

ALTER TABLE YSBAE.DW_CC_CCL9001 MODIFY DEFAULT ATTRIBUTES COMPRESS FOR OLTP;

 

확인

변경한 파티션들의 설정들은 그대로 인것을 확인할 수 있습니다.

SQL> select TABLE_OWNER,TABLE_NAME,PARTITION_NAME,COMPRESSION,COMPRESS_FOR From dba_tab_partitions
where table_name='DW_CC_CCL9001'
and partition_name in ('PT_CC_CCL9001_202209','PT_CC_CCL9001_202210')
order by PARTITION_NAME desc;

TABLE_OWNER     TABLE_NAME      PARTITION_NAME          COMPRESSION            COMPRESS_FOR                   
--------------- --------------------------------------- ---------------------- ------------------------------ 
YSBAE           DW_CC_CCL9001   PT_CC_CCL9001_202210    DISABLED                                             
YSBAE           DW_CC_CCL9001   PT_CC_CCL9001_202209    ENABLED                BASIC

 

3.파티션 ADD

추가된 파티션에만 해당 설정이 적용되는지 파티션을 COMPRESS 옵션주지않고 생성해보도록 하겠습니다.

파티션 추가하였고, COMPRESS 관련 옵션은 아무것도 넣지 않고 ADD하였습니다.

ALTER TABLE YSBAE.DW_CC_CCL9001
ADD PARTITION PT_CC_CCL9001_202211 VALUES LESS THAN (TO_DATE(' 2022-12-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'));

확인

새로추가한 202211파티션은 ENABLED와 ADVANCED 옵션으로 자동 설정되어 생성된 것을 확인할 수 있습니다.

SQL> select TABLE_OWNER,TABLE_NAME,PARTITION_NAME,COMPRESSION,COMPRESS_FOR From dba_tab_partitions
where table_name='DW_CC_CCL9001'
and partition_name in ('PT_CC_CCL9001_202209','PT_CC_CCL9001_202210','PT_CC_CCL9001_202211')
order by PARTITION_NAME desc;

TABLE_OWNER     TABLE_NAME        PARTITION_NAME           COMPRESSION            COMPRESS_FOR                   
--------------- ----------------- ------------------------ ---------------------- ------------------------------ 
YSBAE           DW_CC_CCL9001     PT_CC_CCL9001_202211     ENABLED                ADVANCED                      
YSBAE           DW_CC_CCL9001     PT_CC_CCL9001_202210     DISABLED                                             
YSBAE           DW_CC_CCL9001     PT_CC_CCL9001_202209     ENABLED                BASIC

 

#3. 추가 궁금증

여기서 저의 추가 궁금증. 애초에 생성할 때부터 다른 파티션들도 ENABLED와 ADVANCED 옵션이어서 해당 MODIFY ATTRIBUTES 옵션과 관계없이 저렇게 생성되는 것은 아닐까요?

NOCOMPRESS로 변경 후 다시 ADD 해보고 확인해보겠습니다.

 

ALTER TABLE YSBAE.DW_CC_CCL9001 MODIFY DEFAULT ATTRIBUTES NOCOMPRESS;
ALTER TABLE YSBAE.DW_CC_CCL9001
ADD PARTITION PT_CC_CCL9001_202212 VALUES LESS THAN (TO_DATE(' 2023-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'));

확인

확인결과 MODIFY ATTRIBUTES 변경 후 추가한 파티션은 NOCOMPRESS로 생성됩니다.

즉, MODIFY ATTRIBUTES 명령어는 기존의 파티션들의 설정에는 영향을 미치지 않고 새로 생성될 파티션들에게 영향을 미친다고 할 수 있습니다.

SQL> select TABLE_OWNER,TABLE_NAME,PARTITION_NAME,COMPRESSION,COMPRESS_FOR From dba_tab_partitions
where table_name='DW_CC_CCL9001'
and partition_name in ('PT_CC_CCL9001_202209','PT_CC_CCL9001_202210','PT_CC_CCL9001_202211','PT_CC_CCL9001_202212')
order by PARTITION_NAME desc;

TABLE_OWNER     TABLE_NAME        PARTITION_NAME           COMPRESSION            COMPRESS_FOR                   
--------------- ----------------- ------------------------ ---------------------- ------------------------------ 
YSBAE           DW_CC_CCL9001     PT_CC_CCL9001_202212     DISABLED                                             
YSBAE           DW_CC_CCL9001     PT_CC_CCL9001_202211     ENABLED                ADVANCED                      
YSBAE           DW_CC_CCL9001     PT_CC_CCL9001_202210     DISABLED                                             
YSBAE           DW_CC_CCL9001     PT_CC_CCL9001_202209     ENABLED                BASIC

 

그렇다면 1번의 설정(alter table [테이블명] compress 옵션)을 적용 후 다시 ADD해도 설정이 적용된 상태로 ADD 되는지 마지막으로 확인해보겠습니다.

ALTER TABLE DW_CC_CCL9001 COMPRESS ;
ALTER TABLE YSBAE.DW_CC_CCL9001
ADD PARTITION PT_CC_CCL9001_202301 VALUES LESS THAN (TO_DATE(' 2023-02-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'));

 

확인

확인결과 새로 추가한 파티션도 BASIC COMPRESSION이 적용되었고 기존의 파티션들도 모두 BASIC COMPRESSION으로 변경되었습니다.

SQL> select TABLE_OWNER,TABLE_NAME,PARTITION_NAME,COMPRESSION,COMPRESS_FOR From dba_tab_partitions
where table_name='DW_CC_CCL9001'
and partition_name in ('PT_CC_CCL9001_202209','PT_CC_CCL9001_202210','PT_CC_CCL9001_202211','PT_CC_CCL9001_202212','PT_CC_CCL9001_202301')
order by PARTITION_NAME desc;

TABLE_OWNER  TABLE_NAME         PARTITION_NAME          COMPRESSION            COMPRESS_FOR                   
------------ ------------------ ----------------------- ---------------------- ------------------------------ 
YSBAE        DW_CC_CCL9001      PT_CC_CCL9001_202301    ENABLED                BASIC                         
YSBAE        DW_CC_CCL9001      PT_CC_CCL9001_202212    ENABLED                BASIC                         
YSBAE        DW_CC_CCL9001      PT_CC_CCL9001_202211    ENABLED                BASIC                         
YSBAE        DW_CC_CCL9001      PT_CC_CCL9001_202210    ENABLED                BASIC                         
YSBAE        DW_CC_CCL9001      PT_CC_CCL9001_202209    ENABLED                BASIC

 

반응형

댓글