[SQLD 암기] 데이터 모델과 성능

younghyun·2023년 6월 9일
0

SQLD

목록 보기
2/18

성능 데이터 모델링

데이터베이스 성능 향상을 목적으로 설계 단계의 데이터 모델링 때부터 성능 관련된 사항이 데이터 모델링에 반영되도록 하는 것

성능 데이터 모델링 수행 절차

  1. 정규화
  2. DB 용량 산정
  3. 트랜잭션 유형 파악
  4. 반정규화
  5. 이력모델의 조정, PK/FK 조정, 슈퍼타입/서브타입 조정
  6. 성능관점에서 데이터 모델을 검증

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

PK/FK 컬럼 순서조정, FK인덱스 생성 등은 성능 향상을 위한 데이터 모델링 작업에 중요한 요소이다
이력데이터는 시간에 따라 반복적으로 발생돼서 대량일 가능성이 높아 성능을 고려하여 컬럼 등을 추가하도록 설계

정규화

  1. 제 1 정규형: 모든 속성 값이 원자 값
    • 1차 정규화: 중복값 제거, 새로운 테이블 추가, 1:M 관계
  2. 제 2 정규형: 기본키에 완전 종속
    • 2차 정규화: PK가 2개 이상의 속성일 때 종속성 제거
  3. 제 3 정규형: 일반 컬럼에 의존하는 컬럼이 존재
    • 3차 정규화: 기본키에 의존하지 않고 일반 컬럼에 의존하는 컬럼 제거

반정규화

시스템의 성능향상과 개발과 운영의 단순화를 위해 중복, 통합, 분리 등을 수행하는 데이터 모델링 기법

반정규화 고려 시 판단 요소

다량 데이터 탐색의 경우 파티션, 데이터 클러스터링 등 다양한 기법으로 성능 개선 가능
처리가 반복적이고 빈번하면 반정규화 고려

테이블과 컬럼의 반정규화

  • 테이블 병합: 1:1, 1:M 관계 테이블 병합
  • 테이블 분할: 디스크 IO 분산 처리, 디스크 IO 및 데이터 접근 효율성을 높임
  • 테이블 추가
  • 중복 컬럼 추가: 조인을 감소
  • 파생 컬럼 추가: 성능저하 예방을 위해 미리 계산
  • 이력테이블 컬럼 추가: 최근 값 조회 시 성능저하 예방을 위해
  • PK에 의한 컬럼 추가: 성능향상을 위해 일반속성으로 포함
  • 응용 시스템 오작동을 위한 컬럼 추가: 이전 데이터를 임시적으로 중복하여 보관

반정규화 대상에 대해 다른 방법으로 처리

  • 지나치게 많은 조인 -> 뷰
  • 대량 데이터 처리나 부분 처리 -> 클러스터링, 파티셔닝, 인덱스 조정

컬럼수가 많은 테이블

  • 디스크 IO가 대량으로 발생, 성능 저하
  • 접근 빈도에 따라 컬럼을 구분해서 1:1 테이블 분리
  • 컬럼 위치 조정으로 NULL이 존재하는 컬럼을 뒤로 모아서 로우의 길이 감소시킬 수 있음
  • NULL 상태이던 컬럼에 데이터가 채워지면 더 많은 로우 체인이 발생할 수 있어서 바람직하지 않음

파티셔닝

데이터 엑세스 성능을 향상시키기 위해 적용하는 방법 중 하나이다. 논리적으로는 하나의 테이블이지만 물리적으로는 여러 개의 테이블로 분리하여 데이터 엑세스 성능도 향상시키고, 데이터 관리방법도 개선할 수 있도록 테이블에 적용하는 기법이다.

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

트랜잭션에 따라 알맞게 구성하기

  • 트랜잭션 일괄 처리: 하나의 테이블로 구성

  • 트랜잭션 슈퍼타입+서브타입에 대해 발생: 슈퍼타입+서브타입으로 테이블 구성

  • 트랜잭션 개별 처리: 개별 테이블로 구성

  • 쓸데없이 테이블을 하나로 통합하면 많은 양의 데이터가 집약되어 있어 성능이 저하될 수 있다.

  • 쓸데 없이 개별로 유지하면 UNION 연산에 의해 성능이 저하될 수 있다.

PK/FK 컬럼

  • FK는 반드시 인덱스 생성, 조회 조건 고려하여 인덱스 컬럼 순서를 효율적으로 생성해야 함
  • 트랜잭션에 의해 거의 활용되지 않을 때만 FK 인덱스를 지우는 방법이 적절

분산 데이터베이스

  • 실시간 업무적인 특성을 가지고 있을 때 분산 데이터베이스를 사용하여 구성
  • 공통코드, 기준정보 등 마스터 데이터는 분산 데이터베이스에 복제분산을 적용
profile
🌱 주니어 백엔드 개발자입니당

0개의 댓글