[1과목] Part2. 성능 데이터 모델링
6분 읽기
- 성능이 저하되는 데이터 모델
- 데이터모델의 구조에 의해
- 데이터가 대용량이 됨으로 인해 불가피하게
- 인덱스 특정을 충분히 고려하지 않고 인덱스를 생성함으로 인해
1) 성능 데이터 모델링의 개요
1. 성능 데이터 모델링의 정의
💡 데이터베이스 성능향상을 목적으로 설계단계의 데이터 모델링 때부터 정규화, 반정규화, 테이블통합, 테이블분할, 조인구조, PK, FK 등 여러가지 성능과 관련된 사항이 데이터 모델링에 반영될 수 있도록 하는 것이다.
2. 성능 데이터 모델링 수행 시점
💡 분석/설계 단계에서 데이터 모델 성능을 고려한 데이터 모델링을 수행할 경우 성능저하에 따른 재업무(Rework) 비용을 최소화 할 수 있다.
3. 성능 데이터 모델링 고려사항 (순서 중요) ⭐️⭐️⭐️
- 데이터 모델링을 할 때
정규화를 정확하게 수행한다. - 데이터베이스
용량 산정을 수행한다. - 데이터베이스에 발생되는
트랜잭션 유형 파악 - 용량, 트랜잭션 유형에 따라
반정규화를 수행한다. - 이력 모델 조정, PK/FK 조정, 슈퍼타입/서브타입 조정 등을 수행한다.
- 성능 관점에서 데이터 모델을
검증한다.
2) 정규화와 성능
1. 정규화를 통한 성능 향상 전략
💡 정규화 : 입력/수정/삭제 성능 ⬆️ (조회 성능은 처리 조건에 따라 향상될 수도, 저하될 수도 있다.)
반정규화 : 조회 성능 ⬆️
-
정규화 수행의 의미
- 데이터를 결정하는 결정자에 의해
함수적 종속을 가지고 있는 일반 속성을 의존자로하여 입력/수정/삭제 이상을 제거하는 것 - 데이터의 중복속성을 제거, 결정자에 의해 동일한 의미의 일반속성이 하나의 테이블로 집약 ➡️ 한 테이블의 데이터 용량이 최소화 ➡️ 데이터 처리 시 속도가 빨라질 수도 느려질 수도있음
- 데이터를 결정하는 결정자에 의해
-
정규화 ⭐️⭐️⭐️
-
1차 정규화 :
다중 속성값 제거💡 모든 속성이 반드시 하나의 데이터 값을 가져야 한다. (원자값) 로우 단위의 중복 뿐만 아니라 칼럼 단위로 중복이 되는 것도 1차 정규화 대상이다.
-
다중값 (속성 값/데이터)
예) 하나의 데이터에 ,(쉼표)를 기준으로 여러 개가 들어가는 경우
-
중복 데이터를 속성으로 분리 (컬럼/1:M 관계 형성)
예) 주문에 대한 상세 상품 내역들을 상품1, 상품2, 상품3으로 컬럼화하여 관리하는 경우
-
-
2차 정규화 :
부분적 함수 종속 제거💡 기본 키 이외의 속성이 기본키에 완전 함수 종속되어야 한다. 기본키가 2개 이상의 칼럼으로 이루어진 경우, 테이블 분리를 통해 함수 종속성(FD)를 제거 X → Y (X: 결정자, Y: 종속 속성)
함수 종속성(FD)
-
완전 함수 종속
-
부분 함수 종속
기본 키가 2개 이상의 칼럼으로 이루어진 경우 발생 (새로운 테이블 도출)
-
-
3차 정규화 :
이행 종속(이전 종속) 분리💡 기본 키를 제외하고 엔터티 일반 속성 간에는 서로 종속적이지 않는다.
- 이행 종속
📎 이후 정규화는 문제 출제 빈도는 낮지만, 알아두자.
-
BCNF
기본 키를 제외하고 복수의 후보키가 있는 경우, 후보키가 기본키를 종속 시키면 분해
-
4차 정규화
여러 칼럼들이 하나의 칼럼을 종속시키는 경우 분해하여 다중 값 종속성을 제거
-
5차 정규화
조인에 의해서 종속성이 발생되는 경우 분해
-
-
정규형
정규화(과정)을 통해 해당 단계의 조건을 만족한 상태 ⇒
결과-
제 1 정규형
다중 속성값 제거⇒ 원자 값(단일 값)으로 분리-
모든 속성의 값이 **원자 값(atomic value)**으로만 구성되어 있음
즉, 모든 속성에 다중 속성값이 존재하지 않음
-
-
제 2 정규형
부분적 함수 종속 제거- 제 1 정규형에 속하고, 주식별자가 아닌 모든 속성이 주식별자 속성에 완전 함수 종속됨.
-
제 3 정규형
이행 종속(이전 종속) 분리-
제 2 정규형에 속하고, 일반 속성 간에 함수적 종속이 존재하지 않음.
즉, 이행적 함수 종속이 존재하지 않음
-
-
2. 반정규화된 테이블의 성능 저하 사례 1~4
💡 정규화를 수행하면 무조건 조회성능이 저하된다 ❌
-
2차 정규화+PK Unique Index2차 정규화를 적용한 테이블에 대해서 조인을 하더라도
PK Unique Index를 이용하면 조인 성능저하는 미미하게 발생한다. -
결정자와 의존자가 존재, 함수적 종속관계가 형성되는 관계
-
(사례)
-
동일한 속성 형식을 두 개 이상의 속성으로 나열하여 반정규화한 경우
💡 참고로, 한 테이블에 인덱스가 많아지면 조회 성능은 향상되지만 데이터 입력/수정/삭제 성능은 저하된다. 그래서 일반 업무처리(온라인성 업무)에서는 인덱스 수가 가급적 7~8개가 넘지 않도록 하는 것이 좋다.
3. 함수적 종속성(Functional Dependency)에 근거한 정규화 수행 필요
- 함수적 종속성
데이터들이 어떤 기준값에 의해 종속되는 현상을 지칭하는 것
이때 기준값을 결정자(Determinant)라 하고 종속되는 값을 종속자(Dependent)라고 한다.
3) 반정규화와 성능
1. 반정규화를 통한 성능향상 전략
-
반정규화(De-Normalization)의 정의
💡 정규화된 엔터티, 속성, 관계에 대해 시스템의 성능향상과 개발과 운영의 단순화를 위해 중복, 통합, 분리 등을 수행하는 데이터 모델링의 기법 비정규화는 아예 정규화를 수행하지 않은 모델을 지칭할 때 사용한다.
- 데이터 무결성이 깨질 수 있는 위협을 무릅쓰고 데이터를 중복하여 반정규화를 적용하는 이유는?
- 데이터를 조회할 때 디스크 I/O량이 많아서 성능이 저하되거나
- 경로가 너무 멀어 조인으로 인한 성능 저하가 예상되거나
- 칼럼을 계산하여 읽을 때 성능이 저하될 것을 예상되는 경우 수행하게 된다.
- 데이터 무결성이 깨질 수 있는 위협을 무릅쓰고 데이터를 중복하여 반정규화를 적용하는 이유는?
-
반정규화의 적용방법
2. 반정규화의 기법 ⭐️⭐️⭐️
- 테이블 반정규화
| 기법분류 | 기법 | 내용 |
|---|---|---|
| 테이블 병합 | 1:1 관계 테이블 병합 | 1:1 관계를 통합하여 성능향상 |
| 1:M 관계 테이블 병합 | 1:M 관계를 통합하여 성능향상 | |
| 슈퍼/서브타입 테이블 병합 | 슈퍼/서브 관계를 통합하여 성능향상 | |
| 테이블 분할 | 수직분할 | 칼럼단위의 테이블을 디스크 I/O를 분산처리 하기 위해 테이블을 1:1로 분리하여 성능향상(트랜잭션의 처리되는 유형 파악이 선행되어야 함) |
| 수평분할 | 로우 단위로 집중 발생되는 트랜잭션을 분석하여 디스크 I/O 및 데이터 접근의 효율성을 높여 성능을 향상하기 위해 로우단위로 테이블을 쪼갬(관계가 없음) | |
| 테이블 추가 | 중복테이블 추가 | 다른 업무이거나 서버가 다른 경우 동일한 테이블 구조를 중복하여 원격 조인을 제거하여 성능을 향상 |
| 통계테이블 추가 | SUM, AVG 등을 미리 수행하여 계산해 둠으로써 조회 시 성능을 향상 | |
| 이력테이블 추가 | 이력테이블 중 마스터 테이블에 존재하는 레코드를 중복하여 이력테이블에 존재하는 방법은 반정규화의 유형 | |
| 부분테이블 추가 | 하나의 테이블의 전체 칼럼 중 자주 이용하는 집중화 된 칼럼들이 있을 때 디스크 I/O를 줄이기 위해 해당 칼럼들을 모아놓은 별도의 반정규화 된 테이블을 생성 |
- 칼럼 반정규화
| 반정규화 기법 | 내용 |
|---|---|
| 중복칼럼 추가 | 조인에 의해 처리할 때 성능저하를 예방, 조인을 감소시키기 위해 중복된 칼럼을 위치 시킴 |
| 파생칼럼 추가 | 트랜잭션이 처리되는 시점에 계산에 의해 발생하는 성능저하를 예방하기 위해 미리 값을 계산하여 칼럼에 보관함. (Derived Column) |
| 이력테이블 칼럼추가 | 대량의 이력데이터를 처리할 때 불특정 날 조회나 최근 값을 조회할 때 나타날 수 있는 성능저하를 예방하기 위해 이력테이블에 기능성 칼럼(최근값 여부, 시작과 종료일자 등)을 추가함 |
| PK에 의한 칼럼 추가 | 복합의미를 갖는 PK를 단일 속성으로 구성하였을 경우 발생됨. 단일 PK안에서 특정 값을 별도로 조회하는 경우 성능저하가 발생될 수 있음. 이때 이미 PK안에 데이터가 존재하지만 성능향상을 위해 일반속성으로 포함하는 방법 |
| 응용시스템 오작동을 위한 칼럼 추가 | 업무적으로는 의미가 없지만 사용자가 데이터처리를 하다가 잘못 처리하여 원래 값으로 복구 하기를 원하는 경우 이전 데이터를 임시적으로 중복하여 보관하는 기법. |
-
관계 반정규화
💡 테이블과 칼럼의 반정규화는 데이터 무결성에 영향을 미치게 되나 관계의 반정규화는 데이터 무결성을 깨트릴 위험을 갖지 않고서도 데이터처리의 성능을 향상시킬 수 있다.
| 반정규화 기법 | 내용 |
|---|---|
| 중복관계 추가 | 데이터를 처리하기 위한 여러 경로를 거쳐 조인이 가능하지만 이 때 발생할 수 있는 성능저하를 예방하기 위해 추가적인 관계를 맺는 방법 |
3. 정규화가 잘 정의된 데이터 모델에서 성능이 저하될 수 있는 경우
4. 정규화가 잘 정의된 데이터 모델에서 성능이 저하된 경우
💡 업무의 영역이 커지고 다른 업무와 인터페이스가 많아짐에 따라 데이터베이스 서버가 여러대인 경우 (분산 데이터 베이스 구성)
-
대량 데이터에 따른 성능
- 대량 데이터 발생에 따른 테이블 분할 개요
- 한 테이블에 많은 수의 칼럼을 가지고 있는 경우
- 대량 데이터 저장 및 처리로 인해 성능
- 테이블에 대한 수평분할/수직분할의 절차
-
데이터베이스 구조와 성능
-
슈퍼타입/서브타입 모델의 성능고려 방법
-
Extended ER모델
-
공통의 부분을 슈퍼타입으로 모델링하고 공통으로부터 상속받아 다른 엔터티와 차이가 있는 속성에 대해서는 별도의 서브엔터티로 구분
⇒ 업무의 모습을 정확하게 표현하면서 물리적인 데이터 모델로 변환을 할 때 선택의 폭을 넓힐 수 있다.
-
-
슈퍼/서브타입 데이터 모델의 변환타입 비교
-
| 종류 | 설명 |
|---|---|
| OneToOne Type | - 슈퍼타입과 서브타입을 개별 테이블로 도출한다. - 테이블의 수가 많아서 조인이 많이 발생하고 관리가 어렵다. |
| Plus Type | - 슈퍼타입과 서브타입 테이블로 도출한다. - 조인이 발생하고 관리가 어렵다. |
| Single Type | - 슈퍼타입과 서브타입을 하나의 테이블로 도출한다. - 조인 성능이 좋고 관리가 편리하지만, 입출력 성능이 나쁘다. |
4) 대량 데이터에 따른 성능
5) 데이터베이스 구조와 성능
1. 슈퍼타입/서브타입 모델의 성능고려 방법
6) 분산 데이터베이스와 성능
1. 분산 데이터베이스의 개요
-
분산 데이터베이스 정의
💡 데이터베이스를 연결하는 빠른 네트워크 환경을 이용하여 데이터베이스를 여러 지역 여러 노드로 위치시켜 사용성/성능 등을 극대화 시킨 데이터베이스
- 여러 곳으로 분산 되어있는 데이터베이스를 하나의 가상 시스템으로 사용할 수 있도록 한 데이터베이스
- 논리적으로 동일한 시스템에 속하지만, 컴퓨터 네트워크를 통해 물리적으로 분산되어있는 데이터들의 모임
- 물리적 Site 분산, 논리적으로 사용자 통합, 공유
2. 분산 데이터베이스의 투명성(Transparency)
- 분할 투명성
- 위치 투명성
- 지역사상 투명성
- 중복 투명성
- 장애 투명성
- 병행 투명성
3. 분산 데이터베이스의 적용 방법 및 장단점
- 분산 데이터베이스 장단점
SQLD4편 중 2번째
- 1. [1과목] Part1. 데이터 모델링의 이해
- 2. [1과목] Part2. 성능 데이터 모델링
- 3. [2과목] Part1. SQL 기본
- 4. [2과목] Part2. SQL 활용
관련 글
10분 읽기
[1과목] Part1. 데이터 모델링의 이해
SQLD 1과목 데이터 모델링의 이해 — 데이터 모델링, 엔터티, 속성, 관계, 식별자를 정리합니다.
12분 읽기
[2과목] Part2. SQL 활용
SQLD 2과목 SQL 활용 — 표준 조인, 집합 연산자, 계층형 질의, 서브 쿼리, 그룹 함수, 윈도우 함수, DCL, 절차형 SQL을 정리합니다.
18분 읽기
[2과목] Part1. SQL 기본
SQLD 2과목 SQL 기본 — 관계형 데이터베이스, DDL·DML·TCL, WHERE절, 함수, GROUP BY/HAVING, ORDER BY, 조인, 윈도우 함수를 정리합니다.