728x90
3) 반정규화와 성능
1. 반정규화를 통한 성능향상 전략
-
반정규화의 정의
-
정규화된 엔터티, 속성, 관계에 대해 시스템의 성능향상&개발&운영의 단순화를 위해
-
협의 : 데이터를 중복하여 성능을 향상시키기 위한 기법
-
광의 : 성능을 향상시키기 위해 정규화된 데이터 모델에서 중복, 통합, 분리 등을 수행하는 모든 과정
-
정규화를 거치면 입력/수정/삭제 뿐만 아니라 조회에 대한 성능도 향상된다. 하지만 엔터티의 개수와 관계가 증가하기 때문에 여러 조인을 통해 데이터를 가져오는 경우가 발생한다. 이에 대한 해법으로 반정규화를 진행한다.
-
설계단계에서 반정규화를 적용하기 위해 함수적 종속관계는 위반하지 않는 선에서 데이터 중복을 허가
-
-
반정규화의 적용방법
- 칼럼 중복을 통한 반정규화
- 다른테이블에 조인하여 가져와야할 칼럼을, 기준이 되는 테이블에 중복하여 SQL문장을 단순하게 처리하는 것
- 반정규화 진행에 앞서 칼럼의 반정규화 뿐만 아니라, 테이블의 반정규화와 관계의 반정규화 등 종합적인 검토가 필요
- 칼럼 중복을 통한 반정규화
-
반정규화 절차
- 반정규화 대상 조사
- 범위처리빈도수 조사 : 자주 사용되는 테이블에 접근하는 프로세스의 수가 많고 항상 일정한 범위만을 조회하는 경우 반정규화를 검토
- 대량의 범위 처리 조사 : 대량의 데이터를 포함한 테이블을 자주 처리하는 경우에 반정규화를 검토
- 통계성 프로세스 조사 : 통계 정보를 필요로할 때 별도의 통계테이블(반정규화 테이블)을 생성하여 사용
- 테이블 조인 개수 : 테이블에 지나치게 많은 조인이 걸려 데이터를 조회하는 작업이 기술적으로 어려운 경우 반정규화를 검토
- 다른 방법유도 검토
- 가급적이면 반정규화(데이터 무결성을 깨뜨리는 위험이 있기 때문에)가 아닌 다른 방법을 활용
- 조인이 많이 걸린 테이블에 조회를 작업하는 경우 뷰(VIEW)를 사용하면 성능 향상을 이끌 수 있다
- 응용 애플리케이션에서 로직을 개선한다
- 반정규화 적용
- 반정규화 대성 : 테이블, 속성, 관계에 대해 반정규화를 적용할 수 있다
- 대상에 대해 중복 또는 분할의 추가 작업 수행을 통해 반정규하를 진행한다
- 반정규화 대상 조사
2. 반정규화의 기법
-
테이블 반정규화
- 테이블 병합
- 1:1 관계를 통합한 테이블을 통해 성능 향상
- 1:M 관계를 통합한 테이블로 성능 향상
- 슈퍼/서브 관계를 통합한 테이블로 성능 향상
- 테이블 분할
- 수직 분할 : 칼럼 단위의 테이블을 1:1로 분리하여 성능 향상(먼저 트랜잭션 처리 유형을 파악해야 함)
- 수평 분할 : raw 단위로 집중되는 트랜잭션을 분석하여 raw단위로 테이블을 분리하여 데이터 접근 효율성을 높임
- 테이블 추가
- 중복테이블 추가 : 업무 또는 서버가 다른경우, 동일한 테이블 구조를 중복하여 원격조인을 제거함으로써 성능 향상
- 통계테이블 추가 : SUM, AVG 등 미리 계산 결과를 저장한 테이블을 추가하야 조회 시 성능 향상
- 이력테이블 추가 : 마스터테이블에 존재하는 레코드를 중복하여 이력테이블에 저장하는 방법
- 이력 데이터에 관련한 정보 확인
- 부분테이블 추가 : 테이블 안에 집중적으로 자주 이용되는 칼럼들을 모아놓은 별도의 반정규화 된 테이블을 생성하여 성능 향상
- 테이블 병합
-
칼럼 반 정규화
- 중복칼럼 추가 : 조인을 수행하면서 성능이 저하되는 것을 예방하기 위해 조인이 칼럼을 추가
- 파생칼럼 추가 : 미리 계산을 수행하고 값을 칼럼에 보관하여 트랜잭션이 처리되는 시점에 사용
- 이력테이블 칼럼 추가 : 이력테이블에 가능성 칼럼(최근값 여부, 시작과 종료 일자 등)을 추가하여 이력데이터 처리시 성능 향상
- PK에 의한 칼럼 추가 : 단일 PK안에서 특정값을 별도로 조회하는 경우 성능 저하가 발생, PK안에 일반 속성을 포함시켜 성능 향상
- 응용시스템 오작동을 위한 칼럼 추가 : 데이터 처리 이전 데이터를 임시적으로 중복하여 보관하는 기법
-
관계 반 정규화
- 중복관계 추가 : 데이터를 처리하기 위한 조인으로 발생하는 성능저하를 예방하기 위해 추가적인 관계를 맺는 방법
- 관계의 반정규화는 데이터 무결성을 깨뜨리지 않고 데이터 처리 성능을 향상 시킬 수 있다(테이블과 칼럼에 대한 반정규화는 데이터 중복에 따른 문제가 발생할 수 있음)
출처 : https://blog.naver.com/handuelly/221709570862
728x90
300x250