데이터 모델링과 성능

성능 데이터 모델링


성능 데이터 모델링의 정의

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

 

모델링 시점

  • 성능 향상을 위한 비용은 프로젝트 수행 중에 있어서 사전에 할수록 비용이 들지 않음. 
  • 분석/설계 단계에서 데이터 모델에 성능을 고려한 데이터 모델링을 수행할 경우, 성능 저하에 따른 재업무 비용을 최소화할 수 있음. 
  • 분석/설계 단계에서 데이터베이스 처리 성능을 향상 시킬 수 있는 방법을 주도면밀하게 고려해야 함. 

 

고려사항

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

 

정규화와 성능


정규화의 정의

  • 데이터를 결정하는 결정자에 의해 함수적 종속성을 가지고 있는 일반 속성을 의존자로 하여 입력/수정/삭제 이상현상을 제거하는 것. 
  • 데이터의 중복 속성을 제거하고 결정자에 의해 동일한 의미의 일반 속성이 하나의 테이블로 집약됨. 
  • 한 테이블의 데이터 용량이 최소화되는 효과를 가짐. 
  • 정규화된 테이블은 데이터를 처리할 때 속도가 빨리질 수도 있고 느려질 수도 있는 특성을 가짐. 
    • 정규화된 데이터모델은 조회 시에는 처리 조건에 따라 성능이 향상 혹은 저하 된다. 
    • 정규화된 데이터모델은 입력/수정/삭제 시 무조건 성능이 향상된다. 

 

정규화 용어

  • 정규화 : 관계형 데이터베이스 테이블의 삽입,삭제,갱신에 대한 이상 현상 발생 빈도를 최소화하기 위해 좀 더 작은 테이블 단위로 테이블을 설계하는 과정. 
  • 정규형 : 정규화 결과에 의해 도출된 데이터 모델이 갖춰야 할 특성. 
  • 함수적 종속성 : 식별 되는 속성에 다른 일반 속성을 알 수 있는 특성. 
  • 결정자 : 식별자 역할을 하는 속성을 의미함. 
  • 다치종속 : 결정자 컬럼에 의해 하나의 일반 속성으로 여러 값을 알 수 있다고 하면 다치종속이 되었다고 함. 

 

정규화 효과 및 장점

  • 종속성이 강한 데이터 요소들을 분리, 독립된 개념으로 정의하게 됨에 따라 높은 응집도와 낮은 결합도를 가지며, 데이터의 유연성이 높아짐
  • 개념이 세분화됨에 따라 해당 개념에 대한 재활용 가능성이 높아짐.
  • 일반 속성들이 한번만 표현하게 됨으로써 중복이 최소화됨. 

 

정규화 이론

  • 1차 정규화 : 복수의 속성값을 갖는 속성을 분리, 속성의 원자성을 확보. 
  • 2차 정규화 : 주식별자에 완전종속적이지 않은 속성의 분리 (부분종속 속성을 분리)
  • 3차 정규화 : 일반속성에 종속적인 속성의 분리 (이전종속 속성을 분리)
  • 보이스 정규화 : 결정자안에 함수종속을 가진 주식별자 분리 
  • 4차 정규화 : 다가 종속 속성 분리.
  • 5차 정규화 : 결합종속일 경우는 두개 이상의 N개로 분리.

 

제1 정규형

  • 모든 속성은 원자 값을 가져야 함.
  • 다중 값을 가질 수 있는 속성은 분리되어야 함. 

제 1정규형 위반

연락처에 두 가지 값이 포함되어 있으므로 제1 정규형을 위반하였다고 할 수 있음. 

제 1 정규형

두 개의 값을 가진 컬럼을 개별로 나누어 저장하게 하여 제1 정규형을 만족시키도록 하였음. 

 

제2 정규형 

  • 제1 정규형을 만족하는 상태에서 모든 일반 컬럼은 기본 키 전체에 종속되어야 함. 
  • 기본 키에 종속되지 않거나 기본 키 일부 컬럼에만 종속 적인 컬럼은 분리되어야 함. 

제 2정규형 위반

고객아이디는 고객명과 고객등급을 나타낼 수 있고, 주문 순번은 주문일자를 나타낼 수 있음. 그렇기 때문에 두 개를 나누어야 함. 

제 2 정규형

 

 

제3 정규형

  • 제2 정규형을 만족하는 상태에서 일반속성들 간에도 종속관계가 존재하지 않아야 함. 
  • 일반 속성들 간 종속관계가 존재하는 것들을 분리하여야 함. 

