[SQLD] 데이터 모델과 성능

ewillwin·2023년 8월 6일
0

SQLD Study

목록 보기
2/8

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

성능 데이터 모델링의 정의

  • 성능 데이터 모델링 : 데이터베이스 성능향상을 목적으로 설계단계의 데이터 모델링 때부터 정규화, 반정규화, 테이블통합, 테이블분할, 조인구조, PK, FK 등 여러 가지 성능과 관련된 사항이 데이터 모델링에 반영될 수 있도록 하는 것

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

  • 분석/설계 단계에서 데이터 모델에 성능을 고려한 데이터 모델링을 수행할 경우 성능저하에 따른 재업무 비용을 최소화 할 수 있다.
  • 데이터의 증가가 빠를 수록 성능저하에 따른 성능개선비용은 기하급수적으로 증가하게 된다.

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

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

[2. 정규화와 성능]

정규화를 통한 성능 향상 전략

  • 정규화: 반복적인 데이터를 분리하고 각 데이터가 종속된 테이블에 적절하게 배치되도록 하는 것

  • 정규롸를 수행한다는 것은 데이터를 결정하는 결정자에 의해 함수적 종속을 가지고 있는 일반속성을 의존자로 하여 입력/수정/삭제 이상을 제거하는 것이다.
    -> 데이터의 중복속정을 제거하고 결정자에 의해 동일한 의미의 일반속성이 하나의 테이블로 집약되므로 한 테이블의 데이터 용량이 최소화되는 효과가 있다.

  • 정규화 수행 모델은 데이터를 입력/수정/삭제할 때 일반적으로 반정규화된 테이블에 비해 처리 성능이 향상된다. 단 데이터를 조회할 때에는 처리 조건에 따라 조회 성능이 향상될 수도 있고 저하될 수도 있다.
    -> 정규화가 잘 되어 있으면 입력/수정/삭제의 성능이 향상되고 반정규화를 많이 하면 조회의 성능이 향상된다고 인식될 수 있지만, 무조건적인 건 아니다.

1차 정규화

  • 각 열이 Atomic하게 이루어지도록 테이블을 구성하는 것

비정규화된 테이블

학번 | 이름    | 전화번호
----------------------
1   | 홍길동  | 010-1234-5678, 02-9876-5432
2   | 김철수  | 010-1111-2222

1차 정규화된 테이블

학번 | 이름    | 전화번호
----------------------
1   | 홍길동  | 010-1234-5678
1   | 홍길동  | 02-9876-5432
2   | 김철수  | 010-1111-2222

2차 정규화

  • 테이블이 1차 정규화를 만족하면서 부분 함수 종속을 제거하는 것. 부분 함수 종속이란 기본 키가 아닌 칼럼이 기본 키의 일부에만 종속되는 경우를 의미

비정규화된 테이블

[성적] 테이블
학번 | 학생이름 | 과목이름 | 성적
-----------------------------
1   | 홍길동   | 수학     | 90
2   | 김철수   | 영어     | 85
3   | 홍길동   | 영어     | 80

2차 정규화된 테이블

[학생] 테이블
학번 | 학생이름
-------------
1   | 홍길동
2   | 김철수
3   | 홍길동

[과목] 테이블
과목이름
-------
수학
영어

[성적] 테이블
학번 | 과목이름 | 성적
-----------------
1   | 수학     | 90
2   | 영어     | 85
3   | 영어     | 80

3차 정규화

  • 테이블이 2차 정규화를 만족하면서 이행적 함수 종속을 제거하는 것. 이행적 함수 종속이란 A가 B에 종속되고, B가 C에 종속되면 A가 C에 종속되는 상황을 말함.

비정규화된 테이블

[강의] 테이블
교수이름 | 강의이름 | 학과 | 학년
-----------------------------
김교수   | 데이터베이스 | 컴퓨터공학과 | 3학년
이교수   | 컴퓨터구조   | 컴퓨터공학과 | 2학년
김교수   | 자료구조     | 컴퓨터공학과 | 1학년

3차 정규화된 테이블

[교수] 테이블
교수이름
-------
김교수
이교수

[교수정보] 테이블
교수이름 | 학과 | 학년
------------------
김교수   | 컴퓨터공학과 | 3학년
이교수   | 컴퓨터공학과 | 2학년

