본문 바로가기

카테고리 없음

성능 데이터 모델링 / 정규화 / 반정규화

성능 데이터 모델링

  • 성능 데이터 모델링이란 데이터베이스 성능향상을 목적으로 설계단계의 데이터 모델링 때부터 정규화, 반정규화, 테이블통합, 테이블분할, 조인구조, PK, FK 등 여러 가지 성능과 관련된 사항이 데이터 모델링에 반영될 수 있도록 하는 것
  • 일반적으로 성능이라고 하면 데이터조회의 성능을 의미함, 업무에 따라서는 입력/수정/삭제의 성능이 중요한 경우도 있음
  • 분석/설계 단계에서 데이터 모델에 성능을 고려한 데이터 모델링을 수행할 경우 성능저하에 따른 재업무(Rework) 비용을 최소화 할 수 있음

 

성능 데이터 모델링의 순서

  1. 데이터 모델링을 할 때 정규화를 정확하게 수행한다.
  2. 데이터베이스 용량산정을 수행한다.
  3. 데이터베이스에 발생되는 트랜잭션의 유형을 파악한다.
  4. 용량과 트랜잭션의 유형에 따라 반정규화를 수행한다.
  5. 이력모델의 조정, PK/FK조정, 슈퍼타입/서브타입 조정 등을 수행한다.
  6. 성능관점에서 데이터 모델을 검증한다.

 

 

정규화

  • 데이터를 결정하는 결정자에 의해 함수적 종속을 가지고 있는 일반속성을 의존자로 하여 입력/수정/삭제 이상을 제거하는 것
  • 데이터의 중복속성을 제거하고 결정자에 의해 동일한 의미의 일반속성이 하나의 테이블로 집약되므로 한 테이블의 데이터 용량이 최소화됨
  • 일반적으로 정규화가 잘 되어 있으면 입력/수정/삭제의 성능이 향상되고 반정규화를 많이 하면 조회의 성능이 향상됨. 그러나 정규화를 해야만 조회 성능이 향상되는 경우도 있음

 

1차 정규화

속성이 원자값(Atomic Value)을 갖도록 함. "기본키" 보유

같은 성격과 내용의 속성이 중복될 때, 중복 값은 제거, 새로운 테이블 추가 (PK 추가)

기존 테이블과 1:M 관계 형성

 

칼럼에 의한 반복적인 속성값을 갖는 형태는 속성의 원자성을 위배한 제1차 정규화의 대상

모든 반복 속성에 인덱스를 생성하게 되면 검색 속도는 좋아지겠지만, 입력 수정 삭제의 성능이 저하되므로, 1차 정규화를 통해 문제를해결

 

2차 정규화

기본키가 2개 이상의 속성일 때. "부분 함수 종속성 제거"

PK(Primary Key)가 2개 이상일 때, 부분 함수적 종속(기본키 전체가 아니라, 일부에 대해 종속될 때)되는 관계가 있다면 분리한다.

 

[관서번호], [관서번호,납부자번호]로 분리하여  부분 함수 종속성 제거
[학번], [학번, 과목번호]로 분리하여  부분 함수 종속성 제거

 

3차 정규화

"이전적 함수 종속 관계"

기본 키에 의존하지 않고, 일반 컬럼에 의존하는 컬럼이 있다면 이를 제거한다.

A->B, B->C 일 때 A->C 가 성립하면 이행 종속이라고 한다. 

부서이름, 시작일, 종료일은 부서코드에 의존함

 

1NF 테이블의 속성 하나는 하나의 속성값만을 가져야 함
2NF 기본키 중에 특정 컬럼에만 종속된 컬럼이 존재할 경우 테이블을 분해
3NF 제 2정규형을 만족하는 상태에서 이행 함수 종속을 제거하는 정규화 과정
BCNF 모든 결정자가 후보키 집합에 속해야 함

 

