본문 바로가기
SQL/SQLD 자격증

[SQLD] 과목 1 | 제 2장 데이터 모델과 성능

by snow_white 2022. 3. 5.

제 2장 데이터 모델과 성능

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

 

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

DB 성능향상을 위한 사항이 데이터 모델링에 반영되도록 하는 것

 

2. 성능 데이터 모델링 수행시점

분석/설계 단계, 성능 데이터 모델링 시점이 늦어질수록 재업무 비용이 증가함

 

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

정규화 수행, DB 용량 산정과 트랜잭션 유형 파악을 통한 반정규화 수행, 정규화는 무조건 해야 됨

① 데이터 모델링을 할 때 정규화를 정확하게 수행한다.
② 데이터베이스 용량산정을 수행한다.
③ 데이터베이스에 발생되는 트랜잭션의 유형을 파악한다.
④ 용량과 트랜잭션의 유형에 따라 반정규화를 수행한다.
⑤ 이력모델의 조정, PK/FK조정, 슈퍼타입/서브타입 조정 등을 수행한다.
⑥ 성능관점에서 데이터 모델을 검증한다.

 

제 2절 정규화와 성능

 

1.   정규화(Normalization)

데이터 분해 과정, 이상현상(anomaly) 제거

▶ 정규형(NF; Normal Form): 정규화로 도출된 데이터 모델이 갖춰야 할 특성

 

2.   함수적 종속성(FD; Functional Dependency)

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

▶ 다치 종속(MVD; Multivalued Dependency): 여러 칼럼이 동일한 결정자의 종속자일 때

 

3.   정규화 이론

1) 1차 2차 3차 보이스코드 정규화는 함수적 종속성에 근거 

2) 4차 정규화는 다치 종속을 제거 

3) 5차 정규화는 조인에 의한 이상현상을 제거하여 정규화를 수행함

▶ 1차 정규화: 속성의 원자성 확보, 다중값 속성을 분리함

▶ 2차 정규화: 부분 함수 종속성 제거, 일부 기본키에만 종속된 속성을 분리함, 기본키가 하나의 칼럼일 때 생략 가능

- 부분 함수 종속성

▶ 3차 정규화: 이행 함수 종속성 제거, 서로 종속관계가 있는 일반속성을 분리함, 주식별자와 관련성이 가장 낮음

- 이행 함수 종속성

▶ 보이스코드 정규화(BCNF; Boyce-Codd Normal Form): 후보키가 기본키 속성 중 일부에 함수적 종속일 때 다수의 주식별자를 분리함

▶ 4차 정규화, 5차 정규화: 다치 종속 분리, 결합 종속 분리

 

4.   정규화 성능

정규화는 입출력 데이터의 양을 줄여 성능을 향상시킴

▶ 정규화로 인한 성능 향상: 입력/수정/삭제 시 성능은 항상 향상됨

- 유연성 증가: High Cohesion & Loose Coupling 원칙에 충실해짐

- 재활용 가능성 증가: 개념이 세분화됨

- 데이터 중복 최소화

▶ 정규화로 인한 성능 저하: 조회 시 처리 조건에 따라 성능 저하가 발생할 수도 있음

- 데이터 조회 시 조인을 유발하여 CPU와 메모리를 많이 사용하게 됨

  • 반정규화로 해결 가능
  • 조인이 발생하더라도 인덱스를 사용하여 조인 연산을 수행하면 성능 상 단점이 거의 없고, 정규화를 통해 필요한 인덱스의 수를 줄일 수 있음
  • 정규화를 통해 소량의 테이블이 생성된다면 성능 상 유리할 수 있음

 

 

제 3절 반정규화와 성능

 

1.   반정규화(Denormalization)

데이터 중복을 허용하여 조인을 줄이는 DB 성능 향상 방법, 데이터의 무결성을 희생하고 조회 성능 향상

 

2.   절차

①   반정규화 대상 조사: 데이터 처리 범위 및 통계성 등 조사

②   다른 방법 검토: 1) 뷰 2) 클러스터링 3) 인덱스 4) 애플리케이션

③   반정규화 적용: 정규화 수행 후 반정규화 수행

 

3.   기법

▶ 테이블 반정규화

- 테이블 병합

  • 1:1 관계 테이블 병합
  • 1:N 관계 테이블 병합: 많은 데이터 중복 발생
  • 슈퍼타입/서브타입 테이블 병합

- 테이블 분할: 1) 수직분할 2) 수평분할

- 테이블 추가

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

 

▶ 칼럼 반정규화

- 중복 칼럼 추가

- 파생 칼럼 추가: 필요한 값 미리 계산한 칼럼 추가

- 이력 테이블 칼럼 추가

- PK에 의한 칼럼 추가: PK의 종속자를 일반속성으로 생성

- 응용 시스템의 오작동을 위한 칼럼 추가