[강의] 테이블
교수이름 | 강의이름
-----------------
김교수   | 데이터베이스
이교수   | 컴퓨터구조
김교수   | 자료구조

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

  • 함수적 종속성은 데이터들이 어떤 기준값에 의해 종속되는 형상을 지칭하는 것이다.
  • 함수적 종속성은 데이터가 가지고 있는 근본적인 속성. 정규화의 궁극적인 목적은 반복적인 데이터를 분리하고 각 데이터가 종속된 테이블에 적절하게 배치되도록 하는 것임.


[3. 반정규화와 성능]

반정규화를 통한 성능향상 전략

반정규화의 정의

  • 정규화된 엔터티, 속성, 관계에 대해 시스템의 성능향상과 개발과 운영의 단순화를 위해 중복, 통합, 분리 등을 수행하는 데이터 모델링의 기법

  • 협의의 반정규화는 데이터를 중복하여 성능을 향상시키기 위한 기법이라고 정의할 수 있고, 좀 더 넓은 의미의 반정규화는 성능을 향상시키기 위해 정규화된 데이터 모델에서 중복, 통합, 분리 등을 수행하는 모든 과정을 의미한다.

  • 데이터 무결성이 깨질 수 있는 위험을 무릅쑤고 데이터를 중복하여 반정규화를 적용하는 이유는 데이터를 조회할 때 디스크 I/O량이 많아서 성능이 저하되거나 경로가 너무 멀어 조인으로 인한 성능저하가 예상되거나 칼럼을 계산하여 읽을 때 성능이 저하될 것이 예상되는 경우 반정규화를 수행하게 된다.

  • 일반적으로 정규화시 입력/수정/삭제 성능이 향상되며 반정규화시 조인 성능이 향상된다.


반정규화의 적용방법

  1. 반정규화 대상 조사
    -> 자주 사용되는 테이블에 접근하는 프로세스의 수가 많고 항상 일정한 범위만을 조회하는 경우에 반정규화를 검토한다.
    -> 테이블에 대량의 데이터가 있고 대량의 데이터 범위를 자주 처리하는 경우에 처리범위를 일정하게 줄이지 않으면 성능을 보장할 수 없을 경우에 반정규화를 검토한다.
    -> 통계성 프로세스에 의해 통계 정보를 필요로 할 때 별도의 통계테이블(반정규화 테이블)을 생성한다.
    -> 테이블에 지나치게 많은 조인이 걸려 데이터를 조회하는 작업이 기술적으로 어려울 경우 반정규화를 검토한다.

  2. 반정규화의 대상에 대해 다른 방법으로 처리할 수 있는 지 검토
    -> VIEW 사용 : 지나치게 많은 조인이 걸려 데이터를 조회하는 작업이 기술적으로 어려울 경우 VIEW를 사용한다. (VIEW가 성능향상X)
    -> 클러스터링 : 대량의 데이터처리나 부분처리에 의해 성능이 저하되는 경우 클러스터링을 적용하거나 인덱스를 조정함 (조회가 대부분일 때 클러스터링 적용)
    -> 파티셔닝 : 대량의 데이터는 PK의 성격에 따라 부분적인 테이블로 분리할 수 있다. 파티셔닝 키에 의해 물리적 저장공간 분리
    -> 캐시 : 응용 애플리케이션에서 로직을 구사하는 방법을 변경함으로써 성능을 향상시킬 수 있다.

  3. 반정규화 적용


반정규화의 기법

테이블 반정규화


칼럼 반정규화


관계 반정규화



[4. 대량 데이터에 따른 성능]

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

  • 일의 처리되는 양이 한군데에 몰리는 현상은 어떤 업무에 있어서 중요한 업무에 해당되는 데이터가 특정 테이블에 있는 경우에 발생이 되는데, 이런 경우 트랜잭션이 분산 처리될 수 있도록 테이블단위에서 분리할의 방법을 적용할 필요가 있다.

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

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

  • 로우체이닝과 로우마이그레이션이 발생하여 많은 블록에 데이터가 저장되면 데이터베이스 메모리에서 디스크와 I/O가 발생할 때 불필요하게 I/O가 많이 발생하여 성능이 저하된다.


