체다의 기록

[SQLD] Chapter2. 데이터 모델과 SQL 1-4. 대량 데이터에 따른 성능 본문

STUDY

[SQLD] Chapter2. 데이터 모델과 SQL 1-4. 대량 데이터에 따른 성능

체다오니 2022. 10. 22. 23:53
  • 성능 저하 원인
원인 현상 결과
A 한 테이블에 데이터 대량 집중 테이블이 너무 커진다  - 효율성
- 디스크 I/O
A 한 테이블에 여러 컬럼 존재  데스크 점유량이 높아진다 - 디스크 읽기 I/O
B 대량 데이터 처리되는 테이블 - - SQL문에서 데이터 처리를 위한 I/O
- 인덱스 구성 
B 대량 데이터가 한 테이블에 존재 - - 인덱스 크기 증가로 인한 성능 저하
컬럼이 많아질 경우  - - 로우체이닝, 로우마이그레이션 발생

 

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

 

 

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

 

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

 

반응형