3절 반정규화와 성능
⦁ 반정규화(Denormalization): 데이터 중복을 허용하여 조인을 줄이는 DB 성능 향상 방법,
데이터의 무결성을 희생하고 조회 성능 향상
⦁ 절차
⦁ 반정규화 대상 조사: 데이터 처리 범위 및 통계성 등 조사
⦁ 다른 방법 검토: 1) 뷰 2) 클러스터링 3) 인덱스 4) 애플리케이션
⦁ 반정규화 적용: 정규화 수행 후 반정규화 수행
⦁ 기법
테이블 반정규화
⦁ 테이블 병합
- 1:1 관계 테이블 병합
- 1:N 관계 테이블 병합: 많은 데이터 중복 발생
- 슈퍼타입/서브타입 테이블 병합
⦁ 테이블 분할: 1) 수직분할 2) 수평분할
⦁ 테이블 추가
- 중복 테이블: 업무나 서버가 다를 때 중복 테이블 생성 (원격조인 제거)
- 통계 테이블
- 이력 테이블
- 부분 테이블: 자주 이용하는 칼럼으로 구성된 테이블 생성
칼럼 반정규화
⦁ 중복 칼럼 추가
⦁ 파생 칼럼 추가: 필요한 값 미리 계산한 칼럼 추가
⦁ 이력 테이블 칼럼 추가
⦁ PK에 의한 칼럼 추가: PK의 종속자를 일반속성으로 생성
⦁ 응용 시스템의 오작동을 위한 칼럼 추가
관계 반정규화: 데이터 무결성 보장 가능
⦁ 중복 관계 추가
4절 대용량 데이터에 따른 성능
: 테이블 반정규화 중 테이블 분할 관련
블록: 테이블의 데이터 저장 단위
대량 데이터 발생으로 인한 현상: 블록 I/O 횟수 증가 → 디스크 I/O 가능성 상승 (디스크 I/O 시 성능 저하)
⦁ 로우 체이닝(Row Chaining): 행 길이가 너무 길어 여러 블록에 걸쳐 저장되는 현상
⦁ 로우 마이그레이션(Row Migration): 수정된 데이터가 해당 블록이 아닌 다른 블록의 빈 공간에 저장되는 현상
테이블 분할: 반정규화 기법
⦁ 수직분할: 칼럼 단위로 테이블을 분할하여 I/O를 감소시킴, 너무 많은 수의 칼럼이 있는 경우 사용
⦁ 수평분할: 행 단위로 테이블을 분할하여 I/O를 감소시킴
파티셔닝(Partitioning): 테이블 수평분할 기법, 논리적으로는 하나의 테이블이지만 물리적으로 여러 데이터 파일에 분산 저장, 데이터 조회 범위를 줄여 성능 향상
⦁ Range Partition: 데이터 값의 범위를 기준으로 분할
⦁ List Partition: 특정한 값을 기준으로 분할
⦁ Hash Partition: 해시 함수를 적용하여 분할, DBMS가 알아서 분할 관리, 데이터 위치를 알 수 없음
⦁ Composite Partition: 여러 파티션 기법을 복합적으로 사용하여 분할
※ 파티션 인덱스(Partition Index)
⦁ Global Index, Local Index: 여러 파티션에서 단일 인덱스 사용, 파티션 별로 각자 인덱스 사용
⦁ Prefixed Index, Non-Prefixed Index: 파티션키와 인덱스키 동일, 파티션키와 인덱스키 구분
5절 DB 구조와 성능
슈퍼타입/서브타입 데이터 모델 변환을 통한 성능 향상
⦁ 슈퍼타입/서브타입 데이터 모델: 속성을 할당하여 배치하는 수평 분할된 형태의 모델
(공통 속성은 슈퍼타입으로 모델링하고 차이가 있는 속성은 서브타입으로 구분됨),
변환을 통해
1) 정확하게 업무를 표현할 수 있고
2) 물리적 모델링 시 선택의 폭을 넓힐 수 있음
⦁ 변환 기준: 데이터 양, 트랜잭션 유형
⦁ 변환 기술
⦁ 1:1 타입(OneToOne type): 개별로 처리하는 트랜잭션에 대해 개별 테이블 구성, 슈퍼타입과 서브타입 각각 필요한
속성과 유형에 적합한 데이터만 가지도록 분리하여 1:1 관계를 갖도록 함
⦁ 슈퍼/서브 타입(Plus type): 슈퍼타입과 서브타입을 공통으로 처리하는 트랜잭션에 대해 슈퍼타입과 서브타입
각각의 테이블 구성
⦁ All in One 타입(Single type): 일괄 처리하는 트랜잭션에 대해 단일 테이블 구성
1:1 타입 | 슈퍼/서브 타입 | All in One 타입 | |
특징 | 개별 테이블 유지 | 슈퍼/서브 타입 테이블 구성 | 단일 테이블 구성 |
트랜잭션 유형 | 개별 처리 | 슈퍼/서브 타입 공통 처리 | 일괄 처리 |
확장성 | 좋음 (테이블 추가 용이) |
보통 | 나쁨 |
조인 성능 | 나쁨 (조인 많이 필요) |
나쁨 (조인 많이 필요) |
좋음 |
I/O 성능 | 좋음 | 좋음 | 나쁨 (항상 전체 데이터 조회) |
관리용이성 | 나쁨 | 나쁨 | 좋음 |
⦁ PK/FK 칼럼 순서 조절을 통한 성능 향상: 등호 조건이나 BETWEEN 조건이 걸리는 칼럼을 앞으로 이동
(여러 조건이 있을 경우 등호 조건이 걸리는 칼럼을 선두로 이동)
⦁ 인덱스 특성을 고려한 PK/FK DB 성능 향상: 물리적인 테이블에 FK 제약을 걸어 인덱스를 생성
'Structured Query Language > SQLD' 카테고리의 다른 글
SQLD_2과목_1장 SQL 기본_1절 관계형 DB 개요, 2절 DDL (0) | 2023.05.30 |
---|---|
SQLD_1과목_2장 데이터 모델과 성능_6절 분산 DB 데이터에 따른 성능 (0) | 2023.05.30 |
SQLD_1과목_2장 데이터 모델과 성능_1절 성능 데이터 모델링의 개요, 2절 정규화와 성능 (0) | 2023.05.30 |
SQLD_1과목_1장 데이터 모델링의 이해_4절 관계, 5절 식별자 (0) | 2023.05.30 |
SQLD_1과목_1장 데이터 모델링의 이해_2절 엔터티, 3절 속성 (0) | 2023.05.30 |