파티션 고급 기능.
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;
위와 같이 특정 파티션에 압축을 적용하여 데이터 저장 효율성과 성능을 최적화할 수 있습니다.