한 테이블에 많은 수의 칼럼을 가지고 있는 경우

  • 한 테이블에 많은 수의 칼럼을 가지고 있는 경우
    -> 이렇게 많은 칼럼을 가지고 있는 테이블에 대해서는 트랜잭션이 발생될 때 어떤 칼럼에 대해 집중적으로 발생하는 지 분석하여 테이블을 쪼개어 주면 디스크 I/O가 감소하게 되어 성능이 개선되게 된다.

  • 트랜잭션을 분석하여 적절하게 1:1관계로 분리함으로써 성능향상이 가능하도록 해야한다.


Partitioning 적용

  • 테이블에 많은 양의 데이터가 예상될 경우 파티셔닝을 적용하거나 PK에 의해 테이블을 분할하는 방법을 적용할 수 있다.

RANGE PARTITION 적용

  • 대상 테이블이 날짜 또는 숫자값으로 분리가 가능하고 각 영역별로 트랜잭션이 분리되는 경우 ex) 요금_0401

LIST PARTITION 적용

  • 지점, 사업소 등 핵심적인 코드값으로 PK가 구성되어 있고 대량의 데이터가 있는 테이블의 경우 ex) 고객_서울

HASH PARTITION 적용

  • 지정된 HASH 조건에 따라 해시 알고리즘이 적용되어 테이블이 분리

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

  1. 데이터 모델링을 완성한다.
  2. 데이터베이스 용량산정을 한다.
  3. 대량 데이터가 처리되는 테이블에 대해서 트랜잭션 처리 패턴을 분석한다.
  4. 칼럼 단위로 집중화된 처리가 발생하는지, 로우단위로 집중화된 처리가 발생되는지 분석하여 집중화된 단위로 테이블을 분리하는 것을 검토한다.
  • 칼럼의 수가 많은 경우 트랜잭션의 특성에 따라 테이블을 1:1형태로 분리할 수 있는 지 검증하면 된다.
  • 칼럼의 수가 적지만 데이터용량이 많아 성능저하가 예상이 되는 경우 테이블에 대해 파티셔닝 전략을 고려하도록 한다.


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

슈퍼타입/서브타입 모델의 성능고려 방법

슈퍼/서브타입 데이터 모델의 개요

  • Extended ER모델이라고 부르는 이른바 슈퍼/서브타입 데이터 모델은 최근에 데이터 모델링을 할 때 자주 쓰이는 모델링 방법. 업무를 구성하는 데이터의 특징을 공통과 차이점의 특징을 고려하여 효과적으로 표현할 수 있음
  • 슈퍼 타입 : 공통 부분
  • 서브 타입 : 공통으로부터 상속받아 다른 엔터티와 차이가 있는 속성

슈퍼/서브타입 데이터 모델의 변환

  • 슈퍼/서브타입을 성능을 고려한 물리적인 데이터 모델로 변환하는 기준은 데이터 양과 해당 테이블에 발생된즌 트랜잭션의 유형에 따라 결정된다.
    -> 데이터의 양은 데이터량이 소량일 경우에 성능에 영향을 미치지 않기 때문에 데이터처리의 유연성을 고려하여 가급적 1:1 관계를 유지하는 것이 바람직하다
    -> 그러나 데이터용량이 많아지는 겨우 그리고 해당 업무적인 특징이 성능에 민감한 경우는 트랜잭션이 해당 테이블에 어떻게 발생되는지에 따라 3가지 변환방법을 촘조하여 상황에 맞게 변환하도록 해야한다.

