[SQLD] #4. 데이터 모델과 성능 - 대량 데이터/데이터베이스 구조

김정인·2021년 1월 11일
0

SQLD

목록 보기
4/16

대량 데이터에 따른 성능

💡 블록

    테이블의 데이터 저장 단위

💡 대량 데이터 발생

    대량의 데이터가 하나의 테이블에 집약되어 있거나 하나의 하드웨어 공간에 저장되어 있으면 성능 저하
   테이블에 많은 컬럼이 존재할 경우 데이터 디스크가 여러 블록에 존재, I/O 성능 저하

  • 로우 체이닝(Row Chaining): 행 길이가 너무 길어 여러 블록에 걸쳐 저장되는 현상
  • 로우 마이그레이션(Row Migration): 데이터 블록에서 수정이 발생하면 수정된 데이터를 해당 데이터 블록에서 저장하지 못하고 다른 블록의 빈 공간을 찾아 저장

💡 테이블 분할

  • 수직분할: 칼럼 단위로 테이블을 분할하여 I/O를 감소. 너무 많은 수의 칼럼이 있는 경우 사용
  • 수평분할: 행 단위로 테이블을 분할하여 I/O를 감소

💡 파티셔닝

    테이블 수평분할 기법. 논리적으로는 하나의 테이블이지만 물리적으로 여러 데이터 파일에 분산 저장해 데이터 조회 범위를 줄이고 성능 향상

  • Range Partition: 데이터 값의 범위를 기준으로 분할
    대상 테이블이 날짜 또는 숫자값으로 분리 가능한 경우 데이터 보관 주기에 따른 테이블 관리 용이
  • List Partition: 지점, 사업소 등 핵심적인 코드값으로 PK가 구성되어 있는 경우 특정한 값을 기준으로 분할
  • Hash Partition: 해시 함수를 적용해 DBMS가 자동으로 분할

💡 테이블 수평/수직 분할 절차

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

데이터베이스 구조와 성능

💡 슈퍼/서브타입 모델

    속성을 할당하여 배치하는 수평 분할된 형태의 모델. 슈퍼타입은 공통 부분, 서브타입은 공통으로부터 상속받아 다른 엔티티와 차이가 있는 속성

  • 정확하게 업무를 표현 가능
  • 물리적 모델링 시 선택의 폭을 넓힐 수 있음
  • 1:1 타입(OneToOne type): 개별로 처리하는 트랜잭션에 대해 개별 테이블 구성, 슈퍼타입과 서브타입 각각 필요한 속성과 유형에 적합한 데이터만 가지도록 분리하여 1:1 관계를 갖도록 함
  • 슈퍼/서브 타입(Plus type): 슈퍼타입과 서브타입을 공통으로 처리하는 트랜잭션에 대해 슈퍼타입과 서브타입 각각의 테이블 구성
  • All in One 타입(Single type): 일괄 처리하는 트랜잭션에 대해 단일 테이블 구성

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

  • 조회 조건에 따라 인덱스를 처리하는 범위가 달라짐
  • PK의 순서를 인덱스 특징에 맞게 생성하지 않고 자동으로 생성하게 되면 테이블에 접근하는 트랜잭션이 비효율적인 인덱스에 의하여 인덱스를 넓은 범위로 스캔하거나 풀 스캔 유발
  • 여러 개의 속성이 하나의 인덱스로 구성되어 있을 때 앞쪽에 위치한 속성의 값이 비교자로 있어야 효율이 좋음
  • 앞쪽에 위치한 속성의 값은 ‘=’이나 최소한 ‘BETWEEN’ ‘<>’ 범위

데이터 전문가 지식포털 참고

0개의 댓글