새소식

Study/Classes

[SQLD] 2-1. 성능 데이터 모델링 - 정규화, 반정규화

  • -
728x90

패스트캠퍼스 강의와 이기적 기본서를 기반으로 공부합니다.

1. 성능 데이터 모델링의 정의

  • 데이터 베이스 성능 향상이 목적
  • 설계 단계의 데이터 모델링부터 정규화, 반정규화, 테이블 통합, 테이블 분할, 조인구조, PK, FK 등 여러 가지 성능과 관련된 사항이 데이터 모델링에 반영될 수 있도록 하는 것

수행 시점

출처: t.ly/Um18

  • 분석/설계 - 구현 - 테스트 - 운영의 단계 중에서, 사전에 할수록 비용이 들지 않음
  • 분석/설계 단계에서 데이터베이스 처리 성능을 향상시킬 수 있는 방법을 고려해야 함

2. 성능 데이터 모델링 고려사항

  1. 정규화를 정확하게 수행
    정규화된 모델은 데이터를 주요 관심사별로 분산시키는 효과가 있음
  2. 데이터베이스 용량 산정
  3. 데이터베이스에 발생되는 트랜잭션의 유형 파악
    CRUD 메트릭스 혹은 시퀀스 다이어그램(객체지향 모델링)을 보고 파악 가능 
  4. 용량과 트랜잭션의 유형에 따라 반정규화 수행
    테이블 반정규화 / 속성 반정규화 / 관계 반정규화
  5. 이력 모델의 조정, PK/FK 조정, 슈퍼타입/서브타입 조정 등 수행
    PK/FK를 성능이 우수한 순서대로 칼럼의 순서를 조정해야 함 
  6. 성능 관점에서 데이터 모델 검증

3. 정규화

  • 데이터를 결정하는 결정자에 의해 함수적 종속을 가지고 있는 일반 속성을 의존자로 하여 입력/수정/삭제 및 이상현상을 제거하는 것
  • 목적: 데이터의 일관성, 최소한의 데이터 중복, 최대한의 데이터 유연성, 데이터 모델의 독립성 확보
  • 한 테이블의 데이터 용량이 최소화되는 효과가 있음 - 데이터의 중복 속성을 제거, 결정자에 의해 동일한 의미의 일반 속성이 하나의 테이블로 집약되기 때문
  • 비즈니스에 변화가 발생해도 데이터 모델의 변경을 최소화할 수 있음
  • 정규화된 테이블은 데이터를 처리할 때 속도가 빨라질 수도, 느려질 수도 있음
    • 조회는 처리 조건에 따라 성능 향상 혹은 저하
    • 입력, 수정, 삭제는 성능 향상됨

용어

  • 정규형 normal form : 정규화 결과에 의해 도출된 데이터 모델이 갖춰야 할 특성
  • 함수적 족송성 Functional Dependency : 테이블의 칼럼 A의 값을 알면 다른 칼럼 B값을 알 수 있다고 할 때, 칼럼 B는 칼럼 A에 함수적 종속성이 있음. 이때 칼럼 A는 결정자(determinant), 칼럼 B는 의존자.

정규화 절차

BCNF, 제4정규화, 제5정규화는 출제되지 않는다고 해서 패스! 

제1정규화 모든 속성은 원자 값을 가져야함
기본키(primary)를 설정함
다중 값을 가질 수 있는 속성은 분리되어야 함
제2정규화 제1정규형을 만족하는 상태에서 모든 non-key컬럼은 기본 키 전체에 종속되어야 함
기본 키가 2개 이상의 속성으로 이루어진 경우, 부분 함수 종속성을 분해
기본 키에 종속적이지 않거나 기본 키 일부 컬럼에만 종속적인 컬럼은 분리 필요
제3정규화 기본키를 제외한 컬럼 간에 종속성 제거 (=이행 함수 종속성 제거)
일반속성들 간 종속관계가 존재하면 분리 필요

제2정규화가 필요한 종속성 문제가 있는 테이블 예시. 출처: t.ly/ETFh

