본문 바로가기
SQLD/데이터 모델과 성능

반정규화와 성능

by Hwanii_ 2023. 11. 10.
728x90

1. 반정규화의 정의

 

1) 정규화된 엔티티 / 속성 / 관계에 대해 시스템의 성능 향상과 개발 및 운영의 단순화를 위해서,

중복 / 통합 / 분리 등을 수행.

 

2) 데이터를 중복시켜 성능을 향상시키기 위한 기법.

 

3) 데이터 무결성이 깨질 수 있는 위험을 무릅쓰고, 데이터를 중복함.

왜냐하면, 데이터를 조회 할 때, I / O 량이 너무 많아, 성능 저하가 발생 되는 경우 이기 때문 이다.

또는, 조인이 너무 많아 성능 저하, 또는, 칼럼을 계산 할 때 성능 저하 등으로, 반정규화를 수행함.

 

 

 

2. 반정규화 절차

 

1) 반정규화도 난이도 높은 데이터 모델링 기술.

 

2) 칼럼의 반정규화 뿐만 아니라, 테이블의 반정규화도 종합적으로 고려.

 

3) 근데, 반정규화를 막연하게 중복 하는 것으로 하지는 않고,

성능을 향상 시킬 수 있는 다른 방법을 충분히 고려 하고, 진짜 뭐가 없으면,

데이터를 중복 하는 방식으로 반정규화를 할 수 있음.

 

[ 추가 ]

 

일단, 반정규화 할 대상을 조사 한다.

범위 처리 빈도수를 조사 한다던지,

큰 범위 처리를 조사 하다던지,

통계적인 프로세스를 조사 한다던지,

테이블의 조인 개수를 확인 한다던지,

 

그리고 나서, 반정규화를 하기 위한 다른 방법을 검토 한다.

뷰 테이블 / 클러스터링 적용 / 인덱스의 조정 / 응용 애플리케이션 / ..

 

그리고 뭐 다 검토 했으면,

테이블을 반정규화 하거나 / 속성을 반정규화 하거나 / 관계를 반정규화 할 수 있다.

 

정리하자면, 반정규화 대상을 조사 하고, 다른 방법 있는지 없는지를 검토 후 반정규화를 적용 한다.

>> 신중 하게 !

 

 

 

3. 반정규화의 기법 - 테이블 반정규화

 

1) 테이블 병합

 

- 1 : 1 관계 테이블 병합

- 1 : M 관계 테이블 병합

- 슈퍼 / 서브 타입 테이블 병합 

 

2) 테이블 분할

 

- 수직 분할

>> 칼럼 단위의 테이블을 I / O 분산 처리를 위해, 테이블을 1 : 1로 분리 하여 성능 향상.

(트랜잭션의 처리 되는 유형 파악을 선행) 

 

- 수평 분할

>> 로우 단위로 집중 발생 되는 트랜잭션을 분석.

I / O 및 데이터 접근 효율을 높여 성능을 향상 시키기 위해 로우 단위로 테이블을 쪼갬.

 

3) 테이블 추가

 

- 중복 테이블 추가

>> 다른 업무 또는 다른 서버인 경우, 동일한 테이블 구조를 중복 시킴으로써, 원격 조인을 제거 해서 성능을 향상.

 

- 통계 테이블 추가

>> SUM / AVG / .. 등을 미리 수행 하여 계산 하고, 조회 시 성능을 향상.

 

- 이력 테이블 추가

>> 이력 테이블 중에서, 마스터 테이블에 존재하는 레코드를 중복 해서, 이력 테이블에 존재 하는 방법,

 

- 부분 테이블 추가

>> 어떤 테이블에서 특정 칼럼만 기능상 계속 자주 사용 되면,

그 자주 사용되는 칼럼만 쏙 빼서, 걔네를 새로운 테이블로 생성 하고,

기존 테이블과, 방금 막 분리한 테이블을 조인 하는 식으로 ~

 

 

 

4. 반정규화의 기법 - 칼럼의 반정규화

 

1) 중복 칼럼 추가

조인에 의해 처리 할 때, 성능 저하를 예방 하기 위함.

즉, 조인을 감소 시키기 위해, 중복 칼럼을 위치 시킴.

>> 자주 사용 되는 기법

 

2) 파생 칼럼 추가

트랜잭션이 처리 되는 시점에 계산에 의해 발생 되는 값을 성능 저하가 되는 것을 막기 위해,

미리 값을 계산 하고 칼럼에 넣어 두기.

 

3) 이력 테이블 칼럼 추가

대량 이력 데이터를 처리 할 때, 불특정한 날을 조회 하거나 또는 최근 값을 조회 할 때,

나타날 수 있는 성능 저하를 예방 하기 위해서,

이력 테이블에 최근 값 여부 / 시작 일자 / 종료 일자 / 등등 ..  의 칼럼을 추가.

 

4) PK에 의한 칼럼 추가

예를들어, 주문 테이블에 주문 PK 가 있는데,

이 주문 PK 안에 데이터가 되게 많다고 해보자.

고객 아이디, 주문 일자, 주문 시간, .. 

즉, 주문 PK 를 의미 있는 데이터로 만들어진 상태인데,

이 데이터를 조회 할 때, 만약에 특정한 데이터인 주문 일자 + 주문 시간만 뽑고 싶다면,

이 주문 일자 + 주문 시간 칼럼만 따로 빼서 얘네를 합친 칼럼을 따로 만드는 것을 의미 한다.

 

5) 응용 시스템의 오작동을 위한 칼럼 추가

업무적으로는 의미 없음.

데이터 처리가 끝났는데, 잘못 처리가 되서, 원래의 값으로 복구가 필요 할 때,

기존의 값을 임시적으로 어떤 칼럼에 중복 하여 보관하는 기법.

 

 

 

5. 반정규화의 기법 - 관계의 반정규화

 

중복 관계 추가

데이터를 처리 하기 위해, 여러 경로를 거쳐서 조인이 가능 하지만,

너무 많은 경로를 거쳐 조인 조회를 하면, 성능 저하가 발생.

그래서 조인 관계를 새롭게 효율적으로 맺는 방법 기법이 관계의 반정규화 이다.

 

테이블 / 칼럼 반정규화는 데이터 무결성에 영향을 미치지만,

 

이 관계의 반정규화는 데이터 무결성을 깨뜨리지 않고, 성능을 향상시키는 좋은 기법 이다.

 

 

 

[ 정리 ]

 

실무에서 많이 사용하는 반정규화 기법은 아래와 같다.

 

1) 중복 관계 추가 (관계 반정규화)

 

2) 중복 칼럼 추가 (칼럼 반정규화)

 

3) 부분 테이블 추가 (테이블 반정규화)

반응형

'SQLD > 데이터 모델과 성능' 카테고리의 다른 글

분산 데이터베이스와 성능  (0) 2023.11.13
데이터베이스 구조와 성능  (1) 2023.11.12
대량 데이터에 따른 성능  (1) 2023.11.12
정규화와 성능  (0) 2023.11.10
성능 데이터 모델링의 개요  (0) 2023.11.10