* 로우 체이닝
- 로우의 길이가 너무 길어 데이터 블록 하나에 데이터가 모두 저장되지 않고 두 개 이상의 블록에 걸쳐 하나의 로우가 저장되어 있는 형태
* 로우 마이그레이션
- 데이터블록에서 수정이 발생하면 수정된 데이터를 해당 데이터 블록에서 저장하지 못하고 다른 블록의 빈 공간을 찾아 저장하는 방식
- 로우 체이닝과 로우 마이그레이션이 발생하여 많은 블록에 데이터가 저장되면 DB 메모리에서 디스크 I/O가 발생할 때 많은 I/O가 발생하여 성능저하 발생 트랜잭션을 분석하여 적절하게 1:1관계로 분리 함으로써 성능향상이 가능하도록 해야한다.
* PK에 의해 테이블을 분할하는 방법(파티셔닝)
1. RANGE PARTITION : 대상 테이블이 날짜 또는 숫자값으로 분리가 가능하고 각 영역별로 트랜잭션이 분리되는 경우 ex) 요금_0401
2. LIST PARTITION : 지점, 사업소 등 핵심적인 코드값으로 PK가 구성되어 있고 대량의 데이터가 있는 테이블의 경우 ex)고객_서울
3. HASH PARTITION : 지정된 HASH 조건에 따라 해시 알고리즘이 적용되어 테이블이 분리
* 테이블에 대한 수평/수직분할의 절차
1. 데이터 모델링을 완성한다.
2. DB 용량산정을 한다.
3. 대량 데이터가 처리되는 테이블에 대해 트랜잭션처리 패턴을 분석한다
4. 칼럼 단위로 집중화된 처리가 발생하는지, 로우 단위로 집중화된 처리가 발생하는 분석하여 집중화된 단위로 테이블을 분리하는 것을 검토한다.
- 칼럼 많은 -> 1:1 분리
- 데이터 많은 ->파티셔닝
* 슈퍼/서브 타입 모델
- 업무를 구성하는 데이터를 공통과 차이점의 특징을 고려하여 효과적 표현.
- 논리적 모델
= 슈퍼 타입 : 공통부분
= 서브타입 : 공통으로부터 상속받아 다른 엔티티와 차이가 있는 속성
* 슈퍼/서브 타입 데이터 모델의 변환기술
1. 개별로 발생되는 트랜잭션에 대해서는 개별 테이블로 구성(OneToOne Type)
2. 슈퍼타입+서브타입에 대해 발생되는 트랜잭션에 대해서는 슈퍼+서브타입 테이블로 구성(Plus Type)
3. 전체를 하나로 묶어 트랜잭션이 발생할 때는 하나의 테이블로 구성(Single Type, All in One Type)
* 인덱스 특성을 고려한 PK/FK DB 성능향상
- 인덱스의 특징은 여러 개의 속성이 하나의 인덱스로 구성되어 있을 때 앞쪽에 위치한 속성의 값이 비교자로 있어야 좋은 효율을 나타낸다. 앞쪽에 위치한 속성의 값이 가급적 '='아니면 최소한 범위 'BETWEEN' '<>' 가 들어와야 효율적이다.
(오늘은 어떻게 하면 성능이 향상되는 것을 배웠다 로우 체이닝과 로우 마이그레이션을 예로 들면 기존의 테이블을 건들지 않고 새로운 테이블을 만들어 거기에 넘치는 데이터와 남은 데이터를 저장하는 방식입니다.)
'SQLD' 카테고리의 다른 글
데이터 모델과 성능 -(3) (0) | 2023.06.07 |
---|---|
데이터 모델과 성능 -(1) (0) | 2023.06.05 |