[SQLD] 데이터 모델과 성능💡

김예진·2024년 2월 25일
1

SQLD

목록 보기
2/3
post-thumbnail

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

1-1) 성능 데이터 모델링의 정의

데이터베이스의 성능 향상을 목적 으로 데이터 모델 설계 시점부터 정규화, 반정규화, 테이블 통합, 테이블 분할, 조인 구조, PK, FK 등 여러가지 성능과 관련괸 사항들이 데이터 모델링 작업에 반영될 수 있도록 하는 것 을 의미한다.


1-2) 성능 데이터 모델링 수행 시점

  • IT 시스템 구축 시 분석 / 설계 단계
    -> 성능 저하에 따른 비용을 최소화

1-3) 성능 데이터 모델링 고려사항

  1. 데이터 모델링 시 정규화 작업을 수행한다.
    -> 정규화된 모델은 주요 관심사별로 데이터를 분산시키는 효과 (성능 향상)
  2. 데이터베이스의 용량을 산정한다.
  3. 데이터베이스에 발생되는 트랜잭션의 유형을 파악한다.
  4. 데이터베이스 용량 및 트랜잭션의 유형에 따라 반정규화를 수행한다.
  5. 이력 데이터 모델의 조정, PK / FK 조정, 슈퍼 / 서브 타입 변환 조정 등을 수행한다.
  6. 성능 관점에서 데이터 모델을 검증한다.



2. 정규화와 성능

2-1) 정규화를 통한 성능 향상 전략

정규화를 수행한다는 것 은 데이터를 결정하는 결정자에 의해 함수적 종속을 가지고 있는 일반 속성을 의존자로 하여 입력/수정/삭제 이상현상을 제거 하는 것

정규화 작업

  • 데이터의 중복 속성을 제거
  • 테이블의 데이터 용량이 최소화

정규화된 테이블에 대한 데이터 조회 시에는 성능의 향상 혹은 저하가 일어나고 입력, 수정, 삭제 시에는 성능이 향상됨


2-2) 정규화 용어

정규화 (Normalization)

함수적 종속성 등과 같은 이론에 근거하여 관계형 데이터베이스 테이블의 삽입/삭제/갱신 이상 현상 발생을 최소화하기 위해 좀 더 작은 단위의 테이블로 설계하는 과정

-> 정규화는 데이터 모델을 정규형에 맞도록 고치는 과정

정규형 (NF : Normal Form)

정규화 결과에 의해 도출된 데이터 모델이 갖춰야 할 특성을 만족한 형태

-> 정규화한 결과

함수적 종속성 (FD : Functional Dependency)

테이블의 특정 칼럼 A의 값을 알면 다른 칼럼 B의 값을 알 수 있을 때, 칼럼 B는 칼럼 A에 함수적 종속성이 있다고 한다.

ex) 주민번호를 알면 고객명을 알 수 있을 때
"고객명은 주민등록번호에 함수적 종속성이 있다."

결정자 (Determinant)

위의 함수적 종속성 설명에서 칼럼 A를 결정자라고 한다.

-> 주민번호는 고객명을 결정하므로 고객명의 결정자이다.

다치종속 (MVD : MultiValued Dependency)

결정자 칼럼 A에 의해 칼럼 B의 값을 다수 개 알 수 있을 때, 칼럼 B는 칼럼 A에 다치종속되었다고 한다.

ex) 학번을 통해 해당 학생이 수강신청한 다수 개의 수강과목을 알 수 있을 때
"수강과목은 학번에 다치종속된다."


2-3) 정규화 효과 및 장점

  • 상호 종속성이 강한 데이터 요소들을 분리, 독립된 개념으로 정의하게 됨에 따라 높은 응집도 & 낮은 결합도원칙에 충실해 유연성이 극대화됨
  • 개념이 좀 더 세분화됨에 따라 개념에 대한 재활용 가능성이 높아짐
  • 식별자가 아닌 속성이 한 번만 표현됨에 따라 중복이 최소화됨
    -> 데이터 품질이 확보되고 저장공간이 절약되며 DML처리 시 성능 향상

