SQLD 학습 (2-4 대량 데이터에 따른 성능)

제우민·2022년 8월 23일
0
post-thumbnail

대량 데이터 발생에 따른 테이블 분할 개요

  • 대량의 데이터가 존재하는 테이블에 많은 트랜잭션이 발생하여 성능이 저하되는 테이블 구조에 대해 수평/수직 분할 설계를 통해 성능 저하를 예방할 수 있음
  • 테이블의 데이터는 Block 단위로 디스크에 저장된다.

  • 칼럼이 많아지게 되면 하나의 로우를 저장 시 물리적인 디스크에 여러 블록에 데이터가 저장될 가능성이 높아짐. 즉, 하나의 행을 읽더라도 여러 개의 블록을 읽어야 하고 자연스레 해당 SQL문의 Block I/O가 많아짐

  • 로우 체이닝
    로우 길이가 너무 길어서 데이터 블록 하나에 데이터가 모두 저장되지않고 두 개 이상의 블록에 걸쳐 하나의 로우가 저장되어 있는 형태

  • 로우 마이그레이션
    데이터 블록에서 수정이 발생하면 수정된 데이터를 해당 데이터 블록에서 저장하지 못하고 다른 블록의 빈 공간을 찾아 저장하는 방식

    수직분할

    수평분할

  • RANGE PARTITION 적용
    요금 테이블에 PK가 요금일자 + 요금번호로 구성되어 있고 데이터 건수가 1억2천만 건인 대용량 테이블의 경우, 하나의 테이블로는 너무 많은 데이터가 존재하므로 인해 성능이 느린 경우에 해당한다.
    요금의 특성상 항상 월단위로 데이터 처리를 하는 경우가 많으므로 PK인 요금일자의 년+월을 이용하여 12개의 파티션 테이블생성함
    데이터 보관주기에 따라 테이블에 데이터를 쉽게 지우는 것이 가능하므로 데이터보관주기에 따른 테이블 관리가 용이

  • LIST PARTITION 적용
    고객 테이블에 데이터가 1억 건이 있는데 하나의 테이블에서 데이터를 처리하기에는 SQL문장의 성능이 저하되어 지역을 나타내는 사업소코드별로 LIST PARTITION을 적용한다. LIST PARTITION은 대용량 데이터를 특정 값에 따라 분리 저장할 수는 있으나 RANGE PARTITION과 같이 데이터 보관 주기에 따라 쉽게 삭제하는 기능은 제공될 수 없음

  • HASH PARTITION 적용
    HASH PARTITION은 지정된 HASH 조건에 따라 해싱 알고리즘이 적용되어 테이블이 분리되고 설계자는 테이블에 데이터가 정확하게 어떻게 들어갔느지 알 수없음
    성능 향상을 위해 사용하며 데이터 보관주기에 따라 쉽게 삭제하는 기능은 제공될 수 없다

profile
Work hard

0개의 댓글