# 4. 데이터 모델과 성능
4.1 성능 데이터 모델링의 개요
4.1.1 성능 데이터 모델링의 정의
- 데이터베이스 성능을 고려하여 데이터 모델링을 수행하는 것
- 정규화, 반정규화, 테이블 통합 및 분할, 조인 구조, PK/FK 설정 등
- 수행 시점
- 빠를 수록 좋음
- 분석/설계 단계에서 성능 모델링 수행 -> 재업무 비용 최소화
- 일반적인 경우
- 대충 설계 -> 성능 저화 -> 해당 부분만 SQL 튜닝
- 성능 데이터 모델링의 순서
- 정규화를 정확하게 수행
- 데이터베이스 용량산정 수행
- 각 엔터티에 어느 정도의 트랜잭선이 들어오는지 파악
- 데이터베이스에 발생되는 트랜잭션의 유형 파악
- 용량과 트랜잭션의 유형에 따라 반정규화 수행
- 이력모델의 조정, 인덱스를 고려한 PK/FK의 순서 조정, 수퍼타입/서브타입 조정 등 수행
- 관계형 모델 제약
- 도메인 제약
- 속성 값은 원자성을 가지며, 도메인에서 정의된 값이어야 함
- 키 제약
- 릴레이션의 모든 튜플은 서로 식별 가능해야 함
- 개체 무결성 제약
- 기본키는 NOT NULL & UNIQUE 이어야 함
- 참조 무결성 제약
- FK는 NULL이거나 NULL이 아닌 경우 실제로 존재하는 값을 구성해야
- 정규화와 성능
- 이상현상
- 정규화
- 목적: 삽입/삭제/갱신 이상현상 방지
- 함수적 종속성(FD, Functional Dependency)에 기반
- 종류
- 1NF: 모든 값이 원자값을 가짐
- 2NF: 부분함수종속 제거
- 3NF: 이행함수종속 제거
- 효과
- 데이터 중복 감소 → 성능 향상
- 데이터가 관심사별로 묶임 → 성능 향상
- 조회 질의에서 조인이 많이 발생 → 성능 저하
→ 정규화를 통해 일반적으로 성능이 향상되나, 조회의 경우 처리 조건에 따라 성능이 향상되거나 저하됨
- 반정규화의 정의
- 반정규화(=역정규화 = Denormalization)
- 정규화된 엔터티, 속성, 관계에 대해 성능 향상을 목적으로 중복, 통합, 분리를 수행하는 데이터 모델링 기법
- cf) 비정규화: 정규화를 아예 수행하지 않음
- 특징
- 테이블, 칼럼, 관계의 반정규화를 종합적으로 고려해야 함
- 과도한 반정규화 → 데이터 무결성을 침해하게
- 반정규화의 사전 절차
- 다른 방법 유도
- 뷰(View) 생성: 뷰 자체가 성능 향상을 가져오지 않음, 신중하게 설계뙨 뷰를 재사용할 때 성능 향상
- 클러스터링: 자주 사용되는 테이블의 데이터를 디스크와 같은 블록에 저장
- 인덱스의 조정: 인덱스 추가, 삭제 및 순서 조정
- 응용 애플리케이션: 데이터 처리를 위한 로직 변경
- 반정규화 기법 - 칼럼 반정규화
- 중복칼럼 추가
- 조인 횟수를 감소시키기 위해, 다른 테이블의 칼럼을 중복으로 저장함
- 파생칼럼 추가
- 값의 계산으로 인한 시간 지연을 줄이기 위해, 예상되는 값을 미리 계산하여 중복을 저장함(Derived Attribute)
- 이력테이블칼럼 추가
- 대량 이력 데이터 처리의 성능 향상을 위해 종료 여부, 최근값 여부 등의 칼럼을 추가로 저장
- PK의 의미적 분리를 위한 칼럼 추가
- PK가 복합 의미를 갖고 있는 경우 구성 요소 값의 조회 성능 향상을 위해 일반 속성을 추가함
- 예) 차량번호가 ‘지역’ + ‘일련번호로 구성된 경우 ‘지역’ 일반속성 추가
- 데이터 복구를 위한 칼럼 추가
- 사용자의 실수 또는 응용프로그램 오류로 인해 데이터가 잘못 처리된 경우, 원래 값으로의 복구를 위해 이전 데이터를 임시적으로 중복 저장
- 반정규화 기법 - 테이블 반정규화
- 테이블 병합
- 관계 병합
- 1:1 또는 1:M 관계를 병합함 (두 테이블의 동시 조회가 많은 경우)
- 슈퍼/서브타입 병합
- 슈퍼/서브타입 관계를 병합함(one to on type → single type / plus type)
- 테이블 분할
- 수직 분할
- 디스크 I/O의 분산을 위해 테이블을 칼럼 단위로 분리함
- 수평 분할
- 디스크 I/O의 분산을 위해 테이블을 로우 단위로 분리함
- 테이블이 많은 양의 데이터를 가질 것으로 예상되는 경우 → Partitioning
- Range Partition: 범위로 분할 (고객번호: 1 ~ 1000)
- List Partition: 값으로 분할 (지역: 서울, 대구 등)
- Hash Partition: 해쉬 함수로 분할
- 테이블 추가
- 중복 테이블 추가
- 원격 조인(다른 업무 또는 다른 서버 간 조인)을 제거하기 위해 동일한 테이블 구조를 중복시킴(분산 DB 참고)
- 통계 테이블 추가
- SUM, AVG 등읠 통계깞을 미리 졔산하여 저장 (분산 DB 참고)
- 이력 테이블 추가
- 이력 테이블 중 일부 레코드를 마스크 테이블에서 중복 관리
- 부분 테이블 추가
- 하나의 테이블에서 집중적으로 이용되는 칼럼들만을 추출하여 별도의 테이블 생성 (테이블 수직분할과 유사하지만, 원본 테이블을 유지하면서 추가함)
- 관계 반정규화
- 중복관계 추가: 조인을 통해 정보 조회가 가능하지만, 조인 경로 단축을 위해 중복관계를 추가함
- 인덱스
- 검색 속도의 향상을 위해 기술 → 실제 테이블을 Full Scan하지 않고 인덱스 테이블을 검색
- 지나치게 많은 인덱스 생성시 시간 및 공간 낭비
- 인덱스된 필드의 업데이트시 시간 증가
- 자동 생성(PK 또는 Unique 조건) / 수동 생성(Create Index 구문)
- PK의 속성 순서대로 인덱스가 정렬됨
- FK 인덱스 설정을 통한 성능 향
- 분산 데이터베이스의 개념
- 물리적으로 분산된 데이터베이스를 하나의 논리적 시스템으로 사용
- 분산 데이터베이스의 장단점
- 분산 데이터베이스의 적용 기법
- 테이블 위치 분산: 테이블을 각각 다른 장소에 위치시킴
- 테이블 분할(Fragmentation) 분산: 각 테이블을 분할하여 분산함
- 테이블 복제(Replication) 분산
- 동일 테이블의 복사본을 여러 서버에서 동시에 관리함
- 부분 복제(Segment Replication)
- 지사에서 먼저 데이터 발생 → 본사에서 전체 통
- 광역 복제(Broadcast Replication)
- 본사에서 데이터의 입력, 수정, 삭제 발생 → 지사에서 이를 반
- 테이블 요약 (Summarization) 분산
- 유사한 내용의 데이터를 서로 다른 관점/수준에서 요약하여 분산 관리
- 분석 요약(Rollup Replication)
- 각 지사별 동일한 주제의 정보를 본사에서 통합하여 전체 요약 정보 산출
- 통합 요약(Consolidation Replication)
- 각 지사별 상이한 주제의 정보를 본사에서 단순 취합하여 제
- 분산 설계 고려사항
- 성능이 중요한 사이트에 적용해야 함
- 공통코드, 기준정보, 마스터 데이터(핵심 데이터, 여러곳에서 사용하는 데이터) 등에 대해 분산 구성시 성능 향상
- 실시간 동기화가요구되지 않을 때 바람직
- Near Real Time(거의 실시간) 업무의 경우도 분산 환경 구성 가능
- 특정 서버에 집중된 부하(네트워크 트레픽)를 분산시키기 위한 목적으로도 가능
- 백업 사이트(Disaster Recovery Site) 구성 시 분산 설계의 개념을 적용할 수 있다.
4.1 성능 데이터 모델링의 개요
4.1.1 성능 데이터 모델링의 정의
데이터의 성능 향상을 목적으로, 데이터 모델 설계 시점부터 정규화, 반정규화, 테이블 통합, 테이블 분할, 조인 구조, PK, FK 등 여러 가지 성능과 관련된 사항들이 데이터 모델링 작업에 반영될 수 있도록 하는 것
4.1.2 성능 데이터 모델링 수행 시점
분석/설계 단계에서부터 데이터베이스의 처리 성능을 향상시킬 수 있는 방법을 주도면밀하게 고려해야 함.
4.1.3 성능 데이터 모델링 고려사항
- 데이터 모델링 시 정규화 작업을 수행한다.
- 데이터베이스의 용량을 산정한다.
- 데이터베이스에서 발생되는 트랜잭션의 유형을 파악한다.
- 데이터베이스 용량 및 트랜잭션의 유형에 따라 반정규화를 수행한다.
- 이력 데이터 모델의 조정, PK/FK 조정, 슈퍼/서브 타입 변환 조정 등을 수행한다.
- 성능 관점에서 데이터 모델을 검증한다.
4.2 정규화와 성능
4.2.1 정규화를 통한 성능 향상 전략
- 데이터를 결정하는 결정자에 의해 함수적 종속을 가지고 있는 일반 속성을 의존자로 하여 이력/수정/삭제 이상현상을 제거하는 것
- 중복 속성을 제거하고, 결정자에 의해 동일한 의미의 일반 속성이 하나의 테이블로 집약되도록 한 테이블의 데이터 용량을 최소화한다.
4.2.2 정규화 용어
4.2.3 정규화 효과 및 장점
- 상호 종속성이 강한 데이터 요소들을 분리, 독립된 개념(엔터티, 테이블)으로 정의하게 됨에 따라 높은 응집도 & 낮은 결합도 원칙에 충실, 유연성 극대화
- 재활용 가능성이 높아진다.
- 식별자가 아닌 속성이 한 번만 표현됨에 따라 중복이 최소화
- 데이터 품질이 확보 저장공간 절약, DML 처리 시 성능 향상
4.2.4 정규화 이론
1차, 2차, 3차, 보이스-코드 정규화는 함수 종속성에 근거하여 정규화를 수행하고, 4차 정규화는 속성의 값이 여러 개 발생하는 다치 종속, 5차 정규화는 조인에 의해 발생하는 이상현상 제거로 정규화를 수행
4.2.5 제 1정규화
한 속성에 여러 개의 속성값을 갖거나 같은 유형의 속성이 여러 개인 경우 해당 속성을 분리시켜야 함.
4.2.6 제 2정규형
PK에 종속적이지 않거나 PK 중 일부 칼럼(들)에만 종속적인 칼럼은 분리되야 한다.
4.2.7 제 3정규화
일반 속섣을 간 종속 관계까 존재하는 것들은 분리되어야 한다.
4.2.8 정규화의 성능
- 정규화를 수행한 후, 전에 없었던 조인이 발생하게 되더라도 효율적인 인덱스 사용을 통해 조인 연산을 수행하면 성능상의 단점은 거의 없다.
- 정규화를 수행한 후, 적은 용량의 테이블이 생성된다면 조인 연산 시 적은 용량의 테이블을 먼저 읽어 조인을 수행하면 되므로 성능사 유리하다.
- 정규화가 제대로 되지 않으면 비슷한 종류의 속성이 여러 개가 되어 과도하게 많은 인덱스가 만들어질 수 있다. 정규화를 한다면 하나의 인덱스만 만들어도 된다.
4.3 반정규화와 성능
4.3.1 반정규화의 정의
시스템의 성능 향상 및 개발과 유지보수의 단순화를 위해 반정규화는 정규화된 데이터 모델을 분석하여 엔터티/속성/관계를 중복, 통합, 분리 등의 작업을 수행하는 모델링 기법
4.3.3 반정규화 기법
Leave a comment