1. 대량 데이터발생에 따른 테이블 분할 개요
- 아무리 설계가 잘되어 있는 데이터 모델이라도 대량의 데이터가 하나의 테이블에 집약되어 있고 하나의 하드웨어 공간에 저장되어 있으면 성능저하를 피하기가 힘들다.
- 트랜잭션이 분산 처리 될 수 있도록 테이블단위에서 분할 필요

- 한 테이블에 데이터가 대량으로 집중되거나 하나의 테이블에 여러 개의 칼럼이 존재하여 디스크에 많은 블록을 점유하는 경우는 모두 성능저하를 유발할 수 있는 경우
- 대량의 데이터 시, 인덱스 Tree구조가 너무 커져 효율성이 떨어져 데이터를 처리 할 때 디스크 I/O를 많이 유발
- SQL에서 처리하는 I/O량이 증가 -> 적절한 인덱스 구성으로 해소 가능할 것으로 예상되지만, 정말 대량의 데이터 일때에는 인덱스 Tree구조가 커짐에 따라 CUD 수행 시 성능 저하를 유발
- 많은 수의 컬럼 시, 데이터가 디스크의 여러 블록에 존재하므로인해 디스크에서 데이터를 읽는 I/O량이 많아지게 되어 성능이 저하
- 로우체이닝과 로우마이그레이션이 발생함
- 로우체이닝 : 로우 길이가 길어 데이터를 하나의 블록에 저장되지 못하고 두 개 이상의 블록에 걸쳐 하나의 로우가 저장되어 있는 형태
- 로우마이그레이션 : 데이터 블록에서 수정이 발생하면 수정된 데이터를 해당 데이터 블록에서 저장하지 못하고 다른 블록의 빈 공간을 찾아 저장하는 방식
- 대량의 데이터 시, 인덱스 Tree구조가 너무 커져 효율성이 떨어져 데이터를 처리 할 때 디스크 I/O를 많이 유발
2. 한 테이블에 많은 수의 칼럼을 가지고 있는 경우
- 앞에 위치하는 발행기간명과 수량 공고일, 발행일을 조회 할 경우 물리적으로 컬럼의 값이 블록에 넓게 산재되어 있어 디스크 I/O가 많이 발생하게 됨

- 기존의 도서정보 테이블에서 전자출판유형과 도서대체 영역을 확인하여 도서정보와 트랜잭션이 독립적으로 발생이 되는 경우가 많음을 확인하여 1:1 관계로 분리

- 1:1 관계로 분리함에 따라, 디스크에 적은 블록에 담기게 됨으로 로우마이그레이션과 로우체이닝 현상이 줄어듬
3. 대량 데이터 저장 및 처리로 인해 성능
- 많은 양의 데이터가 예상될 경우 파티셔닝을 적용하거나 PK에 의해 테이블을 분할하는 방법을 적용
- Partition Table
- List Partition(특정값 지정)
- Range Partition(범위-날짜)
- Hash Partition(해쉬)
- Composite Partition(복합-Range+Hash)
- Partition Table
4. 테이블에 대한 수평분할/수직분할 절차
절차
- 데이터 모델링을 완성한다.
- 데이터베이스 용량산정을 한다.
- 대량 데이터가 처리되는 테이블에 대해서 트랜잭션 처리 패턴을 분석
- 컬럼 단위로 집중화된 처리가 발생하는지, 로우단위로 집중화된 처리가 발생되는지 분석하여 집중화된 단위로 테이블을 분리하는 것을 검토
- 용량산정은 어느 테이블에 데이터의 양이 대용량이 되는지 분석하는 것
- 특정 테이블의 용량이 대용량인 경우 컬럼의 수가 너무 많은 지 확인하고, 많을 경우 트랜잭션의 특성에 따라 테이블을 1:1 형태로 분리할 수 있는지 검증하며, 컬럼수가 적은 경우 파티셔닝 전략을 고려
반응형
'SQLD > SQL 전문가 가이드' 카테고리의 다른 글
| 1.2.6 제6절 분산 데이터베이스와 성능 (0) | 2021.08.23 |
|---|---|
| 1.2.5 제5절 데이터베이스 구조와 성능 (0) | 2021.08.23 |
| 1.2.2 제2절 정규화와 성능 (0) | 2021.08.23 |
| 1.2.1 제1절 데이터 모델링의 개요 (0) | 2021.08.23 |
| 1.1.5 제5절 식별자 (0) | 2021.08.23 |