1-2장 데이터 모델과 성능 - 3절 반정규화와 성능

Study/SQLD

1-2장 데이터 모델과 성능 - 3절 반정규화와 성능

tnddj1219 2022. 6. 16. 19:50
728x90

1. 반정규화를 통한 성능향상 전략

반정규화의 정의
정규화를 수행하지 않은 모델. 정규화된 엔터티, 속성, 관계에 대해 시스템의 성능향상과 개발과 운영의 단순화를 위해 중복, 통합, 분리 등을 수행하는 데이터 모델링 기법
중복성의 원리를 활용하여 데이터 조회시 성능 향상시키는 역할이 있음

반정규화를 적용하는 이유
데이터를 조회할 때 디스크 I/O량이 많아서 성능저하 발생
경로가 너무 멀어 조인으로 인한 성능 저하가 예상
칼럼을 계산하여 읽을 때 성능이 저하되는 것이 예상되는 경우

반정규화의 적용방법

  내용 설명
1 반정규화
대상 조사
자주 사용되는 테이블에 접근하는 프로세스의 수가 많고 일정한 범위만 조회하는 경우
테이블에 다량의 데이터가 있고 대량의 범위를 자주 처리하는 경우
통계성 프로세스에 의해 통계정보를 필요로 할 때 별도의 통계테이블(반정규화 테이블) 생성
테이블이 지나치게 많은 JOIN이 걸려 데이터를 조회하는 작업이 기술적으로 어려운 경우
2 다른 방법
유도 검토
뷰: 지나치게 많은 조인이 걸려 데이터 조회하는 작업이 기술적으로 어려운 경우
클러스트링 / 인덱스: 대량의 데이터처리나 부분 처리에 의해 성능 저하 되는 경우
파티셔닝 기법: 대량의 데이터는 Primary Key 성격에 따라 부분적인 테이블로 분리
애플리케이션: 응용 애플리케이션에서 로직을 구사하는 방법을 변경함으로써 성능 향상
3 반정규화
적용
정규화 수행후 반정규화 수행(테이블/속성/관계)
사전에 충분히 성능에 대한 고려가 이루어져서 반정규화를 적용해야 겠다는 판단이 들었을 때 테이블, 속성, 관계에 대해 반정규화 적용
꼭 테이블과 속성, 관계에 대해 중복으로 가져가는 방법만이 반정규화가 아니고, 테이블, 속성, 관계를 추가 or 분할 할 수 도 있으며 제거할 수도 있음

2. 반정규화 기법

테이블 반정규화
1) 테이블 병합

기법 내용
1:1 관계 테이블 병합 1:1 관계를 통합하여 성능향상
1:M 관계 테이블 병합 1:M 관계를 통합하여 성능향상
슈퍼/서브타입 테이블 병합 슈퍼/서브 관계를 통합하여 성능향상

2) 테이블 분할

기법 내용
수직분할 칼럼단위의 테이블을 디스크 I/O 분산처리하기 위해 테이블을 1:1 분리하여 성능향상
(트랜잭션의 처리되는 유형을 파악이 선행되어야 함)
수평분할 로우단위로 집중 발생되는 트랜잭션을 분석하여 디스크 I/O 및 데이터 접근의 효율성을 높여 성능 향상 하기 위해 로우단위로 테이블을 쪼갬

3) 테이블 추가

기법 내용
중복테이블 추가 다른 업무이거나 서버가 다른 경우 테이블구조를 중복하여 원격조인을 제거하여 성능 향상
통계테이블 추가 SUM, AVG 등을 미리 수행하여 계산해 둠으로 써 조회 시 성능 향상
이력테이블 추가 이력테이블 중 마스터 테이블에 존재하는 레코드를 중복하여 이력 테이블에 존재하는 방법은 반정규화의 유형
부분테이블 추가 하나의 테이블의 전체 컬럼 중 자주 이용하는데 자주 이용하는 집중화된 칼럼들이 있을 때 디스크 I/O를 줄이기 위해 해당 컬럼들을 모아놓은 별도의 반정규화된 테이블을 생성


칼럼 반정규화

기법 내용
중복컬럼 추가 조인에 의해 처리할 때성능저하를 예방하기 위해 즉 조인을 감소시키기 위해 중복된 컬럼 위치시킴
파생컬럼 추가 트랜잭션이 처리되는 시점에 계산에 의해 발생되는 성능저하를 예방하기 위해 미리 값을 계산하여 칼럼에 보관
이력테이블 컬럼 추가 대량의 이력데이터를 처리할 때 불특정날 조회나 최근 값을 조회할 때 나타날 수 있는 성능 저하를 예방하기 위해 이력테이블에 기능성 컬럼(최근값 여부, 시작과 종료일자)등을 추가
PK에 의한 컬럼 추가 복합의미를 갖는 PK를 단일 속성으로 구성하였을 경우 발생. 단일 PK 안에서 특정값을 별도로 조회하는 경우 성능 저하가 발생
응용 시스템 오작동을
위한 컬럼 추가
사용자가 데이터처리하다가 잘못 처리하여 원래 값으로 복구하기를 원하는 경우 이전 데이터를 임시적으로 중복하여 보관하는 기법


관계 반정규화

중복 관계 추가: 데이터 처리하기 위한 여러 경롤를 거쳐 조인이 가능하지만 이때 발생할 수 있는 성능 저하를 예방하기 위해 추가적인 관계를 맺는 방법

반정규화와 무결성 보장 여부
테이블, 컬럼의 반정규화 → 데이터 무결성에 영향을 미침
관계의 반정규화 → 데이터 무결성에 영향을 끼지지 않고서 데이터처리의 성능 향상시킬 수 있는 반정규화 기법

3. 정규화가 잘 정의된 데이터 모델에서 성능이 저하될 수 있는 경우

프로젝트를 할 때도 이와 같이 SQL 문장의 성능과 단순성을 고려하지 않고 무모하게 설계되는 경우
반정규화를 적용할 때 기억해야 할 내용은 데이터를 입력, 수정, 삭제할 때는 성능이 떨어지는 점을 기억해야 하고 데이터의 무결성 유지에 주의를 해야 한다

728x90