2-4) 정규화 이론(유형)

정규화 유형설명
1차 정규화- 한 속성에 여러 개의 속성값을 갖거나 같은 유형의 속성이 여러 개인 경우 해당 속성을 분리시킨다.
- 1차 정규화 작업으로 속성의 원자성을 확보하게 된다.
2차 정규화- 주식별자에 완전 함수 종속되지 않은 속성을 분리한다.
- 2차 정규화 작업으로 부분 종속 속성이 된 속성을 분리한다.
3차 정규화- 일반 속성끼리 함수 종속이 발생한 속성을 분리한다.
- 3차 정규화 작업으로 이행적 종속 속성을 분리한다.
보이스-코드
정규화
- 결정자 안에 함수 종속을 가진 주식별자 속성을 분리한다.
4차 정규화- 다가 종속 속성을 별도의 엔터티로 분리한다.
5차 정규화- 결합 종속일 경우는 2개 이상의 엔터티로 분리한다.

제1정규형

한 속성에 여러 개의 속성값을 갖거나 같은 유형의 속성이 여러 개인 경우 해당 속성을 분리시켜야 함을 뜻한다.

제2정규형

제1정규형을 만족하고 모든 PK가 아닌 칼럼은 PK 전체에 종속되어야 한다. PK에 종속적이지 않거나 PK 중 일부 칼럼(들)에만 종속적인 칼럼은 분리되어야 하는 것을 뜻한다.

  • 갱신이상 문제점을 방지
  • 복합식별자의 일부 칼럼에만 함수 종속하는 속성을 없앤다.

제3정규형

제2정규형을 만족하고 일반 속성들 간에도 함수 종속 관계가 존재하지 않아야 하고, 일반 속성들 간 종속 관계가 존재하는 것들은 분리되어야 하는 것을 뜻한다.


🚫위반
1. 식별자를 제외한 일반 속성 간에 함수 종속이 발생하는 경우


2-5) 정규화와 성능

  1. 정규화를 수행한 후, 전에 없었던 조인이 발생하게 되더라도 효율적인 인덱스 사용을 통해 조인 연산을 수행하면 성능상의 단점은 거의 없다.
  2. 정규화를 수행한 후, 적은 용량의 테이블이 생성된다면 조인 연산 시 적은 용량의 테이블을 먼저 읽어 조인을 수행하면 되므로 성능상 유리하다.
  3. 정규화가 제대로 되지 않으면 비슷한 종류의 속성이 여러 개가 되어 과도하게 많은 인덱스가 만들어질 수 있다. 정규화를 한다면 하나의 인덱스만 만들어도 된다.

2-8) 함수적 종속성에 근거한 정규화 수행 필요

함수적 종속성

데이터들이 어떤 기준값(결정자)에 의해 종속되는 현상을 지칭하는 것

  • 기준값 = 결정자
  • 종속되는 값 = 종속자

종속자는 함수적으로 종속성을 가지게 되며, 종속자는 결정자에 의해서 결정된다.


정규화 작업

함수적 종속성을 만족시키는 작업




3. 반정규화와 성능

3-1) 반정규화의 정의

일반적으로 데이터를 고의적으로 중복 저장하여 조회 성능을 향상시키기 위한 기법
→ 데이터를 중복 저장함으로써 조인 연산이 회피되어 성능이 향상됨

  • 시스템의 성능 향상 및 개발과 유지보수의 단순화를 위해 반정규화는 정규화된 데이터 모델을 분석하여 엔터티/속성/관계를 중복, 통합, 분리 등의 작업으로 수행하는 데이터 모델링 기법 을 의미
  • 중복성의 원리를 활용하여 데이터 조회 시 성능을 향상시키는 역할을 한다.

