📔설명

성능 데이터 모델링, 정규화, 반정규화, 대량 데이터, 데이터베이스 구조, 분산 데이터베이스, 트랜잭션, NULL에 대해 알아보자!


👍🏻성능 데이터 모델링

성능 데이터 모델링 정의

성능 데이터 모델링 : 데이터베이스의 성능을 향상시키기 위해 설계 단계 부터 성능과 관련된 사항들이 모델링에 반영 될 수 있다.
ex) 정규화, 반정규화, 테이블 통합, 테이블 분할 등

  • 데이터 증가가 빠를수록 성능저하에 따른 성능개선비용 증가
  • 데이터모델은 성능을 튜닝하면서 변경될 수 있는 특징
  • 분석/설계단계에서 성능을 고려한 데이터모델링 수행 시, 성능 저하에 따른 Rework비용을 최소화 가능



성능 데이터 모델링 순서

  1. 데이터 모델에 맞게 정규화 수행
  2. 데이터베이스의 용량트랜잭션 유형을 파악하여 성능 저하 일으키는 부분 검토 (용량 산정 : 트랜잭션 유형 분석 자료가 됨)
  3. 용량트랜잭션에 맞게 반정규화 수행
  4. 성능 향상을 위한 이력모델 조정, PK/FK조정(인덱스 반영, 칼럼 순서 조정, FK 인덱스 생성), 슈퍼/서브타입 조정 수행(물리적인 데이터 모델링 시)
    => 성능 저하 방지를 위해 상속받은 FK컬럼에도 별도의 인덱스 필요
    => 데이터모델에서는 관계를 연결하고, DB에서 FK제약조건 생성생략하는 경우에도 데이터의 조인관계필요하므로 FK에 인덱스 생성 필요
  5. 데이터 모델의 성능 검증

🧮정규화

정규화(Normalization) : 데이터 정합성(정확성+일관성 유지, 보장)을 위해 엔터티를 작은 단위로 분리하는 과정

  • 입력, 수정, 삭제성능 향상
  • 조회 성능 저하 발생 가능
  • 데이터에 대한 중복성 제거
  • 정규화 할 수록 엔터티 증가
  • 데이터의 무결성 보장


제1정규형

  • 모든 속성은 반드시 하나의 값만 가져야 한다.
    ex) 주소가 시,동,상세주소 등으로 나뉘는 걸 한 속성에 저장하면 안됨.
    => 하나의 속성이 다중값을 가질 때, 어플리케이션에서 데이터를 꺼낼 때마다 split을 사용해야 하는 번거로움 발생

  • 유사한 속성이 반복되는 경우도 1차 정규화 대상
    ex) dang 포토폴리오 사이트를 사이트1, 사이트2, 사이트3으로 저장하기 보단, 각각의 사람에 대한 사이트 테이블을 생성하는 것이 효과적.
    => 한 사람은 사이트1, 사이트2까지 있고, 다른사람은 사이트3까지 있으면 공간의 낭비가 발생

1차 정규화

  1. 속성값이 하나가 되도록 엔터티 분리
  2. 유사한 속성반복되지 않도록 엔터티 분리


제2정규형

  • 엔터티의 모든 일반속성은 반드시 모든 주식별자에 종속되어야 한다.

주식별자가 단일식별자가 아닌 복합식별자인 경우, 일반속성이 주식별자의 일부에만 종속될 수 있는데, 이 경우 문제 발생.

위의 음료명 일반 속성은, 주식별자(주문번호, 음료코드) 중 음료코드에만 종속되어있다.

2차 정규화

  1. 주식별자에 대한 부분종속이 없도록 엔터티 분리


제3정규형

  • 주식별자가 아닌 모든 속성 간에는 서로 종속될 수 없다.

일반속성소속사명이 다른 일반속성인 소속사코드에 종속되어있다.
(이행함수종속)

3차 정규화

  1. 다른 일반속성에 종속되지 않도록 엔터티를 분리한다.



제4정규형

다중값 종속성 제거



주의사항

  • 지나친 정규화는 오히려 성능 저하



삽입, 삭제, 갱신 이상

  • 삽입 이상 : 불필요한 정보를 함께 저장하지 않고서는 어떤 정보를 저장하는 것이 불가능
  • 삭제 이상 : 필요한 정보를 함께 삭제하지 않고서는 어떤 정보를 삭제하는 것이 불가능 (삭제되면 안되는 데이터까지 덩달아 삭제)
  • 갱신 이상 : 중복된 데이터 중에 일부만 갱신할 시 데이터의 불일치가 발생

📚반정규화

반정규화(De-Normalization) : 데이터의 조회 성능 향상을 위해 데이터의 중복을 허용 하거나 데이터를 그룹핑하는 과정