제 3 정규형 위반

직업코드와 직업명이 함수 종속을 가지고 있어 별도의 테이블로 구분해야 함. 

 

정규화와 성능

  • 정규화된 테이블을 조회시 인덱스를 사용하여 연산을 수행하게 될 경우, 성능 상의 단점은 없음. 
  • 정규화를 진행하면서 소량의 테이블이 생성하고 조회 시 소량의 테이블을 먼저 읽고 다른 테이블을 읽게 된다면 성능상 유리할 수 있음. 
  • 정규화가 위반이 된 테이블은 여러개의 인덱스가 필요하지만 정규화가 되고 난 후에는 하나의 인덱스만 있으면 됨. 

 

함수적 종속성

  • 함수의 종속성은 데이터들이 어떤 기준값에 의해 종속되는 현상을 의미. 
  • 이 때 기준값을 결정자라 하고 종속되는 값을 종속자라고 함. 

 

 

반정규화와 성능


 

반정규화의 정의

  • 데이터를 중복하여 성능을 향상시키는 기법을 말함.
  • 데이터를 조회할 때 디스크 I/O량이 많아서 성능이 저하되거나 경로가 너무 멀어 조인으로 인한 성능저하가 예상될 때, 반정규화를 수행함. 

 

반정규화의 기법 - 테이블 반정규화

기법분류 기법 내용
테이블 병합 1:1 관계 테이블 병합 1:1 관계를 통합
1:M 관계 테이블 병합 1:M 관계를 통합
슈퍼/서브타입 테이블 병합 슈퍼/서브관계를 통합
테이블 분할 수직분할 컬럼 단위로 테이블을 분할
수평분항 로우 단위로 테이블을 분할
테이블 추가 중복 테이블 추가 동일한 테이블 구조를 중복으로 생성
통계 테이블 추가 SUM, AVG를 미리 계산한 테이블 생성
이력 테이블 추가 이력 컬럼만 분리하여 테이블 생성
부분 테이블 추가 자주 사용되는 컬럼만 분리하여 생성

 

 

반정규화의 기법 - 칼럼의 반정규화

기법 내용
중복 칼럼 추가 조인을 감소 시키기 위해 중복된 칼럼을 추가
파생 칼럼 추가 미리 계산한 값을 가지는 칼럼 추가
이력 테이블 칼럼 추가 불특정한 조회 처리를 하기위한 이력 칼럼 추가
PK에 의한 칼럼 추가 복합 식별자를 단일 식별자로 변경하면서 일어나는 반정규화
응용시스템의 오작동을 위한 칼럼 추가 변경 전 데이터를 저장하는 방식으로 사용할 때.

 

 

반정규화의 기법 - 관계 반정규화

기법 내용
중복 관계 추가 다른 데이터 검색을 좀 더 효율적으로 하기위해 추가적인 관계를 맺는 방식 

 

 

대량 데이터에 따른 성능


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

  • 대량의 데이터가 존재하는 테이블에 많은 트랜잭션이 발생하여 성능이 저하될 가능성이 큼.
  • 이를 예방하기 위해 수평/수직 분할 설계를 적용함. 
  • 수직분할은 정규화를 진행하여 분할 할 수 있음. 
  • 수평분할은 데이터를 월별 테이블을 통해 관리하는 등에 방식으로 분할 가능함.

 

  • 칼럼이 많아지게 되면 하나의 로우를 저장 시 여러 물리적인 디스크 공간에 저장될 가능성이 큼. 
  • 결국은 여러 개의 블록을 읽어 들이게 됨.  

데이터 블록

 

대용량 테이블에서 발생할 수 있는 현상

  • 로우체이닝 : 로우 길이가 너무 길어서 데이터 블록 하나에 데이터가 저장되지 못하고, 두 개 이상의 블록에 걸쳐 하나의 로우가 저장되는 현상
  • 로우 마이그레이션 : 데이터 블록에서 수정이 발생되면 수정된 데이터를 해당 데이터 블록에 저장하지 못하고 다른 블록의 빈 공간을 찾아 저장하는 방식.

 

HASH PARTITION

  • 지정된 해싱 알고리즘에 따라 적용되어 테이블이 분리되는 것을 말함. 
  • 설계자는 테이블에 데이터가 정확하게 어떻게 들어갔는지 알 수 없음. 
  • 성능향상을 위해 사용하며 데이터 보관 주기에 따라 쉽게 삭제하는 기능은 제공하지 않음. 

 

