아무리 설계가 잘되어 있는 데이터 모델이라고 할지라도 대량의 데이터가 테이블에 집약되어 있고 하나의 하드웨어 공간에 저장되어 있으면 성능저하를 피하기 힘들다. 이러한 경우 테이블을 분할할 필요성이 있다.
하나의 테이블에 대량의 데이터가 존재하는 경우
-> 인덱스의 트리구조가 커져 효율성이 떨어지므로 데이터를 처리할 때 디스크 I/O를 유발
하나의 테이블에 많은 수의 칼럼이 존재하는 경우
->데이터가 디스크의 여러 블록에 존재하게 되므로 디스크에서 데이터를 읽은 I/O량이 많아지게 되어 성능 저하
로우 체이닝
- 로우의 길이가 너무 길어서 데이터 블록 하나에 데이터가 모두 저장되지 않고 두개 이상의 블록에 걸쳐 하나의 로우가 저장되어 있는 형태
로우 마이그레이션
- 데이터 블록에서 수정이 발생하면 수정된 데이터를 해당 데이터 블록에 저장하지 못하고 다른 블록의 빈 공간을 찾아서 저장하는 방식
하나의 테이블에 많은 수의 칼럼이 존재하는 경우 -> 칼럼 수가 많은 테이블의 1:1분리
하나의 테이블에 대량의 데이터가 존재하는 경우
1. RANGE PARTITION 적용 2. LIST PARTITION 적용 3. HASH PARTITION 적용
지정된 HASH 조건에 따라 해슁 알고리즘이 적용되어 테이블이 분리되며 설계자는 테이블에 데이터가 정확하게 들어갔는지 알 수 없다.
하나의 테이블에 대량의 데이터가 존재하는 경우
1. RANGE PARTITION 적용 2. LIST PARTITION 적용 3. HASH PARTITION 적용
지정된 HASH 조건에 따라 해슁 알고리즘이 적용되어 테이블이 분리되며 설계자는 테이블에 데이터가 정확하게 들어갔는지 알 수 없다.
테이블에 대한 수평/수직분할 절차.
- 데이터 모델링 완성 -> DB용량산정 -> 트랜잭션 처리패턴 분석 -> 수평/수직 분할
'노력만이 살길! > SQLD' 카테고리의 다른 글
SQL 기본 DDL문 (0) | 2021.06.01 |
---|---|
제6절 분산데이터베이스와 성능 (0) | 2021.06.01 |
제5절 데이터베이스의 구조와 성능 (0) | 2021.06.01 |
제2절 정규화와 성능 + 제3절 반정규화와 성능 (0) | 2021.06.01 |
1절. 성능 데이터 모델링 (0) | 2021.06.01 |