대량 데이터발생에 따른 테이블 분할 개요
- 테이블을 조회할 떄 대량의 데이터가 존재하는 테이블에 많은 트랜잭션이 발생하여 성능이 저하되는 테이블 구조에 대해 수평/ 수직 분할 설계를 통해 성능 저하를 예방할 수 있습니다.
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 분할 기법입니다.
- 설계자는 테이블에 데이터가 정확하게 어떻게 들어갔는지 알 수 없습니다.
- 성능향상을 위해 사용하여 데이터 보관 주기에 따라 쉽게 삭제하는 기능은 제공할 수 없습니다.
- 테이블에 대한 수평 / 수직 분할의 절차
- 데이터 모델링을 완성
- 데이터베이스 용량 산정
- 대량 데이터가 처리되는 테이블에 대해서 트랜잭션 처리 패턴 분석
- 컬럼 단위로 집중화된 처리가 발생하는지, 로우 단위로 집중화된 처리가 발생되는지 분석하여 단위로 테이블을 분리하는 것을 검토
'Database > SQLD 시험 준비' 카테고리의 다른 글
챕터02. 데이터 모델과 성능 - 2.3 반정규화와 성능 (0) | 2022.12.09 |
---|---|
챕터02. 데이터 모델과 성능 - 2.2 정규화와 성능 (0) | 2022.12.08 |
챕터02. 데이터 모델과 성능 - 2.1 성능 데이터 모델링의 개요 (0) | 2022.11.29 |
챕터01. 데이터 모델링의 이해 - 1.6 연습문제 (0) | 2022.11.29 |
챕터01. 데이터 모델링의 이해 - 1.5 식별자 (0) | 2022.11.28 |