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

    가. 반정규화의 정의

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

나. 반정규화의 적용방법

  • 반정규화의 대상을 조사한다.
    • 자주 사용되는 테이블에 접근(Access)하는 프로세스의 수가 많고 항상 일정 범위만을 조회하는 경우
    • 테이블에 대량의 데이터가 있고 대량의 데이터 범위를 자주 처리하는 경우
    • 통계성 프로세스에 의해 통계 정보를 필요로 할 때
    • 테이블에 지나치게 많은 조인이 걸려 데이터를 조회하는 작업이 기술적으로 어려울 경우
  • 반 정규화의 대상에 대해 다른 방법으로 처리할 수 있는지 검토한다.
    • 지나치게 많은 조인이 걸려 데이터를 조회하는 작업이 기술적으로 어려울 경우 뷰(VIEW)를 사용하는 방법
    • 대량의 데이터처리나 부분처리에 의해 성능이 저하되는 경우 클러스터링을 적용하거나 인덱스를 조정하는 방법
    • 대량의 데이터는 Primary Key의 성격에 따라 부분적인 테이블로 분리하는 방법(파티셔닝 기법)
    • 응용 애플리케이션에서 로직을 구사하는 방법을 변경하는 방법(응용 메모리 영역에서 값을 캐쉬, 캐쉬를 공유 등)
  • 반정규화를 적용한다.
    • 반정규화를 하는 대상으로는 테이블, 속성, 관계에 대해 적용할 수 있으며 꼭 테이블과 속성, 관계에 대해 중복으로 가져가는 방법만이 반정규화가 아니고 테이블, 속성, 관계를 추가할 수도 있고 분할할 수도 있으며 제거할 수도 있다.
  1. 반정규화의 기법

    가. 테이블 반정규화

    나. 컬럼 반정규화

    다. 관계 반정규화

  • 테이블과 컬럼의 반정규화는 데이터 무결성에 영향을 미치게 되나 관계의 반정규화는 데이터 무결성을 깨뜨릴 위험을 갖지 않고서도 데이터처리의 성능을 향상시킬 수 있는 반정규화의 기법이 된다.

 
 

  1. 정규화가 잘 정의된 데이터 모델에서 성능이 저하될 수 있는 경우 – 책 참조
  2. 정규화가 잘 정의된 데이터 모델에서 성능이 저하된 경우 – 책 참조

By haisins

오라클 DBA 박용석 입니다. haisins@gmail.com 으로 문의 주세요.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다