Database/SQLD 시험 준비

챕터02. 데이터 모델과 성능 - 2.4 대량 데이터에 따른 성능

parkes811 2023. 8. 26. 16:10
대량 데이터발생에 따른 테이블 분할 개요
  1. 테이블을 조회할 떄 대량의 데이터가 존재하는 테이블에 많은 트랜잭션이 발생하여 성능이 저하되는 테이블 구조에 대해 수평/ 수직 분할 설계를 통해 성능 저하를 예방할 수 있습니다.

2. 오라클 테이블의 데이터는 Block(8Kb) 단위로 디스크에 저장됩니다.

 - 컬럼이 많아지게 되면 하나의 로우를 저장 시 물리적인 디스크에 여러 블록에 데이터가 저장될 가능성이 높아집니다.

 - 그래서 하나의 행(로우)을 읽더라도 여러 개의 블록을 읽어야 하기 때문에 SQL문의 Block I/O 가 많아집니다.

- 오라클 DB는 데이터를 저장하는 Disk와 사용자 사이에 자주 사용하는 데이터에 대한 버퍼 캐시를 두어 Block I/O 횟수를 줄여 속도를 향상 시킵니다. 하지만 이 때, 버퍼 캐시 내에 데이터가 존재하지 않으면 Disk에서 I/O를 하기 때문에 성능이 저하 됩니다.

 

  • 대용량 테이블에서 발생할 수 있는 현상 
현상명 설명
Row Chaining 로우의 길이가 너무 길어서 데이터 블록 하나에 데이터가 모두 저장되지 않고 두 개 이상의 블록에 걸쳐 하나의 로우가 저장되어 있는 형태
Row Migration 데이터 블록에서 수정이 발생하면 수정된 데이터를 해당 데이터 블록에서 저장하지 못하고 다른 블록의 빈 공간을 찾아 저장하는 방식

- Row Chaining과 Row Migration이 발생하여 많은 블록에 데이터가 저장되면 데이터 조회 시 절대적인 Block I/O 횟수가 많아지게 됩니다.

- Block I/O 횟수가 많아지면 다른 Disk I/O를 할 가능성이 높아져서 성능이 급격하게 저하 됩니다.

 


 

  • 한 테이블에 과도한 수의 컬럼을 가지고 있는 경우 

 

  • 수직 분할 적용 테이블 예시

- 전자출판유형에 대한 트랜잭션이 독립적으로 발생이 되는 경우가 많아 1:1 관계로 수직분할

- 대체제품에 대한 유형의 트랜잭션이 독립적으로 발생되는 경우가 많아 1:1 관계로 수직분할

- 분리된 테이블은 컬럼의 수가 적으므로 Row Migration과 Row Chaining이 많이 줄어들 수 있습니다.

- 도서정보 테이블 조회시에도 Disk I/O가 줄어들어 성능이 향상 됩니다.

 

  • 월 범위에 따른 수평분할 적용 테이블 예시

- 요금테이블에 PK가 요금일자 + 요금번호로 구성되어 있고, 데이터 건수가 1억 2천만 건인 대용량 테이블 경우

- 하나의 테이블에 많은 데이터가 존재하므로 성능이 느린 경우 Range Partition을 적용할 수 있습니다.

- 요금의 특성상 항상 월 단위로 데이터 처리를 하는 경우가 많아, PK인 요금일자의 년 + 월을 이용하여 12개의 파티션 테이블을 생성하였습니다.

- 데이터보관 주기에 따라 테이블을 쉽게 지우는 것이 가능하므로 데이터보관 주기에 따른 테이블 관리가 용이합니다.

 

  • 고객 위치에 따른 수평분할 적용 테이블 예시

- 고객 테이블에 데이터가 1억 건이 있는데 하나의 테이블에서 데이터를 처리하기에는 SQL 문장의 성능이 저하되어 지역을 나타내는 사업소 코드별로 List Partition을 적용했습니다.

- List Partition은 대용량 데이터를 특정 값에 따라 분리 저장할 수 있습니다.

- 하지만 Range Partition과 같이 데이터 보관 주기에 따라 쉽게 삭제하는 기능은 제공할 수 없습니다.

 

  • Hash Partition 적용

- Hash Partition은 지정된 HASH 조건에 따라 해싱 알고리즘이 적용되어 테이블이 분리되는 Partition 분할 기법입니다.

- 설계자는 테이블에 데이터가 정확하게 어떻게 들어갔는지 알 수 없습니다.

- 성능향상을 위해 사용하여 데이터 보관 주기에 따라 쉽게 삭제하는 기능은 제공할 수 없습니다.

 

  • 테이블에 대한 수평 / 수직 분할의 절차
  1. 데이터 모델링을 완성
  2. 데이터베이스 용량 산정
  3. 대량 데이터가 처리되는 테이블에 대해서 트랜잭션 처리 패턴 분석
  4. 컬럼 단위로 집중화된 처리가 발생하는지, 로우 단위로 집중화된 처리가 발생되는지 분석하여 단위로 테이블을 분리하는 것을 검토