정규화된 엔터티, 속성, 관계에 대해 시스템의 성능 향상개발, 운영의 단순화를 위해 중복, 통합, 분리등을 수행하는 데이터 모델링 기법.
=> 데이터를 조회할 때 디스크 I/O량이 많아서 성능이 저하되거나 경로가 너무 멀어 조인으로 인한 성능 저하가 예상되거나 컬럼 계산시 성능이 저하될 것을 예상하여 반정규화

  • 조회 성능 향상
  • 입력, 수정, 삭제 성능 저하
  • 데이터 정합(정확+일관)성 이슈 발생
  • 정규화 끝난 후 거치게 되며 존재
  • 데이터 무결성 저해
  • 여러 번의 조인으로 인해 성능 저하 방지
  • 모델링의 마지막 단계 에서 성능향상을 목적으로 반정규화
  • 런타임에 컬럼 계산으로 속도 저하 우려 시 반정규화
  • 확실히 반정규화 시 조회 성능이 좋아지는 상황에서만 반정규화 하는 것이 바람직
  • 반정규화 고려는 반정규화 정보에 대한 재현의 적시성으로 판단
    ex) 다수 테이블에 대한 다량의 조인이 불가피하므로 데이터 제공 적시성 확보를 위해 필수 반정규화 대상


테이블 반정규화

1.테이블 병합

JOIN이 필요한 경우가 많아, 테이블 통합이 성능 측면에서 유리할 경우 고려
1:M 관계 테이블 병합의 경우, 1쪽에 해당하는 엔터티의 속성 개수가 많으면 병합 시 중복데이터가 많아지므로 테이블 병합에 적절 X
테이블의 관계가 강결합이어서 같이 조회되는 경우가 대부분일 경우, 비정규화 고려

  • 1:1 관계 테이블 병합 : 부작용 적고 판단 수월
    ex)회원, 회원상세 테이블 병합
  • 1:M 관계 테이블 병합 : 1쪽에 해당하는 테이블 속성 수 적어야 유리
    ex)주문(1), 주문상세(M) 테이블 병합(중복된 데이터 생김). M기준 병합
  • 슈퍼 서브 타입 테이블 병합
    ex)사원에는 기술직 사원, 관리직 사원 존재. 기술직 사원과 관리직 사원은 공통 속성과 개별 속성을 가지고 있음. 공통 속성 조회 빈도가 개별 속성 조회 빈도수보다 높을 때 공통 속성개별 속성을 분리하여 슈퍼-서브 타입으로 설계.

2.테이블 분할

  • 테이블 수직 분할(속성 분할) : 엔터티의 일부 속성을 별도의 엔터티로 분할 (1:1 관계 성립)
    자주 사용하는 속성이 아니거나 대부분의 인스턴스가 해당 속성값을 NULL로 갖고 있을 때 고려(속성 사용 빈도 or null 여부)
    수직 분할 시 한개의 블록더 많은 인스턴스를 저장할 수 있게 됨
    ex)회원의 배우자명, 배우자 핸드폰 번호는 별도의 엔터티로 분할

  • 테이블 수평 분할(인스턴스 분할, 파티셔닝) : 엔터티의 인스턴스를 특정 기준으로 별도의 엔터티로 분할(파티셔닝)
    수평 분할 시 관계가 없는 다수의 테이블이 생성
    파티셔닝 기법이용
    ex) 배달(2022), 배달(2023)는 파티션 기능을 이용해 배달일자에 따라 물리적으로 데이터를 분리.


3.테이블 추가

  • 중복 테이블 추가 : 데이터의 중복을 감안하더라도 성능상 반드시 필요하다고 판단 시 별도의 엔터티 추가
    ex) 특정 범위의 많은 데이터를 자주 처리해야 하는 경우
  • 통계 테이블 추가
    ex) 각 지점 별 월매출 통계치를 저장하기 위한 테이블.
  • 이력 테이블 추가
    ex) 상품의 가격이 변경된 이력을 저장하기 위한 테이블.
  • 부분 테이블 추가
    ex) 회원에게 이벤트 메일 발송을 위해 메일 발송에 필요한 정보만 부분 테이블로 생성

=>단순히 같은 데이터를 여러 테이블 저장시 데이터 정합성에 위배


컬럼 반정규화

1.중복 컬럼 추가

  • 업무 프로세스상 JOIN이 필요한 경우가 많아 컬럼을 추가하는 것이 성능 측면에서 유리할 경우

2.파생 컬럼 추가

  • 프로세스 수행 시 부하가 염려되는 계산값을 미리 컬럼으로 추가하여 보관하는 방식
    ex) 상품 재고, 프로모션 적용 할인가

3.이력 테이블 컬럼 추가

  • 대량의 이력 테이블을 조회할 때 속도가 느려질 것을 대비하여 조회 기준이 될 것으로 판단되는 컬럼을 미리 추가
    ex) 최신 데이터 여부

4.PK에 의한 컬럼 추가


5.응용시스템 오작동을 위한 칼럼 추가



관계 반정규화(중복관계 추가)

  • 업무 프로세스상 JOIN이 필요한 경우가 많아 중복 관계를 추가하는 것이 성능 측면에 유리할 경우
  • 데이터 무결성을 깨뜨릴 위험성 없이 데이터 처리 성능 향상 가능



