컴퓨터공학 공부/SQLD (SQL 전문가 가이드)

SQLD 자격증 공부 데이터 모델과 성능-성능 데이터 모델링의 개요, 정규화와 성능, 반정규화와 성능(SQL 전문가가이드)

개발학생 2024. 4. 4. 17:55
반응형

*본 게시물은 2013년도 SQL 전문가 가이드 교재(일명 '노랭이')를 참고하여 공부하고 정리한 게시물입니다

 

1과목 데이터 모델링의 이해: 제2장 데이터 모델과 성능

1. 성능 데이터 모델링의 개요

1) 성능 데이터 모델링

DB 성능향상을 위한 사항이 데이터 모델링에 반영되도록 하는 것
=> 설계단계의 데이터 모델링부터 정규화/반정규화/테이블통합/테이블분할/조인구조/Primary Key/Foreign Key

2) 수행 시점

분석/설계 단계부터 성능에 대한 데이터모델 설계를 하지 않으면,
구현-테스트-운영 단계까지 시간이 지날수록 재업무(성능개선) 비용이 증가함
-> 성능이 저하되는 SQL문 작성, 부족한 하드웨어 용량(CPU, Memory 등) 증설

3) 진행 프로세스

  1. 데이터 모델링 시 정확한 정규화 수행
  2. 데이터베이스 용량 산정 수행, 데이터베이스에서 발생하는 트랜잭션 유형 파악
  3. 용량과 트랜잭션의 유형에 따라 반정규화 수행
  4. 이력모델의 조정, Primary Key, Foreign Key 조정, 슈퍼타입/서브타입 조정 등을 수행
  5. 성능관점에서 데이터 모델 검증

2. 정규화와 성능

1) 정규화(Normalization)를 통한 성능 향상 전략

  • 데이터에 대한 중복성을 제거하고, 데이터가 관심사별로 처리되어 입력/수정/삭제 성능이 향상됨
    => 입출력 데이터의 양이 줄어들기 때문
  • 엔터티가 계속 발생하므로 SQL 문장에서 조인이 많이 발생하여, 이로 인한 조회 성능 저하가 나타날 수 있음
    => 사례에 따라 조회 성능이 향상될 수도 있으므로 유의하여 정규화 적용

2) 함수적 종속성(FD; Functional Dependency)에 근거한 정규화 수행 

함수적 종속성: 데이터들이 어떤 기준값에 의해 종속되는 현상을 지칭하는 것

-> 기준값: 결정자(Determinant), 종속되는 값: 종속자(Dependent)

=> 결정자와 종속자의 관계, 결정자의 값으로 종속자의 값을 알 수 있음

3. 반정규화와 성능

1) 반정규화(Denormalization)의 정의

  • 데이터 중복(테이블/칼럼/관계)을 허용하여 조인을 줄이는 DB 성능 향상 방법으로 데이터 조회 성능 향상
  • 정규화된 엔터티, 속성, 관계에 대해
    시스템의 성능향상 및 개발/운영 단순화를 위해 중복/통합/분리 등을 수행하는 데이터 모델링의 기법
  • 설계단계에서 적용하지 않으면 성능이 저하된 데이터베이스가 생성될 수 있으며,
    구축/시험 단계에서 반정규화를 적용할 때 수정에 따른 노력비용이 많이 들게 됨
    -> 단, 무분별하게 많이 적용하면 데이터 무결성이 깨질 가능성이 높으므로 이를 보장할 수 있는 방법을 반드시 고려

2) 반정규화 절차

절차 설명
1. 반정규화 대상 조사 - 데이터 처리 범위/빈도 수 조사 (범위를 줄이지 않으면 성능 보장할 수 없는 경우) 
- 자주 사용하는 테이블에 접근하는 프로세스 수 조사
  (프로세스가 많고 항상 일정한 범위만을 조회하는 경우)
- 테이블 조인 개수 (많은 조인 때문에 데이터 조회 작업이 어려운 경우)
2. 다른 방법유도 검토 - 성능을 고려한 뷰[View] 생성
  (많은 조인 때문에 데이터 조회 작업이 어려운 경우-조회 성능 향상되지는 않음)
