반응형
반정규화를 통한 성능 향상 전략

 

반정규화(=역정규화) 용어는 조금 다르게 표현되어도 그 의미는 동일하다.

여기에서 반정규화는 한자로 反 의 의미이다. 영어로는 De-Nomalization 이다.

비정규화는 아예 정규화를 수행하지 않은 모델을 지칭할 때 사용한다.

 

반정규화를 정의하면 정규화된 엔터티, 속성, 관계에 대해 시스템의 성능향상과 개발(Development)과 운영(Maintenace)의 단순화를 위해 중복, 통합, 분리 등을 수행하는 데이터 모델링의 기법을 의미한다.

 

데이터 무결성이 깨질 수 있는 위험을 무릅쓰고 데이터를 중복하여 반정규화를 적용하는 이유

  • 데이터를 조회할 때 디스크 I/O 량이 많아서 성능이 저하되거나
  • 경로가 너무 멀어 조인으로 인한 성능 저하가 예상되거나
  • 칼럼을 계산하여 읽을 때 성능이 저하될 것이 예상되는 경우

반 정규화를 수행하게 된다.

 

기본적으로 정규화는 입력/수정/삭제에 대한 성능을 향상시킬 뿐만 아니라 조회에 대해서도 성능을 향상시킨다.

그러나 정규화만을 수행하면 엔터티의 갯수가 증가하고 관계가 많아져 일부 여러 개의 조인이 걸려야만 데이터를 가져오는 경우가 있다. 이러한 경우 업무적으로 조회에 대한 처리성능이 중요하다고 판단될 때 부분적으로 반정규화를 고려하게 되는 것이다. 또한 정규화와 함수적 종속관계는 위반하지 않지만 데이터의 중복성을 증가시켜야만 데이터의 성능을 향상시키는 경우가 있다. 이러한 경우 반정규화를 통해서 성능을 향상시킬 수 있게 되는 것이다.

 

반정규화의 적용방법

반정규화를 적용할 때는 기본적으로 데이터 무결성이 깨질 가능성이 많이 있기 때문에

반드시 데이터 무결성을 보장할 수 있는 방법을 고려한 이후에 반정규화를 적용하도록 해야 한다.

 

정규화반정규화 사이에는 Trade-Off 관계

즉, 마치 저울추가 양쪽에 존재하여 한쪽이 무거워지면 다른쪽은 위로 올라가는 것 처럼

정규화만을 강조하다 보면 성능의 이슈가 발생될 수 있고

반정규화를 과도하게 적용하다 보면 데이터 무결성이 깨질 수 있는 위험이 증가하게 되는 것이다.

 

따라서 반정규화를 적용할 때에는 데이터 무결성이 중요함을 알고 데이터 무결성이 충분히 유지될 수 있도록

프로세스 처리에 있어 안정성이 먼저 확인이 되어야 한다.

 

테이블 반정규화
기법분류 기법 내용
테이블병합 1:1 관계 테이블 병합 1:1 관계를 통합하여 성능향상
1:M 관계 테이블 병합 1:M 관계 통합하여 성능향상
슈퍼/서브타입 테이블 병합 슈퍼/서브 관계를 통합하여 성능향상
테이블분할 수직분할 칼럼단위의 테이블을 디스크 I/O를 분산처리 하기 위해 테이블을 1:1로 분리하여 성능향상 (트랜잭션의 처리되는 유형을 파악이 선행되어야 함)
수평분할 Row 단위로 집중 발생되는 트랜잭션을 분석하여 디스크I/O 및 데이터 접근의
효율성을 높여 성능을 향상하기 위해 Row 단위로 테이블을 쪼갬(관계가 없음)
테이블추가 중복테이블 추가 다른 업무이거나 서버가 다른 경우 동일한 테이블 구조를 중복하여 원격조인을 제거하여 성능을 향상
통계테이블 추가 SUM, AVG 등을 미리 수행하여 계산해 둠으로서 조회시 성능을 향상
이력테이블 추가 이력테이블 중에 마스터 테이블에 존재하는 레코드를 중복하여 이력테이블에 존재하는 방법은 반정규화의 유형
부분테이블 추가 하나의 테이블의 전체 칼럼 중 자주 이용하는데 자주 이용하는 집중화된 칼럼들이 있을 때 디스크 I/O를 줄이기 위해 해당 칼럼들을 모아 놓은 별도의 반정규화된 테이블을 생성

 

칼럼 반정규화
반정규화 기법 내용
중복칼럼 추가 조인에 의해 처리할 때 성능 저하를 예방하기 위해
즉, 조인 감소를 위해 여러 테이블에 동일한 칼럼을 갖도록 한다.
파생칼럼 추가 트랜잭션이 처리되는 시점에 계산에 의해 발생되는 성능저하를 예방하기 위해
미리 값을 계산하여 칼럼에 보관함 (Derived Column)
조회 성능을 우수하게 하기 위해 미리 계산된 칼럼을 갖도록 한다.
이력테이블
칼럼 추가
대량의 이력데이터를 처리할 때 불특정 날 조회나 최근 값을 조회할 때 나타날 수 있는
성능저하를 예방하기 위해 이력테이블에 기능성 칼럼(최근값 여부 시작과 종료일자 등)을 추가함
최신값을 처리하는 이력의 특성을 고려하여 기능성 칼럼을 추가한다.
PK에 의한
칼럼 추가
복합의미를 갖는 PK를 단일 속성으로 구성하였을 경우 발생됨.
단일 PK안에서 특정값을 별도로 조회하는 경우 성능저하가 발생할 수 있음.
이때 이미 PK안에 데이터가 존재하지만 성능향상을 위해 일반속성으로 포함하는 방법이
PK에 의한 칼럼 추가 반정규화이다.
응용시스템
오작동을 위한
칼럼 추가
업무적으로는 의미가 없지만 사용자가 데이터 처리를 하다가 잘못 처리하여 원래 값으로
복구하기를 원하는 경우 이전 데이터를 임시적으로 중복하여 보관하는 기법.
칼럼으로 이것을 보관하는 방법은 오작동 처리를 위한 임시적인 기법이지만 이것을 이력데이터 모델로
풀어내면 정상적인 데이터 모델의 기법이 될 수 있음

 


 

# Reference:

 

반정규화와 성능

1. 반정규화를 통한 성능향상 전략 가. 반정규화의 정의 반정규화(=역정규화) 용어는 조금 다르게 표현되어도 그 의미는 동일하다. 여기에서 반정규화는 ‘반(Half)’의 의미가 아닌 한자로 반대

dataonair.or.kr

 

반응형

'Language > RDBMS' 카테고리의 다른 글

데이터베이스 구조와 성능  (0) 2023.03.07
대량 데이터에 따른 성능  (0) 2023.03.07
정규화와 성능  (0) 2023.03.07
성능 데이터 모델링  (0) 2023.03.07
식별자(Identifiers)  (0) 2023.03.07

+ Recent posts