본문 바로가기

안녕하세요!

자격증 준비/SQLD

[ SQLD ] 성능 데이터 모델링

 


 

성능 데이터 모델링


 

성능 데이터 모델링

DB 성능 향상을 목적으로 하며, 설계 단계의 데이터 모델링 시기 부터

정규화, 반정규화, 테이블 통합 및 분할, JOIN, 기본키, 외래키 등이

데이터 모델링에 반영되도록 하는 것을 말한다.

 

함수적 종속성


 

함수적 종속성(Functional Dependency)

데이터들이 어떤 기준값에 의해 종속되는 현상이다.

기준값은 결정자(Determicant), 종속되는 값을 종속자(Dependent)라고 한다.

 

반정규화


 

반정규화

엔터티, 속성, 관계에 대해 시스템의 성능  향상 및 개발과 운영의 단순화를 위해

중복과 통합, 분리 등을 수행하는 데이터 모델링 기법이다.

 

데이터 무결성이 깨질 수도 있지만,

데이터를 조회할 때 디스크 I/O의 양이 많거나,

경로가 복잡하여 조인으로 인한 성능 저하를 야기할 수 있을 때뿐만 아니라

칼럼을 계산해 읽어 들일 때 성능에 영향을 미칠 것으로 예상될 때 반정규화를 수행해야 한다.

반응형

테이블 반정규화


 

구분 기법 내용
테이블 병합 1:1 관계 테이블 병합 - 1:1 관계를 통합해 성능을 향상시킨다.
1:M 관계 테이블 병합 - 1:M 관계를 통합해 성능을 향상시킨다.
슈퍼/서브타입 테이블 병합 - 슈퍼/서브 관계를 통합해 성능을 향상시킨다.
테이블 분할 수직 분할 - 칼럼 단위의 테이블을 디스크 I/O 분산 처리를 위해 테이블을 1:1로 분리하여 성능을 향상시킨다.
수평 분할 - 로우 단위로 집중하여 발생되는 트랜잭션을 분석해 디스크 I/O와 데이터 접근 효율을 높여 성능을 향상시키기 위해 로우 단위로 테이블을 분리시킨다.
테이블 추가 중복 테이블 추가 - 다른 업무이거나 서버가 다른 경우 동일한 테이블 구조를 중복해 원격 조인을 제거하여 성능을 향상시킨다.
통계 테이블 추가 - SUM, AVG 등을 미리 수행해 계산하여 조회 성능을 향상시킨다.
이력 테이블 추가 - 이력 테이블 중, 마스터 테이블에 존재하는 레코드를 중복시키는 반정규화로써 이력 테이블에 존재하도록 한다.
부분 테이블 추가 - 하나의 테이블에 있는 전체 칼럼 중에서 자주 이용하여 집중화된 칼럼들이 있을 때, 디스크 I/O를 감소시키기 위해 해당 칼럼들을 모아놓은 별도의 반정규화된 테이블을 생성한다.

 

기법 내용
중복 칼럼 추가 - 조인에 의해 처리할 때 성능 저하를 예방하기 위해, 즉 조인을 감소시키기 위해 중복 칼럼을 위치시킨다.
파생 칼럼 추가 - 트랜잭션이 처리되는 시점에 계산에 의해 발생되는 값을 미리 계산해 칼럼에 보관함으로써 성능 저하를 예방한다.
이력 테이블 칼럼 추가 - 대량의 이력 데이터를 처리할 때 불특정하거나 최근값을 조회할 때 이력 테이블에 시작과 종료일자와 같은 칼럼을 추가한다.
PK에 의한 칼럼 추가 - 복합저긴 의미를 가지고 있는 외래키를 단일 속성으로 구성했을 때, 특정 값을 별도로 조회하는 경우 성능 저하를 야기하므로, 이미 외래키와 관련된 데이터가 존재함에도 불구하고 일반 속성으로 칼럼을 생성함으로써 성능 향상을 도모한다.
응용시스템의 오작동을 위한 칼럼 추가 - 사용자가 데이터 처리를 하다가 잘못 처리하여 권래의 값으로 복구를 원하는 경우, 이전 데이터를 임시적으로 중복하여 보관한다.

 

대용량 테이블 발생 가능 이슈


 

구분 내용
로우 체이닝 - 로우 길이가 너무 길어 데이터 블록 하나에 데이터가 모두 저장되지 않고, 두 개 이상의 블록에 걸쳐 하나의 로우가 저장되어 있는 형태
로우 마이그레이션 - 데이터 블록에서 수정이 발생하면 수정된 데이터를 해당 데이터 블록에서 저장하지 못하고 다른 블록의 빈 공간을 찾아 저장하는 형

 

위 두가지 현상이 발현되면, 많은 블록에 데이터가 저장되면서

데이터 조회 시에 Block I/O 횟수가 늘어나게 된다.

이는 Disk I/O 가능성을 높이게 되며, 성능 저하를 야기한다.

 

해시 분할


 

해시 분할(HASH Partition)을 하게 되면

해시 조건에 다라 해싱 알고리즘이 적용되어 테이블이 분리된다.

이때 설계자는 테이블에 데이터가 정확하게 어덯게 들어갔는지까지는 알 수 없다.

 

슈퍼 타입/서브타입 모델


 

업무를 구성하는 데이터 특징을 분석해 공통점과 차이점을 고려해 효과적으로 표현할 수 있다.

슈퍼타입 엔터티공통 부분을 모델링 하며,

슈퍼타입 엔터티로부터 상속 받은 서브 타입 엔터티는 다른 엔터티와 차이가 있는 속성으로 구분한다.

 

구분 내용
슈퍼타입
(Single 타입, All in One 타입,)
- 슈퍼/서브타입을 하나의 테이블로 변환한 것이다.
서브타입
(Plus 타입, Super+Sub 타입)
- 슈퍼/서브타입을 서브타입 테이블들로 변환한 것이다.
- 도출된 각각의 서브타입에는 변환 전의 슈퍼 엔터티에 있던 칼럼들을 공통적으로 가지고 있다.
개별타입
(OneToOne 타입, 1:1 타입)
- 슈퍼/서브타입을 슈퍼 및 서브 타입 각각의 개별 테이블로 변환한 것이다.
- 슈퍼 테이블, 서브 테이블 모두를 생성한 것이다.

728x90

 

728x90
반응형

loading