- 클러스터링 적용 or 인덱스의 조정 or Primary Key의 성격에 따라 부분적인 테이블로 분리[파티셔닝]
   (다량의 데이터 처리나 부분처리에 의해 성능이 저하되는 경우)
- 응용 애플리케이션에서 로직을 구사하는 방법 변경
- 응용 메모리 영역에 데이터를 처리하기 위한 값 캐싱, 중간 클래스 영역에 데이터를 캐싱하여 공유
   (성능이 저하된 경우)
3. 반정규화 적용 - 테이블 반정규화
- 속성 반정규화
- 관계 반정규화
=> 테이블/속성/관계를 중복으로 가져가도 되지만, 테이블/속성/관계를 추가/분할/제거할 수도 있음

 

3) 반정규화 기법

*디스크 I/O: 데이터를 작성 하고 변경 할 때 하드디스크(HDD)에 저장되는 것

(1) 테이블의 반정규화

기법분류 기법 내용
테이블병합 1:1 관계 테이블병합 1:1 관계를 통합하여 성능 향상
1:M 관계 테이블병합 1:M 관계를 통합하여 성능 향상
슈퍼/서브타입 테이블병합 슈퍼/서브 관계를 통합하여 성능 향상
테이블분할 수직분할 컬럼단위 테이블을 디스크 I/O를 분산처리 하기 위해
테이블을 1:1로 분리하여 성능향상
=> 트랜잭션 처리 유형 파악이 선행되어야 함
수평분할 로우 단위로 집중 발생되는 트랜잭션을 분석하여
디스크 I/O 및 데이터 접근 성능 향상을 위해 줄(row)단위로 테이블을 쪼갬
=> 관계가 없음
테이블추가 중복테이블 추가 다른 업무이거나 서버가 다른 경우,
동일한 테이블구조를 중복하여 원격조인을 제거해서 성능 향상
통계테이블 추가 SUM, AVG 등을 미리 계산해둬서 조회 시 성능 향상
이력테이블 추가 이력테이블 중 마스터 테이블에 존재하는 레코드를 중복하여 성능 향상
부분테이블 추가 하나의 테이블의 전체 칼럼 중 자주 이용하는 집중화된 칼럼들이 있을 때,
디스크 I/O를 줄이기 위해 해당 칼럼들을 모아놓은 별도의 반정규화된 테이블 생성

(2) 칼럼/관계 반정규화

기법분류 기법 내용
칼럼의 반정규화 중복칼럼 추가 조인에 의해 처리할 때 성능저하를 예방하기 위해,
중복된 칼럼을 위치켜 조인을 감소시킴
파생칼럼 추가 트랜잭션이 처리되는 시점에 계산에 의해 발생되는 성능저하를 예방하기 위해, 미리 값을 계산하여 칼럼에 보관함(Derived Column)
이력테이블 칼럼추가 대량의 이력데이터를 처리할 때 불특정 날짜에 조회하거나 최근 값을 조회할 때 나타날 수 있는 성능 저하를 예방하기 위해,
이력테이블에 기능성 칼럼(최근값 여부, 시작과 종료 일자) 추가
PK에 의한 칼럼 추가 복합의미를 갖는 PK를 단일 속성으로 구성했을 때 해당 PK 안에서 값을 별도로 조회하면 성능 저하가 나타날 수 있으므로,
성능향상을 위해 PK 안의 종속자를 일반속성으로 추가
응용시스템 오작동을 위한 칼럼 추가 사용자가 데이터를 잘못 처리하여 원래 값으로 복구할 수 있도록,
이전 데이터를 임시적으로 중복하여 보관하는 기법
=> 이력데이터 모델로 풀어내면,
     임시기법이 아닌 정상적인 데이터 모델의 기법이 될 수 있음
관계의 반정규화 중복관계 추가 관계가 먼 테이블끼리 조인 시 일어나는 성능 저하를 예방하기 위해 관계 추가
=> 데이터 무결성 깨뜨릴 위험 없이 성능 향상

 

 

반응형