반정규화 절차

1.반정규화 대상 조사

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

2.다른 방법유도 검토

  • 테이블 : 지나치게 많은 조인이 걸려 데이터를 조회하는 작업이 기술적으로 어려울 경우
  • 클러스터링 적용 : 대량의 데이터 처리부분처리에 의해 성능이 저하되는 경우 클러스터링을 적용
  • 인덱스 조정 : 대량의 데이터 처리부분처리에 의해 성능이 저하되는 경우 인덱스 조정
  • 파티셔닝 기법 적용 : 대량의 데이터PK의 성격에 따라 부분적인 테이블로 분리할 수 있다.
    =>파티셔닝 : 하나의 테이블에 많은 양의 데이터가 저장되면, 인덱스를 추가하고 테이블을 몇 개로 쪼개도, 성능이 저하되는 경우가 있다. 이때 물리적으로는 여러 개의 테이블로 분리하고, 논리적으로는 하나의 테이블로 하여 데이터 액세스 성능도 향상 시키고, 데이터 관리 방법도 개선할 수 있도록 테이블에 적용하는 기법
  • 응용애플리케이션 : 로직 구사 방법을 변경

3.반정규화 적용

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



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

  • 개별로 발생되는 트랜잭션은 개별 테이블
    --One To One Type : 슈퍼타입/서브타입 개별 테이블 도출.
    테이블의 수가 많아 조인이 많이 발생, 관리 어려움

  • 슈퍼+서브타입 발생 트랜잭션은 슈퍼+서브타입 테이블로 구성
    --Plus Type : 슈퍼타입/서브타입 테이블로 도출.
    조인이 발생하고 관리가 어려움

  • 전체를 하나로 묶어 트랜잭션이 발생할 경우 하나의 테이블로 구성
    --Single Type : 슈퍼타입과 서브타입을 하나의 테이블로 도출.
    조인 성능이 좋고 관리가 편하지만, IO성능 나쁨


💱트랜잭션

트랜잭션(transaction) : 데이터를 조작하기 위한 하나의 논리적인 작업 단위

  • 데이터 모델로 표현 가능
  • 데이터트랜잭션 범위로 묶일 수 있음
  • 하나의 커밋 단위로 묶어야 함

❓NULL

NULL : 존재하지 않음. 값을 모름

  • 다른 속성과의 연산 : 결과값 NULL
  • 다른 인스턴스와의 연산 : NULL값 제외(count(*)엔 포함)
  • 데이터 집계 시 NULL은 집계 대상에서 제외
  • NULL 포함 사칙연산 결과는 항상 NULL
  • Oracle : ''null로 인식
  • SQL Server : ''공백문자로 인식

💾대량 데이터에 따른 성능

컬럼 수가 많은 테이블

  • 로우체이닝(한 행의 데이터 크기가 블록 데이터 저장 공간보다 클 때 발생) 발생할 정도로, 한 테이블에 많은 컬럼 존재시, 조회 성능 저하 발생.
    트랜잭션이 접근하는 컬럼 유형을 분석하여 1:1(자주 접근하는 컬럼들과 상대적으로 접근 빈도가 낮은 컬럼들)로 테이블을 분리하면 디스크 I/O가 줄어들어 조회 성능 향상

+) 로우 마이그레이션 : 데이터가 블록의 빈 공간에 들어갈 수 없을 정도로 커진 경우. 로우 마이그레이션 발생 시 변경으로 인해 증가된 데이터 뿐만 아니라 전체 행의 데이터가 다른 블록으로 복사됨. 즉, 해당 위치를 갖고 있는 인덱스 등을 변경해야 함


🔩데이터베이스 구조와 성능

PK순서 결정 기준은 인덱스 정렬구조를 이해한 상태에서 인덱스를 효율적으로 이용할 수 있도록 PK순서 지정 필요.

인덱스 효율

  • 여러개의 속성하나의 인덱스로 구성된 경우, 앞쪽에 위치한 속성의 값이 비교자로 있어야 좋은 효율
  • 앞쪽에 위치한 속성 값이 가급적 = 아니면 최소한의 범위 Between, <>가 들어와야 인덱스 이용 가능

📨분산 데이터베이스와 성능

분산 데이터베이스 정의

  • 데이터가 여러 지역에 분산되어 있지만, 하나의 DB처럼 사용가능

<->GSI(Global Single Instance) : 통합 데이터베이스, 분산 DB와 대치


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

1.장점

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

2.단점

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



분산 데이터베이스 환경 시 효율성 증대

  • 공통코드, 기준정보마스터 데이터는 분산 데이터베이스에 복제 분산 적용
    (한 곳에 두고 운영 시 원격지에서의 접근이 빈번할 수록 실시간 업무처리에 대해 좋은 성능을 얻기가 어려움)
  • 거의 실시간 업무적인 특성 가질 경우 분산 DB 사용
  • 백업 사이트 구성 시 간단하게 분산 기능 적용
profile
DBA 신입 지망생

0개의 댓글