넓은 의미 로 조회 성능을 향상시키기 위해 정규화된 데이터 모델에서 중복, 통합, 분리 등을 수행하는 모든 과정을 의미

데이터 무결성이 깨질 수 있는 위험을 무릅쓰고 데이터를 중복하여 반정규화를 적용하는 상황
1. 데이터를 조회할 때 디스크 I/O량이 많아서 성능이 저하되는 경우
2. 테이블 간 경로가 너무 멀어 조인으로 인한 성능 저하가 예상되는 경우
3. 컬럼을 계산하여 읽을 때 성능이 저하될 것이 예상되는 경우


3-2) 반정규화의 절차

1. 반정규화 대상 조사

  • 범위 처리 빈도수 조사
  • 대량의 범위 처리 조사
  • 통계성 프로세스 조사
  • 테이블 조인 개수

2. 다른 방법 유도 검토

  • 뷰 테이블
  • 클러스터링 적용
  • 인덱스의 조정
  • 응용 애플리케이션 변경

3. 반정규화 적용

  • 테이블 반정규화
  • 속성의 반정규화
  • 관계의 반정규화

3-3) 반정규화 기법

테이블 반정규화

테이블 병합

: 여러 개의 테이블을 하나의 테이블로 합치는 것

  • 테이블을 병합하면 데이터의 중복 저장이 발생하지만 조회 성능 향상을 위해서(조인 연산의 불필요 등) 테이블을 병합한다.
기법설명
1:1 관계
테이블 병합
- 1:1 관계를 통합하여 성능을 향상시키는 방법이다.
- 2개의 테이블을 하나의 테이블로 병합하여 테이블 간 조인 연산을 제거한다.
1:M 관계
테이블 병합
- 1:M 관계를 통합하여 성능을 향상시키는 방법이다.
- 2개의 테이블을 하나의 테이블로 병합하여 테이블 간 조인 연산을 제거한다.
슈퍼/서브 타입
테이블 병합
- 슈퍼/서브 관계를 통합하여 성능을 향상시키는 방법이다.
- 슈퍼/서브 타입 관계를 하나의 테이블로 병합하여 조인 연산을 제거한다.

테이블 분할

: 특정 테이블을 여러 개의 테이블로 쪼개는 것

기법설명
수직 분할- 칼럼 단위의 테이블을 디스크 I/O 분산 처리하기 위해 테이블을 1:1로 분리하여 성능을 향상시키는
방법으로 트랜잭션이 처리되는 유형 파악이 선행되어야 한다.
ex) 게시글 테이블의 조회수 칼럼은 업데이트가 빈번하게 일어나므로 게시글의 조회수 저장용 테이블을
하나 더 만들어서 관리한다.
수평 분할-로우 단위로 집중 발생되는 트랜잭션을 분석하여 디스크 I/O 및 데이터 접근효율을 높여 성능을 향상
하기 위해 로우 단위로 테이블을 쪼개는 방법이다.
ex) 요금납부 테이블을 각 년원별 요금납부 테이블로 분할한다.

테이블 추가

: 특정 테이블을 추가하여 데이터의 중복 저장이라는 비효율이 발생하는 것을 감안하더라도 조회 성능을 높이기 위한 방법

기법설명
중복 테이블 추가- 다른 업무이거나 서버가 다른 경우 동일한 테이블 구조를 중복하여 원격 조인을
제거하여 성능을 향상시킨다.
통계 테이블 추가- SUM, AVG 등을 미리 수행하여 계산해둠으로써 조회 시 성능을 향상시킨다.
이력 테이블 추가- 이력 테이블 중에서 마스터 테이블에 존재하는 레코드를 중복하여 이력 테이블에
저장하는 반정규화 기법이다.
부분 테이블 추가- 특정 테이블에서 전테 칼럼 중 자주 이용(조회)하는 집중화된 칼럼들이 있을 때,
디스크 I/O 를 줄이기 위해 해당 칼럼들을 모아놓은 별도의 반정규화된 테이블을 생성한다.



