새소식

Study/Classes

[SQLD] 2-2. 대량 데이터에 따른 성능

  • -
728x90

패스트캠퍼스 강의와 이기적 기본서를 기반으로 공부합니다. 

1. 대량 데이터 발생에 따른 테이블 분할

  •  대량의 데이터가 존재하는 테이블에 많은 트랜잭션이 발생함
  • 수평/수직분할 설계를 통해 성능 저하 예방 가능
  • 테이블의 데이터는 block 단위로 디스크에 저장됨 - 오라클 기준 block 하나에는 8192 byte (8k)

 

  • 수직분할: column 단위로 분할하여 I/O 감소
  • 수평분할: row 단위로 분할하여 I/O 감소

 

대용량 테이블에서 발생할 수 있는 현상

  • 로우 체이닝 Row Chaining: row 길이가 너무 길어서 두 개 이상의 블록에 걸쳐 하나의 row가 저장된 형태
  • 로우 마이그레이션 Row Migration: 데이터 블록에서 수정이 발생하면 수정된 데이터를 해당 데이터 블록에서 저장하지 못하고 다른 블록의 빈 공간을 찾아 저장하는 방식 

 두 가지 현상이 발생하면 많은 블록에 데이터 저장 → 데이터 조회 시 절대적인 block I/O의 횟수가 많아짐 → disk I/O 가능성 높아짐 →성능이 급격히 저하

2. 수직분할

한 테이블에 많은 수의 칼럼을 가지고 있는 경우, 특정 칼럼을 쪼개서 엔터티를 분리하는 것

출처: t.ly/sfWA

  • 자주 사용되는 컬럼을 분리시켜 따로 저장하면 조회 시 디스크 I/O가 줄어든다.

3. 수평분할

출처: t.ly/sfWA

하나의 테이블에 있는 값을 기준으로 분할함

파티션 기법을 사용하면 논리적으로는 하나의 테이블이지만 여러 개의 데이터 파일에 분산되어 저장됨

장점

  • 데이터 조회 시 액세스 범위가 줄어들어 성능 향상
  • 데이터 분할되어 있기 때문에 I/O 성능 향상
  • 각 파티션을 독립적으로 백업 및 복구 가능

RANGE partition

  • 데이터 값의 범위를 기준으로 파티션을 수행
  • e.g 월 단위 데이터 관리
  • 데이터 보관 주기에 따른 테이블 관리가 용이 

LIST partition

  • 특정 값에 따라 분리 저장
  • e.g 지역 별 고객 데이터 관리 - 서울, 인천, 제주 등

HASH partition

  • 지정된 hash 조건에 따라 해싱 알고리즘 적용하여 테이블 분리
  • 설계자는 테이블에 데이터가 정확하게 어떻게 들어갔는지 알 수 없음

COMPOSITE partition

  • 범위와 해시를 복합적으로 사용하여 파티션을 수행
728x90
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.