개주 훈련일지/📚 코살대 교본 학습

SQL) 대량 데이터에 따른 성능

lshfood2 2025. 12. 25. 19:10

[ 테이블 분할 개요 ]

대량의 데이터가 존재하는 테이블에

많은 트랜잭션이 발생하여 성능이 저하되는

테이블 구조는 수평/수직 분할 설계를 통해

성능 저하를 예방할 수 있다.

 

1) 수평 분할

2) 수직 분할

 

수평 분할

수평 분할은 행 단위로 분할하여

인풋/아웃풋을 감소시키는 방법이다.

 

만약 1년치 데이터가 대용량인 경우 월별로 분할하여 저장하면

특정월을 조회하는 경우 해당월만 조회하면 된다.

 

수직 분할

수직 분할은 칼럼 단위로 분할하여

I/O를 감소시키는 방법이다.

 

고객의 생년월일, 주소 등의 개인정보와

취미/특기 등의 기타정보를 별도로 저장할 수 있다.

I/O에 대한 추가 설명
- 테이블 내에 모든 행은 블록 단위로 저장
- 오라클 DBMS 기준 1개의 블록은 8.192바이트(=8KB)
- 칼럼이 많이지면 하나의 행 저장 시 물리적인 디스크에
  여러 블록에 거쳐 데이터가 저장될 가능성이 높아진다.
  (하나의 행을 읽더라도 여러 개의 블록을 읽어야 함)
- 특정 테이블에서 한 행의 용량이 8,193바이트라면
  하나의 행을 읽더라도 2개의 블록을 읽게 된다.
  (총 16,384바이트를 읽고 8,191 바이트는 버려짐)
- 자연스레 SQL 문의 블록 I/O 수가 많아져 성능 저하 발생

[ 성능 저하 현상 ]

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

로우 체이닝과 로우 마이그레이션이 있다.

 

블록 I/O의 횟수가 많아지면

디스크 I/O를 할 가능성도 높아진다. 

 

디스크 I/O는 특정 블록을 데이터베이스 내 메모리에서

찾을 수 없어서 디스크를 읽게 되는 상황이다.

 

디스크I/O는 고비용의 작업이므로 DBMS의

급격한 성능 저하를 유발한다.

 

▼ 로우 체이닝

로우 길이가 너무 길어서 데이터 블록 하나에 데이터가

모두 저장되지 않고, 2개 이상의 블록에 걸쳐

하나의 로우가 저장되어 있는 형태.

 

하나의 행을 읽을 때 2개 이상의 데이터 블록을

읽게 될 수 있는 것으로 절대적으로 읽어야 할

데이터 블록 수가 늘어나면서 성능이 저하된다. 

 

로우 마이그레이션

데이터 블록에서 수정이 발생하면 수정된 데이터를

해당 데이터 블록에서 저장하지 못하고,

다른 블록의 빈 공간을 찾아 저장하는 방식.

 

해당 현상이 일어나면서 하나의 행을 읽을 때

2개 이상의 데이터 블록을 읽게 된다.

 

로우 체이닝 현상과 마찬가지로 절대적으로 읽어야 할

데이터 블록 수가 늘어나면서 성능이 저하된다. 


[ 파티셔닝 ]

한 테이블에 많은 수의 칼럼 (성능 저하가 발생)

→ 수직 분할을 통해 해결 가능

 

한 테이블에 많은 수의 행 (성능 저하가 발생)

→ 수평 분할을 통해 해결 가능

 

수평 분할을 파티셔닝이라고 하며,

특정 기간으로 분할하는 것을 범위 파티셔닝

특정 값에 따라 분할하는 것은 리스트 파티셔닝이라고 한다.

 

이 외에도 주문번호나 주민등록번호와 같은 변별력 좋은

칼럼을 기준으로 테이블을 분할하는 해피 파티셔닝 기법도 있다.


[ 테이블 수평/수직 분할 절차 ]

1) 데이터 모델링 완성

2) 데이터베이스(각 테이블) 용량을 산정

3) 대량의 데이터가 처리되는 테이블에 대해서
    트랜잭션 처리 패턴을 분석한다.
4) 칼럼 단위로 집중화된 처리가 발생하는지,
    로우 단위로 집중화된 처리가 발생되는지 분석하여
    처리 작업이 집중화된 단위로 테이블 분리 검토