성능 데이터 모델링의 개요
DB 성능 향상을 위한 사항이 데이터 모델링에 반영되도록 하는 것.
- 수행시점 : 분석/설계 단계, 성능 데이터 모델링 시점이 늦어질수록 재업무 비용이 증가한다.
- 고려 사항 : 정규화 수행, DB 용량 산정과 트랜잭션 유형 파악을 통한 반정규화 수행, 정규화는 무조건 수행되어야한다. (데이터모델 구조, 대용량의 데이터, 인덱스 특성)
정규화와 성능
정규화(Normalization) : 다양한 유형의 검사를 통해 데이터 모델을 좀 더 구조화하고 개선시켜 나가는 절차. 중복성 제거, 관심사 별로 처리되는 경욱 많아 성능이 향상된다.
- 정규형(NF, Normal Form) : 정규화로 도출된 데이터 모델이 갖춰야할 특성
- 함수적 종속성(FD, Functional Dependency) : 결정자와 종속자의 관계, 결정자의 값으로 종속자의 값을 알 수 있음
- 다치 종속(MVD, Multivalued Dependency) : 여러 칼럼이 동일한 결정자의 종속자일 때
- 정규화 이론
- 1차 2차 3차 보이스코드정규화는 함수적 종속성에 근거
- 4차 정규화는 다치 종속을 제거
- 5차 정규화는 조인에 의한 이상현상을 제거해 정규화 수행
- 1차 정규화 : 속성의 원자성 확보, 다중값 속성을 분리
- 2차 정규화 : 부분 함수 종속성 제거, 일부 기본키에만 종속된 속성으 ㄹ분리, 기본키가 하나의 칼럼일 때 생략 가능
- 3차 정규화 : 이행 함수 종속성 제거, 서로 종속관계가 있는 일반 속성을 분리함, 주식별자와 관련성이 가장 낮음
- 보이스 코드 정규화(BCNF, Boyce-Codd Normal Form) : 후보키가 기본키 속성 중 일부에 함수적 종속일 때 다수의 주식별자의 분리함
- 4차 정규화, 5차 정규화 : 다치 종속 분리, 결합 종속 분리
- 정규화 성능 : 정규화는 입출력 데이터 양을 줄여 성능 향상 [조회/입력,수정,삭제] 2가지로 분류
- 정규화로 인한 성능 향상
- 입력,수정,삭제 시 성능은 항상 향상 됨
- 유연성 증가 : High Cohension & Loose Coupling 원칙에 충실해짐
- 재활용 가능성 증가 : 개념이 세분화 됨
- 데이터 중복 최소화
- 정규화로 인한 성능 저하
- 조회 시 처리 조건에 따라 성능 저하가 발생할 수도 있음 ⇒ 데이터 조회 시 조인을 유발하여 CPU와 메모리를 많이 사용하게 됨
- 반정규화로 해결 가능
- 조인이 발생하더라도 인덱스를 사용하여 조인 연산을 수행하면 성능 상 단점이 거의 없고, 정규화를 통해 필요한 인덱스의 수를 줄일 수 있음
- 정규화를 통해 소량의 테이블이 생성된다면 성능 상 유리할 수 있음(반정규화된 테이블의 성능이 더 떨어지는 경우)
- 조회 시 처리 조건에 따라 성능 저하가 발생할 수도 있음 ⇒ 데이터 조회 시 조인을 유발하여 CPU와 메모리를 많이 사용하게 됨
- 정규화로 인한 성능 향상
반정규화와 성능
데이터 중복을 허용하여 조인을 줄이는 DB 성능 향상 방법, 데이터의 무결성을 희생하고 조회 성능 향상, 프로젝트의 설계 단계에서 반정규화를 적용한다.(구축 및 시험단계에서 적용시 노력비용이 증대한다.)
- 절차
- 반정규화 대상 조사 : 데이터 처리 범위 및 통계성 등 조사(범위 처리 빈도수, 대량 범위 처리, 통계성 프로세스, 테이블 조인 개수)
- 다른 방법 검토 : 뷰, 클러스터링, 인덱스 조정, 애플리케이션
- 반정규화 적용 : 정규화 수행 후 반정규화 수행
- 기법
- 테이블 반정규화
- 테이블 병합
- 1:1 관계 테이블 병합
- 1:N 관계 테이블 병합 → 많은 데이터 중복 발생
- 슈퍼타입/서브타입 테이블 병합
- 테이블 분할 : 수직분할(칼럼단위, 테이블 1:1로 분리), 수평분할(로우단위)
- 테이블 추가
- 중복 테이블 : 업무나 서버가 다를 때 중복 테이블 생성(원격 조인 제거)
- 통계 테이블 : SUM, AVG 등 미리 계산, 조회 시 성능 향상
- 이력 테이블 : 마스터 테이블 레코드 중복하여 이력 테이블에 존재
- 부분 테이블 : 자주 이용하는 칼럼으로 구성된 테이블 생성
- 테이블 병합
- 칼럼 반정규화
- 중복 칼럼 추가
- 파생 칼럼 추가 : 필요한 값 미리 계산한 칼럼(Derived 칼럼) 추가
- 이력 테이블 칼럼 추가 : 기능성 칼럼(최근값 여부, 시작 및 종료일자 등) 추가
- PK에 의한 칼럼 추가:PK의 종속자를 일반속성으로 생성
- 응용 시스템의 오작동을 위한 칼럼 추가 : 이전 데이터 임시적 중복보관(원래값 복구 용도)
- 관계 반정규화 : 데이터 무결성 보장 가능(정규화가 잘 정의된 데이터 모델에서 성능이 저하된 경우 존재)
- 중복 관계 추가
- 테이블 반정규화