슈퍼/서브타입 데이터 모델의 변환기술

  1. 개별로 발생되는 트랜잭션에 대해서는 개별 테이블로 구성 (One to One Type)
    -> 슈퍼타입과 서브타입각각에 대해 독립적으로 트랜잭션이 발생이 되면 슈퍼타입에도 꼭 필요한 속성만을 가지게 하고 서브타입에도 꼭 필요한 속성 및 자신이 타입에 맞는 데이터만 가지게 하기 위해서 모두 분리하여 1:1 관계를 갖도록 한다.

  2. 슈퍼타입+서브타입에 대해 발생되는 트랜잭션에 대해서는 슈퍼타입+서브타입 테이블로 구성 (Plus Type)
    -> 슈퍼타입과 서브타입을 묶어 트랜잭션이 발생하는 업무특징을 가지고 있을 때에는 슈퍼타입+각서브타입을 하나로 묶어 별도의 테이블로 구성하는 것이 효율적이다.

  3. 전체를 하나로 묶어 트랜잭션이 발생할 때는 하나의 테이블로 구성 (Single Type, All in One Type)
    -> 대리인 10만 건, 매수인 500만 건, 이해관계인 500만 건의 데이터가 존재한다고 하더라도 데이터를 처리할 때 대리인, 매수인, 이해관계인을 항상 통합하여 처리한다고 하면, 비록 슈퍼타입 서브타입의 테이블들을 하나로 묶었을 때 각각의 속성별로 제약사항(NULL/NOT NULL, 기본값, 체크값)을 정확하게 지정하지 못할지라도 대용량이고 성능향상이 필요하다면 하나의 테이블로 묶어서 만들어준다.


인덱스 특성을 고려한 PK/FK 데이터베이스 성능향상

  • PK는 해당 테이블의 데이터를 접근할 때 가장 빈번하게 사용되는 유일한 인덱스를 모두 자동 생성한다.
    -> 인덱스의 특징은 여러 개의 속성이 하나의 인덱스로 구성되어 있을 때 앞쪽에 위치한 속성의 값이 비교자로 있어야 인덱스가 좋은 효율을 나타낼 수 있다. 앞쪽에 위치한 속성 값이 가급적 '=' 아니면 최소한 범위 'BETWEEN' '<>'가 들어와야 인덱스를 이용할 수 있는 것이다.
    -> PK의 순서를 인덱스 특징에 맞게 고려하지 않고 바로 그대로 생성하게 되면, 테이블에 접근하는 트랜잭션의 특징에 효율적이지 않은 인덱스가 생성되어 있으므로 인덱스의 범위를 넓게 이용하거나 Full Scan을 유발하게 되어 성능이 저하된다고 정리할 수 있다.

  • FK라고 하더라도 데이터를 조회할 때 조인의 경로를 제공하는 역할을 수행하므로 FK에 대해서는 반드시 인덱스를 생성하도록 하고 인덱스 칼럼의 순서도 조회의 조건을 고려하여 접근이 가장 효율적인 칼럼 순서대로 인덱스를 생성하도록 주의해야한다.


물리적인 테이블에 FK제약이 걸려있지 않을 경우 인덱스 미생성으로 성능저하

  • 물리적인 테이블에 FK 제약을 걸었을 때는 반드시 FK 인덱스를 생성하도록 하고, FK 제약이 걸리지 않았을 경우에는 FK 인덱스를 생성하는 것을 기본정책으로 하되 발생되는 트랜잭션에 의해 거의 활용되지 않았을 때에만 FK 인덱스를 지우는 방법으로 하는 것이 적절한 방법이 된다.


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

분산 데이터베이스의 개요

  • 분산데이터베이스의 정의
    -> 여러 곳으로 분산되어있는 데이터베이스를 하나의 가상 시스템으로 사용할 수 있도록 한 데이터베이스
    -> 논리적으로 동일한 시스템에 속하지만, 컴퓨터 네트워크를 통해 물리적으로 분산되어 있는 데이터들의 모임. 물리적 Site 분산, 논리적으로 사용자 통합, 공유

  • 즉, 분산 데이터베이스는 데이터베이스를 연결하는 빠른 네트워크 환경을 이용하여 데이터베이스를 여러 지역 여러 노드로 위치시켜 사용성/성능 등을 극대화 시킨 데이터베이스라고 정의할 수 있다.


분산 데이터베이스의 투명성

  1. 분할 투명성 (단편화): 하나의 논리적 Relation이 여러 단편으로 분할되어 각 단편의 사본이 여러 site에 저장

  2. 위치 투명성: 사용하려는 데이터의 저장 장소 명시 불필요. 위치정보가 System Catalog에 유지되어야 함

  3. 지역사상 투명성: 지역DBMS와 물리적 DB사이의 Mapping 보장. 각 지역시스템 이름과 무관한 이름 사용 가능

  4. 중복 투명성: DB 객체가 여러 site에 중복 되어 있는 지 알 필요가 없는 성질

  5. 장애 투명성: 구성요소(DBMS, Computer)의 장애에 무관한 Transaction의 원자성 유지

  6. 병행 투명성: 다수 Transaction 동시 수행 시 결과의 일관성 유지, Time Stamp, 분산 2단계 Locking을 이용 구현


