💡 본 글은 ‘실습과 함께하는! 데이터베이스 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