-
데이터 모델의 성능(성능 데이터 모델링, 정규화, 반정규화)SQLD (자격증)/1-2. 데이터 모델의 성능 2020. 3. 2. 01:07
성능 데이터 모델링의 정의
설계단계의 데이터 모델링 때 부터 정규화, 반정규화, 테이블통합, 테이블분할, 조인구조, PK, FK 등 여러 가지 성능과
관련된 사항이 데이터 모델링에 반영될 수 있도록 하는 것으로 정의할 수 있다.
* 일반적인 성능이라고 하면 데이터 조회의 성능을 의미하곤 한다.
성능이 저하되는 세가지 경우
1. 데이터 모델 구조에 의해
2. 데이터가 대용량이 됨으로 인해
3. 인덱스의 특성을 충분히 고려하지 않고 인덱스를 생성함으로 인해
성능 데이터 모델링 수행시점
- 분석 / 설계 단계에서 데이터 모델에 성능을 고려한 데이터 모델링을 수행할 경우 성능저하에 따른 재업무(Rework)
비용을 최소화 할 수 있음
* 데이터의 증가가 빠를수록 성능저하에 따른 성능개선비용은 기하급수적으로 증가
성능 데이터 모델링 고려사항
1. 데이터 모델링시 정규화를 정확하게 수행
- 정규화된 모델이 데이터를 주요 관심사별로 분산시키는 효과가 있기 때문에 그 자체로 성능 향상
2. 데이터베이스 용량산정을 수행
- 각 엔티티별 용량산정을 수행하면 어떤 엔티티에 데이터가 집중되는지 파악할 수 있다.
3. 데이터베이스에 발생되는 트랜잭션의 유형 파악
- CRUD 매트릭스를 보고 파악
- 객체지향 모델링 적용시 시퀀스 다이어그램 보고 파악
=> 트랜잭션의 유형을 파악하면 SQL 문장의 조인관계 테이블에서 데이터 조회 칼럼을 파악할 수 있어 성능을
고려한 데이터 모델 설계 가능
4. 용량과 트랜잭션의 유형에 따라 반정규화 수행
- 파악한 용량산정과 트랜잭션의 유형데이터를 근거로 반정규화 수행
- 테이블, 속성, 관계에 대해 포괄적인 반정규화 적용
5. 이력모델의 조정, PK / FK 조정, 슈퍼타입 / 서브타입 조정 등 수행
- 대량 데이터가 처리되는 이력모델 성능고려
- PK/FK를 성능이 우수한 순서대로 컬럼의 순서 조정
6. 성능관점에서 데이터 모델 검증
정규화와 성능
정규화란
- 반복적인 데이터를 분리하고 각 데이터가 종속된 테이블에 적절하게(프로세스에 의해 데이터의 정합성이 지켜질 수
있어야함) 배치되도록 하는 것
- 함수의 종속성을 이용하여 정규화 작업이나 각 오브젝트에 속성을 배치하는 작업에 이용되는 것
정규화를 통한 성능 향상 전략
- 정규화는 데이터에대한 중복성 제거
- 데이터가 관심사별로 처리되는 경우가 많기 때문에 성능이 향상되는 특징
정규화를 수행하면 항상 조회 성능이 저하될까?
- 일반적으로 정규화 잘 되면 입력 / 수정 / 삭제 성능이 향상되고
반정규화를 많이 하면 조회의 성능이 향상된다고 인식할 수 는 있지만, 정규화를 통해야만 성능이 향상되는 경우도
많이 존재
=> 정규화를 많이하면 조회 성능이 무조건 떨어진다는 고정관념에서 탈피할 필요가 있음
함수정 종속성(Functional Dependency)에 근거한 정규화 수행 필요
함수적 종속성이란
데이터들이 어떤 기준값에 의해 종속되는 현상, 이 때 기준값을 결정자(Determinant), 종속되는 값을 종속자(Dependent)
-> 주민등록번호가 이름, 출생지, 주소를 함수적으로 결정한다.
대량 데이터에 따른 성능
대량 데이터 발생에 따른 테이블 분할
한개의 테이블에 대량의 데이터가 있으면
- 로우 체이닝, 로우 마이그레이션 발생
* 로우 체이닝 : row길이가 너무 길어서 데이터 블록 하나에 데이터가 모두 저장되지 않고 두 개 이상의 블록에
걸쳐 로우가 저장되는 형태
* 로우 마이그레이션 : 데이터 블록에서 수정이 발생되면 수정된 데이터를 해당 데이터 블록에서 저장하지 못하고
다른 블록의 빈 공간을 찾아 저장하는 방식
한 테이블에 많은 수의 칼럼을 가지고 있는 경우
- 1 : 1 관계로 테이블을 분리하여 디스크 I / O 양을 감소시킴
대량 데이터 저장 및 처리로 인해 성능
1. RANGE PARTITION
2. LIST PARTITION
3. HASH PARTITION
테이블에 대한 수평분할 / 수직분할의 절차
테이블에 대한 수평분할 / 수직분할에 대한 결정은 다음 4가지 원칙을 적용하면 됌
1. 데이터 모델링을 완성한다.
2. 데이터베이스 용량산정을 한다.
3. 대량 데이터가 처리되는 테이블에 대해서 트랜잭션 처리 패턴을 분석한다.
4. 칼럼 단위로 집중화된 처리가 발생하는지, 로우단위로 집중화된 처리가 발생하는지 분석하여 집중화된 단위로
테이블을 분리하는 것을 검토
'SQLD (자격증) > 1-2. 데이터 모델의 성능' 카테고리의 다른 글
데이터 모델의 성능 3 (분산 데이터베이스) (0) 2020.03.03 데이터 모델의 성능 2 (0) 2020.03.03