정규화와 성능

  • 정규화는 데이터 조회 시 조인을 유발하기 때문에 CPU와 메모리를 많이 사용
  • 조인이 발생하더라도 효율적인 인덱스 사용을 통해 조인 연산 수행 시 성능 상 단점은 거의 없음
  • 정규화 후 소량의 테이블이 생성되면, 그 테이블을 먼저 읽어 조인 연산 수행  →성능 상 유리

4. 반정규화

  • 성능을 향상시키기 위해 데이터 중복 허용, 조인을 줄이는 방법
  • 칼럼 / 테이블 / 관계의 반정규화로 구분 가능
  • 데이터 무결성이 깨지는 위험을 무릅쓰고 반정규화를 적용하는 이유
    • 데이터 조회 시 디스크 I/O량이 많아서 성능이 저하
    • 경로가 너무 멀어 조인으로 인한 성능 저하 예상
    • 칼럼을 계산하여 읽을 때 성능이 저하될 것이 예상
  • 반정규화를 수행하는 경우
    • 정규화에 충실하면 종속성, 활용성은 향상되지만 수행 속도가 느려지는 경우
    • 다량의 범위를 자주 처리해야 하는 경우
    • 특정 범위의 데이터만 자주 처리하는 경우
    • 요약/집계 정보가 자주 요구되는 경우

반정규화 절차

  1. 반정규화 대상 조사
  2. 다른 방법 유도 검토 (e.g 클러스터링, 뷰 테이블, 인덱스 조정, 응용프로그램, 파티션 등)
  3. 반정규화 적용

반정규화 기법 1. 테이블 반정규화

테이블 병합 1:1 관계 테이블 병합 1:1 관계의 테이블을 하나로 병합해서 성능 향상
1:N 관계 테이블 병합 1:N 관계의 테이블을 병합하여 성능 향상, but 많은 양의 데이터 중복 발생
슈퍼/서브타입 테이블 병합 슈퍼/서브 타입 관계가 발생하면 통합하여 성능 향상
테이블 분할 수직 분할 디스크 I/O 분산 처리를 위해 두 개 이상의 테이블로 컬럼 분리
트랜잭션의 처리되는 유형 파악이 선행되어야 함
수평 분할 row 단위로 집중 발생되는 트랜잭션을 분석하여 분리
디스크 I/O 및 데이터 접근 효율을 높임
테이블 추가 중복 테이블 추가 다른 업무이거나 다른 서버일 경우 테이블을 중복해 원격 조인 제거
통계 테이블 추가 합계, 평균 등의 계산 결과를 특정 컬럼에 추가
이력 테이블 추가 마스터 테이블에 존재하는 레코드를 중복하여 이력 테이블에 추가
부분 테이블 추가 자주 이용하는 컬럼을 모아놓은 별도의 테이블 생성

반정규화 기법 2. 칼럼의 반정규화

중복 칼럼 추가 조인을 감소시키기 위해 중복 컬럼 사용
파생 칼럼 추가 트랜잭션 처리를 위해 발생하는 
e.g 판매금액 합계
이력 테이블 칼럼 추가 대량의 이력 데이터를 조회하기 위해 최근값, 종료일자 등 이력테이블에 컬럼 추가
PK에 의한 칼럼 추가 복합 의미를 갖는 PK를 단일 속성으로 구성했을 때 발생
PK안에 데이터가 존재하지만 성능 향상을 위해 일반 속성으로 생성
응용 시스템의 오작동을 위한 칼럼 추가 업무적으로 의미가 없지만 사용자의 실수로 인해 원래 값의 복구가 필요한 경우
임시적으로 중복하여 보관

반정규화 기법 3. 관계 반정규화

  • 중복 관계 추가: 데이터를 처리하기 위해 여러 경로가 있어 조인이 가능하지만, 이로 인한 성능 저하를 막기 위해 추가적인 관계를 맺는 방법
  • 관계의 반정규화는 데이터 무결성을 깨뜨릴 위험 없이 데이터 처리 성능을 향상할 수 있음 (데이터의 중복 저장 X)
728x90
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.