최보름달

[SQL] 대량 데이터에 따른 성능 본문

문송한 회사생활/SQL 공부

[SQL] 대량 데이터에 따른 성능

PieMoon 2020. 7. 19. 19:35

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

고속도로 차선을 넓게 시공해서 건설해도 교통량이 많으면 넓은 도로가 정체현상을 보이는 것과 비슷한 원리로... 일이 처리되는 양이 한군데 몰리는 현상이 발생하는 경우 트랜잭션이 분산 처리될 수 있도록 테이블 단위에서 분할 방법을 적용할 필요가 있다. 

로우 길이가 너무 길어서 데이터 블록 하나에 데이터가 모두 저장되지 않고 두 개 이상의 블록에 걸쳐 하나의 로우가 저장되어 있는 형태가 로우체이닝(Row Chaining) 현상이다. 또한 로우 마이그레이션(Row migration)은 데이터 블록에서 수정이 발생하면 수정된 데이터를 해당 데이터 블록에서 저장하지 못하고 다른 블록의 빈 공간을 찾아 저장하는 방식이다. 로우 체이닝과 로우 마이그레이현이 발생하면 성능이 저하된다. 

 

한 테이블에 많은 수의 컬럼을 가지고 있는 경우

컬럼 값이 블록에 넓게 산재되어 있어 디스크 I/O가 많이 일어나게 된다.

많은 컬럼을 가지고 있는 테이블에 대해서는 트랜잭션이 발생될 때 어떤 컬럼에 대해 집중적으로 발생하는지 분석해서 테이블을 쪼개주면 성능이 개선된다. 

 

대량 테이브 저장 및 처리로 인한 성능

테이블에 많은 양의 데이터가 예상될 경우 파티셔닝을 적용하거나 PK에 의해 테이블을 분할하는 방법을 적용할 수 있다. 

오라클의 경우 LIST PARTITION, RANGE PARTITION, HASH PARTITION, COMPOSITE PARTITION 등이 가능하다. 

 

RANGE PARTITION

테이블이 날짜 또는 숫자값으로 분리 가능하고, 각 영역별로 트랜잭션이 분리된다면 RANGE PARTITION을 적용한다. 

RANGE PARTITION은 데이터보관주기에 따라 데이터를 지우는게 가능하므로 관리가 용이하다. 

 

LIST PARTITION

지점, 사업소, 사업장, 핵심적인 코드값 등으로 PK가 구성되어 있다면 값 각가에 의해 파티셔닝이 되는 LIST PARTITION을 적용할 수 있다. 

 

HASH PARTITION

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

 

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

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

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

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

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

 

 

 

 

 

* 한국데이터진흥원에서 출간한 SQL 전문가 가이드 2013 Edition을 요약했습니다

'문송한 회사생활 > SQL 공부' 카테고리의 다른 글

[SQL] 분산 데이터 베이스  (0) 2020.07.19
[SQL] 슈퍼타입/서브타입 모델  (0) 2020.07.19
[SQL] 정규화/ 반정규화  (0) 2020.07.19
[SQL] 성능 데이터 모델링  (0) 2020.07.19
[SQL] 식별자 (Identifiers)  (0) 2020.07.19