반정규화

  • 정규화된 엔터티, 속성, 관계에 대해 시스템의 성능향상과 개발(Development)과 운영(Maintenance)의 단순화를 위해 중복, 통합, 분리 등을 수행하는 데이터 모델링의 기법
  • 데이터 무결성이 깨질 수 있는 위험이 있지만, 데이터를 조회할 때 디스크 I/O량이 많아서 성능이 저하되거나 경로가 너무 멀어 조인으로 인한 성능저하가 예상되거나 칼럼을 계산하여 읽을 때 성능이 저하될 것이 예상되는 경우 반정규화를 수행

 

반정규화 절차

1. 반정규화 대상조사

  • 범위처리빈도수 조사
  • 대량의 범위 처리 조사
  • 통계성 프로세스 조사
  • 테이블 조인 개수

 

2. 다른 방법유도 검토

  • 뷰(VIEW) 테이블 : 지나치게 많은 조인(JOIN)이 걸려 데이터를 조회하는 작업이 기술적으로 어려울 경우
  • 클러스터링 적용 : 대량의 데이터처리나 부분처리에 의해 성능이 저하되는 경우
  • 인덱스의 조정 : 대량의 데이터처리나 부분처리에 의해 성능이 저하되는 경우
  • 파티셔닝(Partitioning) 적용 : 대량의 데이터는 Primary Key의 성격에 따라 부분적인 테이블로 분리, 논리적으로는 하나의 테이블이지만 물리적으로는 여러 개의 테이블로 분리하여 성능 향상
  • 응용애플리케이션 : 응용 애플리케이션에서 로직을 구사하는 방법을 변경함으로써 성능 향상

 

3. 반정규화 적용

  • 테이블 반정규화
테이블 병합 1:1 관계 테이블 병합  
1:M 관계 테이블 병합  
슈퍼/서브타입 테이블 병합  
테이블 분할 수직분할 자주 접근하는 칼럼들과 접근 빈도가 낮은 칼럼들을 구분하여 1:1로 테이블을 분리하면 디스크 I/O가 줄어들어 성능 향상
수평분할 로우 단위로 테이블을 쪼개 로우 단위로 집중 발생되는 트랜잭션에 의한 디스크 I/O 및 데이터 접근의 효율성을 높임
테이블 추가 중복테이블 추가 다른 업무이거나 서버가 다른 경우 동일한 테이블구조를 중복하여 원격조인을 제거
통계테이블 추가 SUM, AVG 등을 미리 계산해 둠
이력테이블 추가 마스터 테이블에 존재하는 레코드를 중복하여 이력테이블에 존재하게 함
부분테이블 추가 자주 이용하는 칼럼들을 별도로 모아놓은 테이블을 생성
  • 속성의 반정규화
중복 칼럼 추가 중복 칼럼으로 조인을 감소시킴
파생 칼럼 추가 미리 값을 계산하여 칼럼에 보관, Derived Colimn
이력테이블 칼럼 추가 기능성 칼럼(최근값 여부, 시작과 종료일자 등)을 추가
PK에 의한 칼럼 추가 이미 PK안에 데이터가 존재하지만 성능향상을 위해 일반속성으로 포함하는 방법
응용시스템 오작동을 위한 칼럼 추가 이전 데이터를 임시적으로 중복하여 보관하는 기법
  • 관계의 반정규화
중복관계 추가 데이터를 처리하기 위한 여러 경로를 거쳐 조인이 가능하지만 이 때 발생할 수 있는 성능저하를 예방하기 위해 추가적인 관계를 맺는 방법

      테이블과 칼럼의 반정규화는 데이터 무결성에 영향을 미치나, 관계의 반정규화는 데이터 무결성에 영향을 미치치 않음

 

 

 

슈퍼/서브 타입 데이터 모델의 변환 기술

  • 개별로 발생되는 트랜잭션에 대해서는 개별 테이블로 구성
  • 슈퍼타입+서브타입에 대해 발생되는 트랜잭션에 대해서는 슈퍼타입+서브타입 테이블로 구성
  • 전체를 하나로 묶어 트랜잭션이 발생할 때는 하나의 테이블로 구성

 

 

 

DATA ON-AIR 성능 데이터 모델링의 개요

DATA ON-AIR 정규화와 성능

DATA ON-AIR 반정규화와 성능

[SQL] 1차 2차 3차 정규화 개념 및 사례 정리