칼럼 반정규화

: 특정 칼럼을 추가하여 데이터 모델 내에서 중복으로 데이터가 저장되지만, 조회 성능을 향상시킬 수 있는 방법

기법설명
중복 칼럼 추가- 조인 연산으로 인한 성능 저하를 예방하기 위해 중복 칼럼을 추가하여 조인 연산을 하지
않도록 한다.
ex) 인사 테이블과 부서 테이블을 조인하여 부서 테이블에 있는 부서명 칼럼을 조회할 때,
부서명 칼럼을 인사 테이블에도 중복으로 관리하여 부서 테이블을 조인하지 않고 인사 정보를 조회한다.
파생 칼럼 추가- 트랜잭션이 처리되는 시점에 계산에 의해 발생되는 값의 성능 저하를 예방하기 위해 미리
값을 계산하여 칼럼에 보관한다.
ex) 총매출금액
이력 테이블 칼럼 추가- 대량의 이력 데이터를 처리할 때 불특정한 날 조회나 최근 값을 조회할 때 나타날 수 있는 성능 저하를 예방하기 위해 이력 테이블에 칼럼을 추가한다.
ex) 최근값여부, 시작일자, 종료일자
PK에 의한 칼럼 추가- 복합의미를 갖는 PK를 단일 속성으로 구성하였을 경우 단일 PK안에서 특정 값을 별도로
조회하는 경우 성능 저하가 발생할 수 있다.
- 이때 이미 PK안에 데이터가 존재하지만 성능 향상을 위해 일반 속성으로 생성하는 방법이
PK에 의한 칼럼 추가 반정규화이다.
ex) 주문번호 값의 구성이 "상품코드+주문일자(YYYYMMDD)+주문순번"으로 되어 있을
경우 주문번호 안에 존재하는 주문일자를 일반 속성으로 도출한 후 주문일자 칼럼을 인덱스
로 생성한다.
응용 시스템의 오작동을 위한 칼럼 추가- 비즈니스적으로 의미가 없지만 사용자가 데이터 처리를 하다가 잘못 처리하여 원래의
값으로 복구를 원하는 경우 이전 데이터를 임시적으로 중복하여 보관하는 기법이다.
- 칼럼으로 이것을 보관하는 방법은 오작동 처리를 위한 임시적인 기법이지만, 이것을 이력
데이터 모델로 풀어내면 정상적인 데이터 모델의 기법이 될 수 있다.



관계 반정규화

: 데이터 무결성을 깨뜨릴 위험을 갖지 않고서도 데이터 처리의 성능을 향상시킬 수 있는 반정규화 기법

기법설명
중복 관계 추가데이터를 처리하기 위한 여러 경로를 거쳐 조인이 가능하지만, 이때 발생할 수 있는 성능저하를
예방하기 위해 추가적인 관계를 맺는 방법



4. 대량 데이터에 다른 성능

4-1) 대량 데이터 발생에 따른 테이블 분할 개요

대량의 데이터가 존재하는 테이블에 많은 트랜잭션이 발생하여 성능이 저하되는 테이블 구조는 수평 / 수직 분할 설계를 통해 성능 저하를 예방할 수 있다.

수평 분할

: 행 단위로 분할하여 I/O를 감소시키는 방법

수직 분할

: 칼럼 단위로 분할하여 I/O를 감소시키는 방법

