반응형
*본 게시물은 2013년도 SQL 전문가 가이드 교재(일명 '노랭이')를 참고하여 공부하고 정리한 게시물입니다
1과목 데이터 모델링의 이해: 제2장 데이터 모델과 성능
1. 성능 데이터 모델링의 개요
1) 성능 데이터 모델링
DB 성능향상을 위한 사항이 데이터 모델링에 반영되도록 하는 것
=> 설계단계의 데이터 모델링부터 정규화/반정규화/테이블통합/테이블분할/조인구조/Primary Key/Foreign Key 등
2) 수행 시점
분석/설계 단계부터 성능에 대한 데이터모델 설계를 하지 않으면,
구현-테스트-운영 단계까지 시간이 지날수록 재업무(성능개선) 비용이 증가함
-> 성능이 저하되는 SQL문 작성, 부족한 하드웨어 용량(CPU, Memory 등) 증설
3) 진행 프로세스
- 데이터 모델링 시 정확한 정규화 수행
- 데이터베이스 용량 산정 수행, 데이터베이스에서 발생하는 트랜잭션 유형 파악
- 용량과 트랜잭션의 유형에 따라 반정규화 수행
- 이력모델의 조정, Primary Key, Foreign Key 조정, 슈퍼타입/서브타입 조정 등을 수행
- 성능관점에서 데이터 모델 검증
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 안의 종속자를 일반속성으로 추가 |
|
응용시스템 오작동을 위한 칼럼 추가 | 사용자가 데이터를 잘못 처리하여 원래 값으로 복구할 수 있도록, 이전 데이터를 임시적으로 중복하여 보관하는 기법 => 이력데이터 모델로 풀어내면, 임시기법이 아닌 정상적인 데이터 모델의 기법이 될 수 있음 |
|
관계의 반정규화 | 중복관계 추가 | 관계가 먼 테이블끼리 조인 시 일어나는 성능 저하를 예방하기 위해 관계 추가 => 데이터 무결성 깨뜨릴 위험 없이 성능 향상 |
반응형
'컴퓨터공학 공부 > SQLD (SQL 전문가 가이드)' 카테고리의 다른 글
SQLD 자격증 공부 데이터 모델과 성능-분산 데이터베이스와 성능 (SQL 전문가 가이드) (0) | 2024.04.22 |
---|---|
SQLD 자격증 공부 데이터 모델과 성능-대량 데이터에 따른 성능, 데이터베이스 구조와 성능(SQL 전문가 가이드) (0) | 2024.04.11 |
SQLD 자격증 공부 데이터 모델링의 이해-관계, 식별자(SQL 전문가가이드) (0) | 2024.04.02 |
SQLD 자격증 공부 데이터 모델링의 이해-엔터티, 속성(SQL 전문가가이드) (0) | 2024.03.26 |
SQLD 자격증 공부 데이터 모델링의 이해-데이터 모델의 이해(SQL 전문가가이드) (0) | 2024.03.18 |