테이블 분할 절차

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

 

데이터베이스 구조와 성능


슈퍼 타입/서브타입 모델

  • 공통되는 부분을 슈퍼타입 엔티티로 모델링하고 다른 엔티티와 차이가 있는 속성에 대해서는 별도의 서브타입 엔티티로 구분.

 

슈퍼/서브타입 모델 변환

  • 슈퍼타입(Single 타입, All in One 타입)
    • 하나의 테이블로 구성하는 것을 말함.
  • 서브타입(Plus타입, Super+Sub 타입)
    • 서브타입 테이블만으로 구성하는 것을 말함.
    • 도출된 각각의 테이블은 슈퍼 엔티티가 가진 컬럼을 공통적으로 가지고 있어야 함. 
  • 개별타입(OneToOne타입, 1:1 타입)
    • 슈퍼, 서브타입 테이블을 모두 각각 구성하는 것을 말함. 

 

트랜잭션

  • 트랜잭션이 항상 슈퍼타입 기준으로 처리되는 경우 + 테이블이 개별 또는 서브타입으로 처리된 경우, UNION ALL 연산에 의해 성능저하 발생. (슈퍼타입 모델로 변경 필요)
  • 트랜잭션이 항상 서브타입 기준으로 처리되는 경우 + 테이블이 슈퍼타입 또는 개별타입으로 처리 되어진 경우, 비효율이 발생 가능(서브타입으로 변경 필요)
  • 트랜잭션이 항상 개별타입 기준으로 처리되는 경우 + 테이블이 슈퍼타입으로 되어 있는 경우, 항상 많은 데이터를 불러들여 성능저하 발생. (개별타입으로 변경 필요)

 

데이터 모델 변환 타입 비교

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

 

 

PK/FK 칼럼 순서와 성능

  • 테이블에 발생되는 트랜잭션 조회 패턴에 따라 PK/FK 컬럼의 순서를 조정해야 함.
  • 복합 식별자로 테이블을 구성하고 순서를 의식하지 하고 인덱스를 구성할 경우, 비효율이 발생.
  • 가능한 equal 조건에 맞도록 인덱스를 구성하는 것이 좋음. 
  • 인덱스가 없는 경우 테이블 전체를 읽어 들임. 
  • 테이블에 FK 제약조건이 없는 경우, 자동으로 인덱스를 생성하지 않는 문제가 발생함. 자주 이용되는 컬럼인 경우 의식적으로 인덱스 추가 필요.

 

분산 데이터베이스와 성능


개요

  • 여러 곳으로 분산되어 있는 데이터베이스를 하나의 가상 시스템으로 사용할 수 있도록 한 데이터베이스
  • 논리적으로 동일한 시스템에 속하지만 물리적으로 분산되어 있는 데이터들의 모음.

 

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

투명성 설명
분할 투명성(단편화) 하나의 논리적 Relation이 여러 단편으로 분할되어 각 단편의 사본이 여러 site에 저장
위치 투명성 사용하려는 데이터의 저장 장소 명시 불필요. 위치정보가 System Catalog에 유지되어야 함.
지역 사상 투명성 지역 DBMS와 물리적 DB 사이의 Mapping을 보장.
중복 투명성 DB 객체가 여러 site에 중복 되어 있는지 알 필요가 없는 성질
장애 투명성 트랜잭션 원자성 유지
병행 투명성 다수 트랜잭션을 동시 수행하여도 일관성을 유지

 

 

장단점

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

 

 

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

기법 설명
테이블 위치 분산 설계된 테이블의 위치를 각각 다르게 위치시키는 것
테이블 분할 분산 수평분할 / 수직분할 등으로 나누어진 테이블을 쪼개어 분산하는 방법
테이블 복제 분산 부분복제 / 광역복제 등으로 동일한 테이블을 다른 지역의 서버에 생성하는 방법
테이블 요약 분산 분석요약 / 통합요약을 통해 도출된 결과를 각각의 서버에서 관리하는 방법

'Backend > DataBase' 카테고리의 다른 글

SQLD 최적화  (0) 2023.11.08
SQL 활용  (0) 2023.11.07
SQL 기본  (1) 2023.11.07
SQL vs NoSQL  (1) 2023.11.03
데이터 모델의 이해  (0) 2023.10.29