Input / Output (I/O)

  • 테이블 내에 모든 행은 블록 단위로 디스크에 저장된다.
  • 오라클 DBMS 기준 1개의 블록은 8,192바이트(=8킬로바이트)이다. 하나의 블록마다 8,192바이트를 저장하고 그러한 블록이 모여서 테이블의 데이터를 이루게 된다.
    -칼럼이 많아지게 되면 하나의 행을 저장 시 물리적인 디스크에 여러 블록에 걸쳐 데이터가 저장될 가능성이 높아진다. 이러한 경우 하나의 행을 읽더라도 여러 개의 블록을 읽어야 한다.
  • 특정 테이블에서 한 행의 용량이 8,193바이트라고 가정하면 하나의 행을 읽더라도 2개의 블록을 읽게 된다. 2개의 블록을 읽었으니 총 16,384바이트를 읽게 되고 그중 8,191바이트는 버려진다.
  • 자연스럽게 SQL문의 블록 I/O 의 수가 많아지게 되어 성능 저하가 일어난다.



성능 저하 현상

많은 블록에 데이터가 저장되면 데이터 조회 시 절대적인 블록 I/O횟수가 많아지면 디스크 I/O (고비용의 작업으로 DBMS성능저하 유발)할 가능성도 높아진다.

로우 체이닝 (Row Chaining)
: 로우 길이가 너무 길어서 데이터 블록 하나에 데이터가 모두 저장되지 않고 2개 이상의 블록에 걸쳐 하나의 로우가 저장되어 있는 형태

  • 하나의 행을 읽을 때 2개 이상의 데이터 블록을 읽게 될 수 있는 것
  • 절대적으로 읽어야 할 데이터 블록의 수가 늘어나면서 성능이 저하된다.

로우 마이그레이션 (Row Migration)
: 데이터 블록에서 수정이 발생하면 수정된 데이터를 해당 데이터 블록에서 저장하지 못하고 다른 블록의 빈 공간을 찾아 저장하는 방식

  • 해당 현상이 일어나면서 하나의 행을 읽을 때 2개 이상의 데이터 블록을 읽게 된다.
  • 로우 체이닝 현상과 마찬가지로 절대적으로 읽어야 할 데이터 블록의 수가 늘어나면서 성능이 저하된다.

4-2) 한 테이블에 많은 수의 칼럼을 가지는 경우의 성능 저하

조회대상이 아닌 칼럼은 버려지게 되어 불필요한 블록 I/O의 수가 많아지면서 자연스럽게 디스크 I/O의 양도 증가된다. 디스크 I/O가 많아지면 DBMS의 전체 성능이 저하된다.

테이블 수직 분할

  • 1:1 관계로 수직 분할한다.
  • 분리된 테이블을 칼럼의 수가 적어지므로 1개의 행을 읽기 위해서 절대저으로 읽어야 할 데이터 블록의 수가 줄어들어 로우 마이그레이션과 로우 체이닝 현상이 감소한다.
  • 조회 시에도 디스크 I/O 가 줄어들어 성능이 좋아진다.

4-3) 한 테이블에 많은 수의 행을 가지는 경우의 성능 저하

대용량 테이블은 행의 수가 많아서 SQL문의 성능이 저하될 수 있다.

범위 파티셔닝

: 테이블의 저장 건수가 매우 많을 때 특정 기간으로 수평 분할하는 것

  • 데이터 보관 주기에 따른 테이블 관리가 용이하다.
  • 특정 시점 기준으로 조회 시 테이블 스캔의 범위가 작으므로 동일한 SQL문이라도 성능이 좋아질 가능성이 높아진다.

리스트 파티셔닝

: 대용량 데이터를 특정 값에 따라 분리 저장하여 수평 분할하는 것

  • 데이터 보관 주기에 따라 쉽게 삭제하는 기능은 제공하지 않는다.

해시 파티셔닝