분산 데이터베이스의 장단점


분산 데이터베이스의 활용 방향성


데이터베이스 분산구성의 가치

  • 데이터를 분산 환경으로 구성하였을 때 가장 핵심적인 가치는 바로 통합된 데이터베이스에서 제공할 수 없는 빠른 성능을 제공한다는 점이다. 원거리 또는 다른 서버에 접속하여 처리하므로인해 발생되는 네트워크 부하 및 트랜잭션 집중에 따른 성능 저하의 원인을 분산된 데이터베이스 환경을 구축하므로 빠른 성능을 제공하는 것이 가능해진다.

분산 데이터베이스의 적용 기법

테이블 위치 분산

  • 테이블 위치 분산은 테이블의 구조는 변하지 않는다. 또한 테이블이 다른 데이터베이스에 중복되어 생성되지도 않는다. 다만 설계된 테이블의 위치를 각각 다르게 위치시키는 것이다.

  • 테이블별 위치 분산은 정보를 이용하는 형태가 각 위치별로 차이가 있을 경우에 이용한다.

  • 테이블의 위치가 위치별로 다르므로 테이블의 위치를 파악할 수 있는 도식화된 위치별 데이터베이스 문서가 필요하다.


테이블 분할 분산

  • 테이블 분할 분산은 단순히 위치만 다른 곳에 두는 것이 아니라 각각의 테이블을 쪼개어 분산하는 방법이다.

  • 수평분할(Row 단위로 분리)

  • 수직분할(Column 단위로 분리)

    -> 칼럼 기준으로 분할하였기 때문에 각각의 테이블에는 동일한 Primary Key 구조와 값을 가지고 있어야 한다.

테이블 복제 분산

  • 테이블 복제 분산은 테이블의 일부의 내용만 다른 지역이나 서버에 위치시키는 부분복제가 있고, 마스터 데이터베이스의 테이블의 내용을 각 지역이나 서버에 존재시키는 광역복제가 있다.

  • 부분복제: 통합된 테이블을 한군데(본사)에 가지고 있으면서 각 지사별로는 지사에 해당된 로우를 가지고 있는 형태이다. 즉 본사의 데이터는 지사데이터의 합이 되는 것이다.

  • 광역복제: 통합된 테이블을 한군데(본사)에 가지고 있으면서 각 지사에도 본사와 동일한 데이터를 모두 가지고 있는 형태이다.


테이블 요약 분산

  • 테이블 요약 분산은 지역간에 또는 서버 간에 데이터가 비슷하지만 서로 다른 유형으로 존재하는 경우가 있다. 요약의 방식에 따라, 동일한 테이블 구조를 가지고 있으면서 분산되어 있는 동일한 내용의 데이터를 이용하여 통합된 데이터를 산출하는 방식의 분석요약과, 분산되어 있는 다른 내용의 데이터를 이용하여 통합된 데이터를 산출하는 방식의 통합요약이 있다.

  • 분석 요약: 각 지사별로 존재하는 요약정보를 본사에 통합하여 다시 전체에 대해서 요약정보를 산출하는 분산방법이다.

  • 통합 요약: 각 지사별로 존재하는 다른 내용의 정보를 본사에 통합하여 다시 전체에 대해서 요약정보를 산출하는 분산방법이다.



분산 데이터베이스를 적용하여 성능이 향상된 사례

  • 성능이 중요한 사이트에 적용해야 한다.
  • 공통코드, 기준정보, 마스터 데이터 등에 대해 분산환경을 구성하면 성능이 좋아진다.
  • 실시간 동기화가 요구되지 않을 때 좋다. 거의 실시간의 업무적인 특징을 가지고 있을 때도 분산 환경을 구성할 수 있다.
  • 특정 서버에 부하가 집중이 될 때 부하를 분산할 때도 좋다.
  • 백업 사이트를 구성할 때 간단하게 분산기능을 적용하여 구성할 수 있다.
profile
💼 Software Engineer @ LG Electronics | 🎓 SungKyunKwan Univ. CSE

0개의 댓글