Oracle 12c 데이터베이스 14 - 파티셔닝/샤딩, 복제

💡 본 글은 ‘실습과 함께하는! 데이터베이스 Oracle 12c’ 강의 내용을 바탕으로 정리하였습니다.

VLDB(Very Large DBMS)

  • 전체 DB가 하나의 DBMS 시스템에 다 들어가기 힘들어지는 경우
    • 테이블을 여러 개의 군으로 나누어 분산 저장
    • 하나의 테이블이 방대한 경우에는 사전방식과 같이 나누어 저장
  • 파티셔닝/샤딩, 복제는 VLDB를 구축하는 핵심 솔루션
    • 파티셔닝/샤딩: 주로 Write 성능을 높이기 위해 사용
    • 복제: 주로 READ 성능을 높이기 위해 사용

파티셔닝/샤딩

파티셔닝(Partitioning)

  • DBMS 내에서 DBMS 레벨 분할
  • 사용자가 보기에는 파티션이 보이지 않고, DBMS 시스템이 자체적으로 관리

샤딩(Sharding)

  • DBMS 외부에서 분할
  • 응용 레벨에서 구별해야 함

제약사항

  • 테이블단위 연산이 힘들어짐(비용 문제)
    • 조인 연산이 어려움 → 정규화 문제
    • 역정규화 → 중복 허용으로 해결 (조인을 통해 얻지 않아도 되도록)
  • 외래키 효용 문제
    • 레코드 추가 시 참조무결성 조건 체트 → 시스템 부담 증가로 수동 전환
    • CRUD 시 위치(Location)을 인식해야 함
      • 파티셔닝은 DB 내에서 분리한 경우라 사용자 입장에서는 모름
      • 샤딩은 샤딩 프로그램이 위치를 인식해줘야 함

이점

  • 데이터 전체 검색 시 필요한 부분만 탐색해 성능 증가
  • 전체 데이터를 손실할 가능성이 줄어듦 → 가용성 향상
  • 파티션 별 백업/복구 가능
  • 파티션 단위로 I/O 분산 가능 → 업데이트 성능 증가
    • 특히 샤딩의 경우, 물리적으로 DB를 나누었기 때문에 성능 향상이 큼

파티셔닝 방법

방식 설명
범위(range) 방식 a-m / n-r / s-z (혹은 날짜 별)
해시(hash) 방식 해시함수 파티션 별로 크기를 비슷하게 나눔(홀짝, 5의 배수 등) 파티션이 추가, 삭제될 때 데이터 이동이 일어나 부담이 됨
리스트(list) 방식 특정한 컬럼을 기준 (연속적이지 않은 값, 예를 들어 부서, 취미 등)
컴포지트(composite) 기존 파티셔닝의 단점을 보완한 방식. (range-hash / range-list)
인터벌(interval) 레인지 파티션에서 maxvalue 파티션 없이 지정된 인터벌 수를 가지는 파티션 생성
레퍼런스(reference) 방식 부모와 1:1 관계의 자식 테이블 파티션
  -- 테이블 생성하면서 파티션 생성
  CREATE TABLE 테이블명 (컬럼명1, 컬럼명2, ...) PARTITION BY RANGE (컬럼명) (
    PARTITION 파티션명 VALUES LESS THAN (),
    PARTITION 파티션명 VALUES LESS THAN (), ...,
    PARTITION 파티션명 VALUES LESS THAN MAXVALUE
  );

  -- 파티션 추가
  ALTER TABLE 테이블명 ADD PARTITION (
    PARTITION 파티션명 VALUES LESS THAN ());

  -- 파티션 삭제
  ALTER TABLE 테이블명 DROP PARTITION 파티션명;

  -- 파티션 분할
  ALTER TABLE 테이블명 REORGANIZE PARTITION 파티션명 INTO (
    PARTITION 파티션명1 VALUES LESS THAN (),
    PARTITION 파티션명2 VALUES LESS THAN ()
  );

  -- 파티션 병합
  ALTER TABLE 테이블명 REORGANIZE PARTITION 파티션명1, 파티션명2 INTO (
    PARTITION 새파티션명 VALUES LESS THAN ());

데이터베이스 복제 (Replication)

  • DBMS의 내용을 복제해 동일한 DB 내용을 유지
  • 두 개 이상의 DBMS 시스템을 마스터/슬레이브로 나눠 마스터 DBMS 업데이트 → 슬레이브 DBMS로 SQL 쿼리 복제 (SELECT 제외)
    • 데이터 업데이트 (CUD)는 마스터에서
    • 읽기(R)는 슬레이브에서
  • 읽기 성능 향상: 두 개 이상의 슬레이브에서 나눠서 읽을 수 있으므로 (Read Scalability)
  • 고가용성(HA: High Availability): 슬레이브 하나가 장애가 나도 다른 슬레이브에서 읽을 수 있음
  • 오라클에서는 RAC(Real Application Cluster)라는 기능으로 불림, 해당 라이센스를 사용해야 함
  • 오라클 데이터가드(Data Guard)와는 다른 기능(데이터가드는 Active - Stand by를 전환하는 기능)
  • 최소 두 개의 오라클 서버 필요: 물리적으로 두 개의 서버 혹은 가상화 시스템

💡 설정이 복잡한 편이므로 실제 사용 시에는 공식 문서를 참조!: Oracle RAC Doc