: 지정된 HASH 조건에 따라 해싱 알고리즘을 적용하여 테이블을 분리한다.

  • 해싱 알고리즘에 의해 각각의 해시 파티션에 분리되어 데이터가 입력되므로 기존에 1개의 테이블에만 데이터를 입력하는 방식보다 입력 시의 경합 부하가 줄어든다.
  • 설계자 및 데이터 입력자는 특정 데이터가 어떤 파티션에 저장되는지 정확하게 예측할 수 없다.
  • 데이터 입력 시 경합에 의한 성능 부하를 해소하기 위해 사용한다.
  • 데이터 보관 주기에 따라 쉽게 삭제하는 기능을 제공할 수 없다.
  • 불특정 다수의 데이터를 자동으로 여러 개의 분할해서 저장하므로 특정 테이블에 데이터 처리가 집중적으로 발생될 때 일어날 수 있는 경합을 해소시킬 수 있다.

4-4) 테이블에 대한 수평/수직 분할의 절차

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



5. 데이터베이스 구조와 성능

5-1) 슈퍼/서브 타입 모델

공통 부분을 슈퍼 타입 엔터티로 도출하고 공통으로부터 상속받아 다른 엔터티와 차이가 있는 속성에 대해서는 별도의 서브 타입 엔터티로 구분하는 방식이다.

  • 업무를 구성하는 데이터의 특징을 분석하겨 공통점과 차이점을 고려하여 효과적으로 표현할 수 있다.
  • 비즈니스의 모습을 정확하게 표현하면서 물리적인 데이터 모델로 변환할 때 선택의 폭을 넓힐 수 있는 장점이 있다.

슈퍼/서브 타입 모델 변환 방법

방법설명
슈퍼 타입 기준
(Single 타입, All in One 타입)
- 슈퍼/서브 타입 모델을 하나의 테이블로 변환한 것이다.
ex) 고객 테이블 하나로만 구성한다.
서브 타입 기준
(Plus타입, Super+Sub 타입)
- 슈퍼/서브 타입을 서브 타입 테이블들로 변환한 것이다.
ex) 개인고객, 법인고객 테이블로 구성한다.
- 도출된 각각의 서브 타입에는 변환 전 슈퍼 엔터티에 있던 칼럼들을 공통적으로 가지고 있다.
개별 타입 기준
(OneToOne 타입, 1:1타입)
- 슈퍼/서브 타입을 슈퍼 타입과 서브 타입의 각각 개별 테이블로 변환한 것이다.
ex)고객, 개인고객, 법인고객 테이블로 구성한다.
- 슈퍼 테이블, 서브 테이블 모두 생성한 것이다.


5-2) 슈퍼/서브 타입 모델 변환의 중요성

  • 트랜잭션은 항상 슈퍼 타입 기준으로 처리하는데 테이블은 개별 타입으로 유지되어 UNION연산에 의해 성능이 저하될 수 있다. (슈퍼 타입 기준으로 테이블을 구성하는 것이 유리한 경우이다.)
  • 트랜잭션은 항상 서브 타입을 기준으로 처리하는데 슈퍼 타입으로 있는 경우 성능이 저하되는 경우가 있다. (서브 타입 기준으로 테이블을 구성하는 것이 유리한 경우이다.)
  • 트랜잭션은 항상 개별 타입 기준으로 터리하는데 테이블을 슈퍼 타입으로 되어 있어서 불필요하게 많은 양의 데이터가 집약되어 성능이 저하되는 경우가 있다. (개별 타입 기준으로 테이블을 구성하는 것이 유리한 경우이다.)

논리 데이터 모델링 시 정의한 슈퍼/서브 타입을 물리 데이터 모델로 변환 시 적절하게 선택을 할 필요가 있다.


5-3) 슈퍼/서브 타입(논리) -> 슈퍼 타입(물리) 변환

: 슈퍼/서브 타입 전체를 하나의 테이블로 구성하는 것을 의미한다.

슈퍼/서브 타입의 데이터를 처리 시 항상 통합하여 처리한다고 가정하면 하나의 테이블로 구성하는 것이 성능상 유리할 수 있다. 데이터를 처리할 때 항상 통합하여 처리하는데, 개별로 분리하게 되면 조인 연산 혹은 UNION ALL 연산 등이 빈번해져서 오히려 성능에 부담을 줄 수 있기 때문


