성능 데이터 모델링의 개요
성능 데이터모델링이란?
데이터베이스 성능 향상을 목적으로 설계단계의 데이터 모델링 때부터 성능과 관련된 사항이 데이터 모델링에 반영될 수 있도록 하는 것
성능 데이터모델링 수행 절차
1. 데이터모델링을 할 때 정규화를 정확하게 수행한다.
2. 데이터베이스 용량산정을 수행한다.
용량산정은 전체적인 데이터베이스에 발생되는 트랜잭션의 유형과 양을 분석하는 자료가 된다.
3. 데이터베이스에 발생되는 트랜잭션의 유형을 파악한다.
4. 용량과 트랜잭션의 유형에 따라 역정규화를 수행한다.
5. 이력모델의 조정, PK/FK 조정, 슈퍼타입/서브타입 조정 등을 수행한다.
6. 성능 관점에서 데이터 모델을 검증한다.
정규화
정규화 단계와 조건
- 제1정규화 - 테이블의 컬럼이 원자값을 가지도록 테이블을 분해
- 제2정규화 - 완전 함수 종속을 만족하도록 테이블을 분해
- 제3정규화 - 이행적 함수 종속을 없애도록 테이블을 분해
- BCNF(강화된 제 3정규화) - 모든 결정자가 후보키가 되도록 테이블을 분해
반정규화
테이블 반정규화 분류 | 반정규화 기법 | 내용 |
테이블 병합 | 1:1 관계 테이블 병합 | 1:1 관계를 통합해서 성능 향상 |
1:M 관계 테이블 병합 | 1:M 관계를 통합해서 성능 향상 | |
슈퍼/서브타입 테이블 병합 | 슈퍼/서브 관계를 통합해서 성능 향상 | |
테이블 분할 | 수직분할 | 칼럼단위의 테이블을 디스크 I/O를 분산처리 하기 위해 테이블을 1:1로 분리하여 성능향상 -> 트랜잭션의 처리되는 유형 파악을 먼저 해야함 |
수평분할 | 로우 단위로 집중 발생되는 트랜잭션을 분석해서 성능 향상을 위해 로우 단위로 데이터를 쪼갬 -> 관계음슴 |
|
테이블 추가 | 중복테이블 추가 | 다른 업무거나 서버가 다른 경우, 동일한 테이블 구조를 중복해서 원격 조인 같은거를 안하도록 함 |
통계테이블 추가 | SUM, AVG같은걸 미리 계산해둠으로써 조회 성능 향상 | |
이력테이블 추가 | 이력테이블 중에서 마스터 테이블에 존재하는 레코드를 중복해서 이력 테이블에 존재하는 방법은 반정규화의 유형 | |
부분테이블 추가 | 하나의 테이블의 전체 칼럼 중 자주 이용하는 집중화된 칼럼이 있을 때, 이러한 칼럼들을 모아놓은 별도의 부분테이블을 추가하는 유형 |
칼럼의 반정규화 기법 | 내용 |
중복칼럼 추가 | 조인에 의해 처리할때, 조인을 감소시키기 위해 중복된 칼럼을 위치시킴 |
파생칼럼 추가 | 트랜잭션이 처리되는 시점에 계산에 의해 발성되는 성능 저하를 예방하기 위해 미리 값을 계산해서 칼럼에 보관 |
이력테이블 칼럼 추가 | 대량의 이력데이터를 처리할 때 불특정 날 조회나 최근 값을 조회 할 때 나타날 수 있는 성능 저하를 예방하기 위해 이력 테이블에 기능성 칼럼을 추가 |
PK에 의한 칼럼 추가 | 복합의미를 가지는 PK를 단일 속성으로 구성할 경우 발생됨. 단일 PK안에서 특정값을 별도로 조회하는 경우 성능 저하가 발생할 수 있으므로 일반속성으로 포함하는 방법임 |
응용시스템 오작동을 위한 칼럼 추가 | 업무적으로는 의미가 없으나 사용자가 데이터 처리를 하다가 잘못 처리하여 원래 값으로 복구하기를 원하는 경우 이전 데이터를 임시적으로 중복해서 보관하는 기법 |
반정규화 말고 다르게 처리하는 방법?
- 뷰를 사용 >> 조인이 많이 해야하는 경우
- 클러스터링 적용, 인덱스 조정 >> 대량의 데이터 처리나 부분처리
- 파티셔닝 기법 >> 대량의 데이터를 PK의 성격에 따라 부분적인 테이블로 분리
- 응용 애플리케이션에서 구사하는 로직 변경
'Database' 카테고리의 다른 글
[SQLD]SQL 기본 및 활용(2) (1) | 2021.08.31 |
---|---|
[SQLD]SQL 기본 및 활용(1) (0) | 2021.08.27 |
[SQLD]데이터 모델링의 이해 (0) | 2021.08.23 |
[DB스터디]트랜잭션과 고립성문제, 고립 수준 (0) | 2021.08.19 |