서론
1과목 데이터 모델링의 이해
2장 데이터 모델과 성능
1절 성능 데이터 모델링의 개요
2절 정규화와 성능
3절 반정규화와 성능 정리
1. 성능 데이터 모델링의 개요
성능 데이터 모델링
정의
- 데이터베이스 성능 향상을 목적으로 설계 단계의 데이터 모델링 때부터
정규화, 반정규화, 테이블 통합 등 여러 가지 성능과 관련된 사항이 데이터 모델링에 반영될 수 있도록 하는 것
수행 시점
- 분석/설계 단계에서 데이터베이스 처리 성능을 향상시킬 수 있는 방법을 주도면밀하게 고려해야 한다.
- 분석/설계 단계에서 데이터 모델에 성능을 고려한 데이터 모델링을 수행할 경우 성능 저하에 따른
재업무(Rework) 비용을 최소화할 수 있는 기회를 가지게 된다. - 성능 향상을 위한 비용은 프로젝트 수행 중에 있어서 사전에 할수록 비용이 적게 든다
고려 사항 (순서 O)
- 데이터 모델링을 할 때 정규화를 정확히 수행
- DB 용량 산정 수행
- DB에서 발생되는 트랜잭션의 유형 파악
- 용량과 트랜잭션의 유형에 따라 반정규화 수행
- 이력 모델의 조정, PK/FK조정, 슈퍼 타입/서브타입 조정 등 수행
- 성능 관점에서 데이터 모델링 검증
2. 정규화와 성능
정규화를 통한 성능 향상 전략
- 정규화 : 데이터를 결정하는 결정자에 의해 함수적 종속을 가지고 있는 일반 속성을 의존자로 하여
이상현상 (삽입, 삭제, 갱신)을 제거하는 것이다. - 데이터 중복 속성을 제거하고 동일한 의미의 일반 속성이 하나의 테이블로 집약되므로 한 테이블의 데이터 용량이 최소화되는 효과가 있다.
정규화된 데이터 모델의 성능
- 조회 : 처리 조건에 따라 성능이 향상 혹은 저하된다.
- 입력, 수정, 삭제 (삽입, 삭제, 갱신)은 성능이 향상된다.
정규화와 성능
- 정규화를 수행해서 조인이 발생하여도 효율적인 인덱스 사용을 통해 조인 연산을 수행하면 성능상 단점은 거의 없음
- 정규화하여 소량의 테이블이 생성되면,
소량의 테이블을 먼저 읽어 조인 연산을 수행하면 되므로 성능상 유리할 수 있다. - 정규화가 제대로 되지 않으면 동일한 종류의 속성을 여러 개 가지고 있어서 과다한 인덱스가 만들어질 수 있는데,
정규화를 한다면 하나의 인덱스만 만들어도 된다.
정규형
- 1NF : 모든 도메인이 원자값
- 2NF : 부분 함수 종속 제거
- 3NF : 이행 함수 종속 제거
- BCNF : 모든 결정자가 후보키
- 4NF : 다치 종속 제거
- 5NF : 조인 종속 제거
3. 반정규화와 성능
- 정규화된 엔티티, 속성, 관계에 대해 시스템의 성능 향상과 개발, 운영의 단순화를 위해
중복, 통합, 분리 등을 수행하는 데이터 모델링의 기법을 의미
반정규화된 모델의 성능
- 조회 시 성능을 향상 시킬 수 있다.
반정규화 절차
- 반정규화 대상 조사
(범위 처리 빈도수 조사, 대량의 범위 처리 조사, 통계성 프로세스 조사, 테이블 조인 개수) - 다른 방법 유도 검토 : 반정규화 대상에 대해 다른 방법으로 처리할 수 있는지 검토
(뷰 테이블, 클러스터링 적용, 인덱스의 조정, 응용 애플리케이션) - 반정규화 적용
1) 테이블 반정규화
2) 속성의 반정규화
3) 관계의 반정규화
반정규화 기법
분류 | 기법분류 | 기법 | 내용 |
테이블 | 테이블 병합 | 1:1 관계 테이블 병합 | 1:1 관계를 통합 |
1:M 관계 테이블 병합 | 1:M관계를 통합 | ||
슈퍼/서브타입 테이블 병합 | 슈퍼/서브 관계를 통합 | ||
테이블 분할 | 수직분할 | 칼럼 단위 분할 | |
수평분할 | 로우 단위 분할 | ||
테이블 추가 | 중복 테이블 추가 | 다른 업무이거나 서버가 다른 경우 동일한 테이블 구조를 중복하여 원격 조인을 제거하여 성능 향상 |
|
통계 테이블 추가 | SUM, AVG 등을 미리 수행하여 계산해두어 조회시 성능 향상 |
||
이력 테이블 추가 | 마스터 테이블에 존재하는 레코드를 중복 | ||
부분 테이블 추가 | 전체 칼럼 중 자주 이용하는 집중화된 칼럼이 있을 때 해당 칼럼들을 모아놓은 별도의 반정규화된 테이블 생성 |
||
칼럼 | 중복 칼럼 추가 | 조인 감소를 위해 중복된 칼럼을 위치 시킴 | |
파생 칼럼 추가 | 계산에 의해 발생되는 값을 성능 저하를 예방하기 위해 미리 값을 계산하여 칼럼에 보관 |
||
이력 테이블 칼럼 추가 | 이력 테이블에 칼럼 추가 | ||
PK에 의한 칼럼 추가 | 복합의미를 갖는 PK를 단일 속성으로 구성하였을 때 단일 PK안에서 특정 값을 별도로 조회하는 경우 성능 저하 -> PK안에 데이터가 존재하지만 성능 향상을 위해 일반속성으로 생성하는 방법 ex) 주문번호 = {고객번호 + 날짜} 일때 고객번호, 날짜를 일반속성으로 생성 |
||
응용 시스템의 오작동을 위한 칼럼 추가 |
업무적으로 의미가 없지만 사용자가 데이터를 잘못 처리하여 원래의 값으로 복구를 원하는 경우 이전 데이터를 임시적으로 중복하여 보관하는 것 |
||
관계 | 중복 관계 추가 | 데이터를 처리하기 위한 여러 경로를 거쳐 조인이 가능하지만 이때 발생할 수 있는 성능 저하를 예방하기 위해 추가적인 관계를 맺는 방법 |
※ 테이블, 칼럼의 반정규화 : 데이터 무결성에 영향을 미친다.
※ 관계의 반정규화 : 데이터 무결성을 깨뜨릴 위험을 갖지 않고서도 성능을 향상시킬 수 있다.
결론
정규화에 대해서는 다 알고 있는데, 반정규화는 개념과 왜 사용하는지 정도만 알고 있었는데,
절차와 기법도 알아볼 수 있었당
'자격증 > SQLD' 카테고리의 다른 글
[SQLD] 1과목 2장 5~6절 (0) | 2023.08.28 |
---|---|
[SQLD] 1과목 2장 4절 (0) | 2023.08.27 |
[SQLD] 1과목 1장 - 5절 식별자 (0) | 2023.08.25 |
[SQLD] 1과목 1장 - 2~4절 엔티티, 속성, 관계 (0) | 2023.08.24 |
[SQLD] 1과목 1장 - 1절 데이터 모델의 이해 (0) | 2023.08.23 |