5-4) 슈퍼/서브 타입(논리) -> 서브 타입(물리) 변환

슈퍼/서브 타입의 데이터 처리 시 개별로 처리하는 일이 빈번하다고 가정하면, 많은 양의 데이터를 처리하기 위해 관련된 데이터까지 모두 처리해야 하는 비효율이 발생한다. 이때, 비효율을 제거하기 위해서 서브 타입 기준으로 테이블을 변환한다.

  • SQL문 성능이 향상될 가능성이 높아진다.

5-5) 슈퍼/서브 타입(논리) -> 개별 타입(물리) 변환

: 기조의 슈퍼/서브 타입을 모두 개별 테이블로 변환한 것을 의미한다.

대부분의 업무 처리가 개별로 발생한다고 가정하면, 각각에 대해 독립적으로 트랜잭션이 발생하야 당사자에 꼭 필요한 칼럼들만을 가지게 하는 것을 말한다.


5-6) 슈퍼/서브 타입 -> 물리 데이터로 변환 3가지

구분슈퍼타입서브타입개별타입
특징하나의 테이블각각의 서브 타입 테이블슈퍼,서브 각각의 테이블
확장성나쁨보통좋음
조인 성능우수함나쁨나쁨
I/O성능나쁨좋음좋음
관리 용이성좋음좋지 않음좋지 않음
트랜잭션 용이에 따른 선택 방법전체를 일괄적으로 처리하는 경우 선택한다.각각의 서브 타입을 기준으로 처리하는 경우 선택한다.각각의 슈퍼,서브 타입을 기준으로 처리하는 경우 선택한다.

5-7) PK칼럼

: 테이블에는 기본키(PK)가 존재한다.

단일 PK

: 단 1개의 칼럼으로 이루어져 있음

복합 PK

: 인덱스의 구성 칼럼이 2개 이상인 인덱스를 의미한다.

  • PK칼럼의 순서에 따라 SQL문의 성능이 빨라질 수 있고 느려질 수도 있다.
  • 테이블에 발생되는 트랜잭션 조회 패턴에 따라 복합 PK칼럼의 순서를 조정해야 한다.
  • 인덱스 구성 칼럼 중 맨 앞에 위치하는 칼럼이 가능한 한 조건절에서 "="조건으로 들어와야 한다.
    -> 인덱스 선두 칼럼에 대한 조건이 들어오지 않는 경우 일반적으로 인덱스 전체를 읽거나 테이블 전체를 읽는다.(성능 저하 발생)

5-8) PK칼럼 성능

테이블 생성 시 PK는 DBMS에서 자동으로 인덱스도 같이 생성되기 때문에 PK가 복합PK일 경우 복합PK의 칼럼 순서가 성능에 영향을 미친다.

복합 PK

  • 논리 데이터 모델링 시 PK순서에 대해 성능적으로 고민하지 않고 물리 데이터 모델에 그대로 적용하는 경우 비효율적인 복합PK의 칼럼 순서로 인해 성능 저하 발생

5-9) PK칼럼 성능 저하의 경우

  1. 복합PK에서 맨 앞의 칼럼에 대한 조건값이 WHERE절에 들어오지 않는 경우
  2. 복합PK에서 맨 앞의 칼럼에 대한 조건값이 BETWEEN절에 들어가는 경우



6. 분산 데이터베이스와 성능

6-1) 분산 데이터베이스의 개요

: 여러 곳으로 분산되어 있는 데이터베이스를 하나의 가상 시스템으로 사용할 수 있도록 한 데이터베이스

  • 논리적으로 동일한 시스템에 속하지만 컴퓨터 네트워크를 통해 물리적으로 분산되어 있는 데이터들의 모임 (물리적 위치가 분산되지만, 논리적으로는 여러 사용자가 공유할 수 있다.)

6-2) 분산 데이터베이스의 투명성

