CERTIFICATION/SQLD

[SQLD/데이터 모델과 성능]2-4. 대량 데이터에 따른 성능

써머레인 2024. 2. 27. 21:52

2. 데이터 모델과 성능

2-4. 대량 데이터에 따른 성능

(1) 성능 저하 원인

  • A 한 테이블에 데이터 대량 집중        : 테이블 너무 커짐 ⇒ 효율성 ↓ 디스크 I/O ↑
  • A 한 테이블에 여러 컬럼 존재            : 데스크 점유량 ↑ ⇒ 디스크 읽기 I/O ↑
  • B 대량 데이터 처리되는 테이블         : SQL문에서 데이터 처리를 위한 I/O ↑ , 인덱스 구성 
  • B 대량 데이터가 한 테이블에 존재     : 인덱스 크기 ↑ 로 인한 성능 저하
  • 컬럼이 많아질 경우                            : 로우체이닝, 로우마이그레이션 발생

 


(2) 해결 방안

  • A 한 테이블에 많은 컬럼 ⇒ 수직분할
    수직분할 : 컬럼 단위로 분할하여 I/O를 줄임
  • B 대량 데이터 저장 문제 ⇒ 파티셔닝 or PK에 의한 테이블을 분할
    수평분할 : 로우 단위로 분할하여 I/O를 줄임

 


(3) 로우 체이닝과 로우 마이그레이션

  • 로우 체이닝
    - 행 길이가 길어서, 데이터블록 하나에 데이터를 모두 저장하지 않고,
      두 개 이상의 블록에 걸쳐서 하나의 로우를 저장하는 형태 (한 로우를 여러 체인처럼) 
    - ⇒ 1:1로 테이블을 분리하면 ⇒ 디스크 I/O가 줄어 ⇒ 조회 성능 향상
  • 로우 마이그레이션
    - 데이터블록에서 수정 발생 시, 수정된 데이터를 해당 블록에 저장하지 못하고
      다른 블록에 빈 공간을 찾아 저장하는 방식
  • 파티셔닝
    - 한 테이블에 많은 데이터가 저장되면, 테이블 아무리 쪼개도 성능이 저하됨
    - ⇒ 논리적으로는 하나의 테이블이지만, 물리적으로는 여러 개의 테이블로 분리된 형태

 


(4) 수직/수평 분할 절차

  • 데이터 모델을 먼저 완성 
  • DB 용량 산정
  • 대량 데이터가 처리되는 테이블에 대해 트랜잭션 처리 패턴 분석
  • 컬럼 or 로우 단위로 집중화된 처리가 발생하는지 분석해 테이블 분리