파티션 고급 기능.

1. Parallel Query (병렬 쿼리)

Oracle은 파티셔닝된 테이블에 대해 병렬 처리를 지원합니다. 이를 통해 대용량 데이터에 대해 빠른 조회와 분석을 수행할 수 있습니다.

SELECT /*+ PARALLEL(sales, 4) */ * FROM sales WHERE sale_date BETWEEN TO_DATE('2023-01-01', 'YYYY-MM-DD') AND TO_DATE('2023-06-30', 'YYYY-MM-DD');

병렬 쿼리는 특히 여러 파티션에 걸친 데이터를 검색할 때 유용하며, 쿼리 성능을 크게 향상시킬 수 있습니다.

2. Automatic Partitioning (자동 파티셔닝)

Oracle 12c 이상에서는 Interval Partitioning과 같은 기능을 통해 자동으로 파티션을 생성할 수 있습니다. 이를 통해 관리 복잡성을 줄이고, 데이터가 늘어남에 따라 자동으로 파티션이 생성되도록 설정할 수 있습니다.

3. Virtual Column-Based Partitioning (가상 컬럼 기반 파티셔닝)

가상 컬럼(Virtual Column)을 사용해 파티션을 생성할 수 있습니다. 가상 컬럼은 실제로 물리적으로 저장되지 않고 계산된 값을 가집니다. 이를 통해 데이터를 더 유연하게 파티셔닝할 수 있습니다.

CREATE TABLE sales ( sale_id NUMBER, sale_date DATE, amount NUMBER, sale_year AS (EXTRACT(YEAR FROM sale_date)) ) PARTITION BY RANGE (sale_year) ( PARTITION p2022 VALUES LESS THAN (2023), PARTITION p2023 VALUES LESS THAN (2024) );

위 예제에서는 sale_date를 기반으로 가상 컬럼 sale_year를 정의하고 이를 기준으로 파티셔닝을 수행합니다. 가상 컬럼은 복잡한 계산이나 변환을 기반으로 파티셔닝할 때 유용합니다.

4. Read-Only Partitions (읽기 전용 파티션)

읽기 전용 파티션을 설정하여 특정 데이터의 불변성을 보장하고, 데이터 보호 및 성능을 향상시킬 수 있습니다. 예를 들어, 과거 데이터는 더 이상 변경되지 않도록 읽기 전용으로 설정할 수 있습니다.

ALTER TABLE sales MODIFY PARTITION p2022 READ ONLY;

이 기능을 통해 백업 및 리소스 관리가 용이해지고, 불필요한 쓰기 작업을 방지하여 성능이 향상됩니다.

5. In-Memory Partitioning (인메모리 파티셔닝)

Oracle의 In-Memory 기능을 사용하여 특정 파티션을 메모리에 적재함으로써 더욱 빠른 조회 성능을 제공합니다. 이는 주로 자주 조회되는 최신 데이터나 중요한 데이터를 메모리에 상주시킬 때 사용됩니다.

ALTER TABLE sales MODIFY PARTITION p2023 INMEMORY;

이 설정을 통해 파티션의 데이터를 메모리에서 직접 처리하여 대폭적인 성능 개선을 얻을 수 있습니다.

6. Interval-Reference Partitioning (간격-참조 파티셔닝)

Interval Partitioning과 Reference Partitioning을 결합하여 특정 조건에 따라 자동으로 파티션을 확장하면서도 관계형 데이터의 무결성을 유지할 수 있습니다.

CREATE TABLE parent_table ( id NUMBER, trans_date DATE ) PARTITION BY RANGE (trans_date) INTERVAL (NUMTOYMINTERVAL(1, 'MONTH')) ( PARTITION p_initial VALUES LESS THAN (TO_DATE('2023-01-01', 'YYYY-MM-DD')) ); CREATE TABLE child_table ( id NUMBER, parent_id NUMBER, CONSTRAINT fk_parent FOREIGN KEY (parent_id) REFERENCES parent_table(id) ) PARTITION BY REFERENCE (fk_parent);

위 예제에서는 parent_table의 파티션 구조를 자동으로 확장하고, child_table이 이를 참조하도록 설정합니다. 이는 관계형 데이터에서 확장성과 성능을 동시에 확보할 수 있는 방법입니다.

7. Hybrid Partitioning (하이브리드 파티셔닝)

하이브리드 파티셔닝은 로컬 디스크와 외부 테이블(예: HDFS, 외부 클라우드 스토리지)을 결합하여 파티셔닝을 구현하는 기법입니다. 이를 통해 비용 효율적으로 데이터 스토리지를 관리할 수 있습니다.

CREATE TABLE hybrid_table ( id NUMBER, data CLOB ) PARTITION BY RANGE (id) ( PARTITION p1 VALUES LESS THAN (1000) STORE IN (tablespace1), PARTITION p2 VALUES LESS THAN (2000) EXTERNAL LOCATION ('hdfs://data/path') );

하이브리드 파티셔닝은 데이터의 사용 빈도에 따라 데이터 위치를 최적화하여 비용 절감과 성능 최적화를 동시에 달성할 수 있습니다.

8. Partitioning for Parallelism (병렬 처리 최적화를 위한 파티셔닝)

Oracle의 병렬 처리 기능은 파티셔닝과 밀접하게 연관되어 있습니다. 테이블이 파티셔닝되어 있을 때, 병렬 쿼리는 여러 파티션에서 동시에 데이터를 처리함으로써 성능을 극대화할 수 있습니다.

병렬 처리와 파티셔닝을 결합한 전략은 다음과 같습니다:

  • 병렬 DML: 파티셔닝된 테이블에 대해 병렬로 데이터 삽입, 갱신, 삭제 작업을 수행할 수 있습니다.
  • 병렬 인덱스 생성: 대용량 데이터를 다룰 때, 파티션별로 인덱스를 병렬로 생성하여 인덱스 빌드 시간을 단축할 수 있습니다.
ALTER SESSION ENABLE PARALLEL DML; INSERT /*+ PARALLEL(sales, 4) */ INTO sales PARTITION (p2023) SELECT * FROM staging_table;

위 쿼리에서, PARALLEL 힌트를 사용하여 파티션별로 병렬 처리가 이루어지도록 설정할 수 있습니다.

9. Compression and Partitioning (압축과 파티셔닝)

Oracle은 파티션에 대해 데이터 압축을 지원합니다. 압축을 적용하면 스토리지 비용을 줄일 수 있을 뿐만 아니라 I/O 성능을 개선하여 쿼리 응답 속도를 높일 수 있습니다.

  • Hybrid Columnar Compression (HCC): 데이터 웨어하우스 환경에서 효율적인 압축을 지원하며, 주로 읽기 전용 파티션에 적용됩니다.
  • Advanced Row Compression: OLTP 환경에서도 파티션별로 데이터를 압축하여 저장할 수 있습니다.
ALTER TABLE sales MODIFY PARTITION p2023 COMPRESS FOR QUERY LOW;

위와 같이 특정 파티션에 압축을 적용하여 데이터 저장 효율성과 성능을 최적화할 수 있습니다.

댓글 쓰기

댓글 목록