: 해당 데이터베이스를 사용하는 사용자가 데이터베이스 시스템이 분산되어 있는 것을 인식하지 못하고 자신만의 데이터베이스 시스템을 사용하는 것으로 인식하도록 만드는 것

분할 투명성(단편화)

하나의 논리적 Relation(테이블)이 여러 단편으로 분할되어 각 단편의 사본이 여러 Site에 저장된다. 하지만 사용자는 한 곳에 위치하는 것으로 인식해야 한다.

위치 투명성

사용하려는 데이터의 저장 장소를 명시할 필요가 없다. 위치정보가 System Catalog에 유지되어야 한다. 사용자는 데이터가 어디에 위치하는지에 대해 신경 쓸 필요가 없는 것이다.

지역 사상 투명성

지역 DBMS와 물리적 DB사이의 Mapping을 보장한다. 각 지역 시스템 이름과 무관한 이름을 사용 가능하다. 사용자가 해당 데이터 어느 지역에 위치하는지를 신경 쓸 필요가 없어야 한다.

중복 투명성

DB객체가 여러 Site에 중복되어 있는지 사용자는 전혀 알 필요가 없는 성질이다.

장애 투명성

구성요소의 장애에 무관한 Transaction의 원자성을 유지한다. 분산 DB의 장애상황과는 무관하게 원자성을 유지해야 한다.

병행 투명성

다수 Transaction이 동시에 수행 시 결과의 일관성을 유지해야 한다.
(Locking과 TimeStamp방법을 주로 이용한다.)


6-3) 분산 데이터베이스의 장점

  • 지역자치성, 점증적 시스템 용량 확장
  • 신뢰성과 가용성
  • 효용성과 융통성
  • 빠른 응답 속도와 통신비용 절감
  • 데이터의 가용성과 신뢰성 증가
  • 시스템 규모의 적절한 조절
  • 각 지역 사용자의 요구 수용 증대

6-4) 분산 데이터베이스의 단점

  • 소프트웨어 개발 비용
  • 오류의 잠재성 증대
  • 처리 비용의 증대
  • 설계 및 관리의 복잡성과 비용
  • 불규칙한 응답 속도
  • 통제의 어려움
  • 데이터 무결성에 대한 위협

6-5) 분산 데이터베이스의 적용 기법

테이블 위치(Location) 분산

  • 설계된 테이블의 위치를 각각 다르게 위치시키는 것이다.

테이블 분할(Fragmentation) 분산

  • 각각의 테이블을 쪼개어 분산하는 방법이다.
  • 수평분할 : 지사(Node)에 따라 테이블을 특정 칼럼의 값을 기준으로 로우(Row)를 분리한다.
  • 수직분할 : 지사(Node)에 따라 테이블 칼럼을 기준으로 칼럼을 분리한다. (로우단위로 분리되지 않는다.)

테이블 복제(Replication) 분산

  • 동일한 테이블을 다른 지역이나 서버에서 동시에 생성하여 관리하는 유형이다.
  • 부분복제 : 통합된 테이블을 한 군데(본사)에 가지고 있으면서 각 지사별로는 지사에 해당된 로우를 가지고 있는 형태이다.
  • 광역복제 : 통합된 테이블을 한 군데(본사)에 가지고 있으면서 각 지사에도 본사와 동일한 데이터를 모두 가지고 있는 형태이다.

테이블 요약(Summarization) 분산

  • 지역 간에 또는 서버 간에 데이터가 비슷하지만 서로 다른 유형으로 존재하는 경우이다.
  • 분석요약 : 각 지사별로 존재하는 요약정보를 본사에 통합하여 다시 전체에 대해서 요약 정보를 산출하는 분산방법이다.
  • 통합요약 : 각 지사별로 존재하는 다른 내용의 정보를 분사에 통합하여 다시 전체에 대해서 요약정보를 산출하는 분산방법이다.

0개의 댓글