반정규화 기법` 내용
중복칼럼 추가 조인에 의해 처리할 때 성능저하를 예방하기 위해 즉, 조인을 감소시키기 위해 중복된 칼럼을 위치시킴
파생칼럼 추가 트랜잭션이 처리되는 시점에 계산에 의해 발생되는 성능저하를 예방하기 위해 미리 값을 계산해서 칼럼에 보관함. Derived Column이라고 함
이력테이블 칼럼추가 대량의 이력테이터를 처리할 때 불특정 날 조회나 최근 값을 조회할 때 나타날 수 있는 성능저하를 예방하기 위해 이력테이블에 기능성 칼럼(최근값 여부, 시작과 종료일자 등)을 추가함
PK에 의한 칼럼 추가 복합 의미를 갖는 PK를 단일 속성으로 구성하였을 경우 발생됨. 단일 PK안에서 특정 값을 별도로 조회하는 경우 성능저하가 발생될 수 있음. 이 때 이미 PK안에 데이터가 존재하지만 성능향상을 위해 일반 속성으로 포함하는 방법이 PK에 의한 칼럼 추가 반정규화임
응용시스템 오작동을 위한 칼럼 추가 업무적으로는 의미가 없지만 사용자가 데이터 처리를 하다가 잘못 처리하여 원래 값으로 복구하기를 원하는 경우 이전 데이터를 임시적으로 중복하여 보관하는 기법. 칼럼으로 이것을 보관하는 방법은 오작동 처리를 위한 임시적인 기법이지만 이것을 이력데이터 모델로 풀어내면 정상적인 데이터 모델의 기법이 될 수 있음

▶ 관계 반정규화: 데이터 무결성 보장 가능

- 중복 관계 추가

반정규화 기법 내용
중복관계 추가 데이터를 처리하기 위한 여러 경로를 거쳐 조인이 가능하지만 이 때 발생할 수 있는 성능저하를 예방하기 위해 추가적인 관계를 맺는 방법이 관계의 반정규화임

 

제 4절 대량 데이터에 따른 성능

테이블 반정규화 중 테이블 분할 관련

1.   블록

테이블의 데이터 저장 단위

 

2.   대량 데이터 발생으로 인한 현상

블록 I/O 횟수 증가 → 디스크 I/O 가능성 상승 (디스크 I/O 시 성능 저하)

▶ 로우 체이닝(Row Chaining): 행 길이가 너무 길어 여러 블록에 걸쳐 저장되는 현상

▶ 로우 마이그레이션(Row Migration): 수정된 데이터가 해당 블록이 아닌 다른 블록의 빈 공간에 저장되는 현상

 

3.   테이블 분할: 반정규화 기법

▶ 수직분할: 칼럼 단위로 테이블을 분할하여 I/O를 감소시킴, 너무 많은 수의 칼럼이 있는 경우 사용

▶ 수평분할: 행 단위로 테이블을 분할하여 I/O를 감소시킴

 

4.   파티셔닝(Partitioning)

테이블 수평분할 기법, 논리적으로는 하나의 테이블이지만 물리적으로 여러 데이터 파일에 분산 저장, 데이터 조회 범위를 줄여 성능 향상

▶ Range Partition: 데이터 값의 범위를 기준으로 분할

▶ List Partition: 특정한 값을 기준으로 분할

▶ Hash Partition: 해시 함수를 적용하여 분할, DBMS가 알아서 분할 관리, 데이터 위치를 알 수 없음

▶ Composite Partition: 여러 파티션 기법을 복합적으로 사용하여 분할

※ 파티션 인덱스(Partition Index)

" Global Index, Local Index: 여러 파티션에서 단일 인덱스 사용, 파티션 별로 각자 인덱스 사용

 

5. 테이블에 대한 수평분할/수직분할의 절차

테이블에 대한 수평분할/수직분할에 대한 결정은 다음의 4가지 원칙을 적용하면 된다.

1) 데이터 모델링을 완성한다.
2) 데이터베이스 용량산정을 한다.
3) 대량 데이터가 처리되는 테이블에 대해서 트랜잭션 처리 패턴을 분석한다.
4) 칼럼 단위로 집중화된 처리가 발생하는지, 로우단위로 집중화된 처리가 발생되는지 분석하여 집중화된 단위로 테이블을 분리하는 것을 검토한다.

 

제 5절 데이터베이스 구조와 성능

1.   슈퍼타입/서브타입 데이터 모델 변환을 통한 성능 향상

▶ 슈퍼타입/서브타입 데이터 모델

속성을 할당하여 배치하는 수평 분할된 형태의 모델 (공통 속성은 슈퍼타입으로 모델링하고 차이가 있는 속성은 서브타입으로 구분됨), 변환을 통해 1) 정확하게 업무를 표현할 수 있고 2) 물리적 모델링 시 선택의 폭을 넓힐 수 있음

▶ 변환 기준: 데이터 양, 트랜잭션 유형

▶ 변환 기술

- 1:1 타입(OneToOne type): 개별로 처리하는 트랜잭션에 대해 개별 테이블 구성, 슈퍼타입과 서브타입 각각 필요한 속성과 유형에 적합한 데이터만 가지도록 분리하여 1:1 관계를 갖도록 함

- 슈퍼/서브 타입(Plus type): 슈퍼타입과 서브타입을 공통으로 처리하는 트랜잭션에 대해 슈퍼타입과 서브타입 각각의 테이블 구성

- All in One 타입(Single type): 일괄 처리하는 트랜잭션에 대해 단일 테이블 구성

  1:1 타입 슈퍼/서브 타입 All in One 타입
특징 개별 테이블 유지 슈퍼/서브 타입 테이블 구성 단일 테이블 구성
트랜잭션 유형 개별 처리 슈퍼/서브 타입 공통 처리 일괄 처리
확장성 좋음
(테이블 추가 용이)
보통 나쁨
조인 성능 나쁨
(조인 많이 필요)
나쁨
(조인 많이 필요)
좋음
I/O 성능 좋음 좋음 나쁨
(항상 전체 데이터 조회)
관리용이성 나쁨 나쁨 좋음

2.   PK/FK 칼럼 순서 조절을 통한 성능 향상

등호 조건이나 BETWEEN 조건이 걸리는 칼럼을 앞으로 이동 (여러 조건이 있을 경우 등호 조건이 걸리는 칼럼을 선두로 이동)

3.   인덱스 특성을 고려한 PK/FK DB 성능 향상

물리적인 테이블에 FK 제약을 걸어 인덱스를 생성

 

제 6절 분산 데이터베이스와 성능

 

1.   분산 DB

분산된 DB를 하나의 가상 시스템으로 사용할 수 있도록 한 DB, 물리적 사이트는 분산되어 있으나 논리적으로 동일한 시스템, 과거에는 위치 중심이었으나 현재는 업무 필요에 따라 분산 설계

▶ 설계 방식

  • 상향식: 지역 스키마 작성 후 전역 스키마 작성
  • 하향식: 전역 스키마 작성 후 지역사상 스키마 작성

▶ 장단점

1) 신뢰성과 가용성 증가 2) 빠른 응답 속도와 통신비용 절감 3) 용량 확장 용이

1) 관리 및 통제 어려움 2) 데이터 무결성 관리 어려움 3) S/W 개발 비용 및 처리 비용 증가 4) 불규칙한 응답 속도

장점 단점
- 지역 자치성, 점증적 시스템 용량 확장
- 신뢰성과 가용성
- 효용성과 융통성
- 빠른 응답 속도와 통신비용 절감
- 데이터의 가용성과 신뢰성 증가
- 시스템 규모의 적절한 조절
- 각 지역 사용자의 요구 수용 증대
- 소프트웨어 개발 비용
- 오류의 잠재성 증대
- 처리 비용의 증대
- 설계, 관리의 복잡성과 비용
- 불규칙한 응답 속도
- 통제의 어려움
- 데이터 무결성에 대한 위협

 

2.   분산 DB의 투명성 

분위지중장병행

▶ 분할 투명성: 하나의 논리적 관계가 분할되어 각 단편의 사본이 여러 사이트에 저장됨

▶ 위치 투명성: 사용하려는 데이터 저장 장소가 명시되지 않아도 됨

▶ 지역사상 투명성: 지역 DBMS와 물리적 DB 사이의 사상이 보장됨

▶ 중복 투명성: DB 객체 중복 여부를 몰라도 됨

▶ 장애 투명성: 구성요소(DBMS, 컴퓨터)의 장애에 무관하게 트랜잭션의 원자성이 유지됨

▶ 병행 투명성: 다수의 트랜잭션을 동시 수행했을 때 결과의 일관성이 유지됨 병렬 아님

 

3.   분산 DB 적용 기법

▶ 테이블 위치 분산: 설계된 테이블의 위치를 분산함

▶ 테이블 분할 분산(Table Fragmentation): 테이블을 쪼개서 분산함

 1) 수평분할 : 로우(Row)단위로 분리

 2) 수직분할 : 칼럼(Column) 단위로 분할

▶ 테이블 복제 분산(Table Replication): 동일한 테이블을 다른 지역이나 서버에서 동시 생성함, 원격지 조인을 내부 조인으로 변경하여 성능 향상, 가장 많이 사용함

 1) 부분복제 : 마스터 DB에서 테이블의 일부의 내용만 다른 지역이나 서버에 위치시킴

 2) 광역복제 : 마스터 DB에서 테이블의 내용을 각 지역이나 서버에 존재시킴

▶ 테이블 요약 분산(Table Summarization)

 분석요약: 사이트 별 요약정보를 본사에서 통합하여 전체 요약정보 산출

 통합요약: 사이트 별 정보를 본사에서 통합하여 전체 요약정보 산출

 

데이터베이스 분산 설계는 다음과 같은 경우에 적용하면 효과적이다.

  • 성능이 중요한 사이트에 적용해야 한다.
  • 공통코드, 기준정보, 마스터 데이터 등에 대해 분산환경을 구성하면 성능이 좋아진다.
  • 실시간 동기화가 요구되지 않을 때 좋다. 거의 실시간(Near Real Time)의 업무적인 특징을 가지고 있을 때도 분산 환경을 구성할 수 있다
  • 특정 서버에 부하가 집중이 될 때 부하를 분산할 때도 좋다.
  • 백업 사이트(Disaster Recovery Site)를 구성할 때 간단하게 분산기능을 적용하여 구성할 수 있다.

댓글