으쌰으쌰💪/SQL

데이터 모델과 성능 - 대량 데이터에 따른 성능

_꼬마돌 2023. 8. 17. 00:51
반응형

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

- 대량의 데이터가 존재하는 테이블에 많은 트랜잭션이 발생하여 성능이 저하되는 테이블 구조에 대해 수평/수직 분할 설계를 통해 성능 저하를 예방할 수 있다.

수직분할

- 칼럼(column, 열) 단위로 분할하여 I/O를 감소시킴

수평분할

- 로우(row, 행) 단위로 분할하여 I/O를 감소시킴

 

테이블의 데이터는 Block단위로 디스크에 저장된다. 

- 칼럼이 많아지게 되면 하나의 로우를 저장 시 물리적인 디스크에 여러 블록에 데이터가 저장될 가능성이 높아진다. 즉, 하나의 행을 읽더라도 여러 개의 블록을 읽어야 한다. => 해당 SQL문의 Blcok I/O량의 증가

 

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

- 로우 체이닝 (Row Chaining)

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

- 로우 마이그레이션 (Row Migration)

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

 

=> 로우 체이닝과 로우 마이그레이션이 발생하여 많은 블록에 데이터가 저장되면 데이터 조회시 절대적인 Block I/O의 횟수가 많아지게 된다. => Disk I/O의 가능성 ↑ => 성능의 급격한 저하

 

한 테이블에 많은 수의 칼럼을 가지고 있는 경우, SELECT시 Block I/O의 수가 많아진다. => 수직분할을 통해 성능을 향상시킬 수 있다. 

 

수평분할

수평분할에는 세 가지 방법이 있다.

- Range Partition

월단위로 데이터를 처리하는 경우 12개의 파티션 테이블을 생성하여 관리하기 좋다. 데이터 보관주기에 따라 테이블의 데이터를 쉽게 지우는 것이 가능하므로 데이터 보관주기에 따른 테이블 관리에 용이하다. 

 

- List Partition

대용량 데이터를 특정 값에 따라 분리 저장할 수는 있으나 Range Partition과 같이 데이터 보관 주기에 따라 쉽게 삭제하는 기능은 제공될 수 없다. 

 

- Hash Partition

지정된 Hash 조건에 따라 hashing 알고리즘이 적용되어 테이블을 분리한다. 설계자는 테이블의 데이터가 정확하게 어떻게 들어갔는지 알 수 없다. 데이터 보관 주기에 따라 쉽게 삭제하는 기능을 사용할 수 없다. 

 

테이블에 대한 수평 분할 / 수직 분할의 절차

1. 데이터 모델링을 완성한다. 

2. 데이터베이스 용량을 산정한다. 

3. 대량 데이터가 처리되는 테이블에 대해서 트랜잭션 처리 패턴을 분석한다. 

4. 칼럼 단위로 집중화된 처리가 발생하는지, 로우 단위로 집중화된 처리가 발생되는지 분석하여 집중화된 단위로 테이블을 분리하는 것을 검토한다. 

반응형