대량 데이터발생에 따른 테이블 분할
- 대량의 데이터가 존재하는 테이블에 많은 트랜잭션이 발생하여 성능이 저하되는 테이블 구조에 대해 수평/수직 분할 설계를 통해 성능 저하를 예방할 수 있음
- 테이블의 데이터는 Block단위로 디스크에 저장된다.
- 컬림이 많아지게 되면 하나의 로우를 저장 시 물리적인 디스크에 여러 블록에 데이터가 저장될 가능성이 높아짐
- 즉 하나의 행을 읽더라도 여러 개의 블록을 읽어야 함
- 자연스레 해당 SQL문의 Block I/O가 많아짐
- 오라클의 경우 한개의 블록은 8192byte(8k)
- 대용량 테이블에서 발생할 수 있는 현상
- 로우 체이닝(Row Chaining): 로우 길이가 너무 길어서 데이터 블록 하나에 데이터가 모두 저장되지 않고 두개 이상의 블록에 걸쳐 하나의 로우가 저장되어 있는 형태
- 로우 마이그레이션(Row Migration): 데이터 블록에서 수정이 발생하면 수정된 데이터를 해당 데이터 블록에서 저장하지 못하고 다른 블록의 빈 공간을 찾아 저장하는 방식
- 로우체이닝과 로우마이그레이션이 발생하여 많은 블록에 데이터가 저장되면 데이터 조회시 절대적인 Block I/O의 횟수가 많아지게 된다.
- Block I/O의 횟수가 많아지면 Disk I/O를 할 가능성도 높아진다.
- Disk I/O를 하게 되는 경우 성능이 급격히 저하 된다.
- 한 테이블에 많은 수의 칼럼을 가지고 있는 경우
- 수평분할(Row)
- Range Partiotion(ex. 연도별로 세분화)
- List Partition(ex.지역별로 세분화)
- Hash Partition(ex. 티켓팅시 병목현상, 세그먼트를 나눠서 여러개의 곳에서 요청을 받음)
- 테이블에 대한 수평 분할/ 수직 분할의 절차
- 데이터 모델링을 완성한다.
- 데이터베이스 용량 산정을 한다.
- 대량 데이터가 처리되는 테이블에 대해서 트랜잭션 처리 패턴을 분석한다.
- 컬럼 단위로 집중화된 처리가 발생하는지, 로우 단위로 집중화된 처리가 발생되지는 분석하여 집중화된 단위로 테이블을 분리하는 것을 검토한다.
'Computer Science > 데이터베이스' 카테고리의 다른 글
분산 데이터베이스와 성능 (0) | 2023.06.08 |
---|---|
데이터 베이스 구조와 성능 (0) | 2023.06.08 |
반정규화와 성능 (0) | 2023.06.08 |
정규화와 성능 (0) | 2023.06.08 |
성능 데이터 모델링 (0) | 2023.06.07 |