성능데이터모델링
: 데이터베이스 성능 향상을 목적으로 설계단계의 데이터 모델링 때부터 성능과 관련된 사항이 데이터 모델링에 반영될 수 있도록 하는 것이다.
- 분석 / 설계 단계에서 데이터베이스 처리 성능을 향상시킬 수 있는 방법 고려
성능데이터 모델링 수행절차
1. 정규화 수행
2. 데이터베이스 용량 산정
3. 데이터베이스 트랜잭션 유형 파악
4. 용량과 트랜잭션 유형에 따라 반정규화(역정규화) 수행
5. 이력모델의 조정, PK/FK 조정, 슈퍼타입/서브타입 조정 등 수행
6. 성능관점에서 데이터모델링 검증
정규화
- 기본적으로 중복데이터 삭제 => 조회 성능 향상 가능
- 일반적으로 정규화를 하고 나면 입력/수정/삭제 성능 향상
- 1차 정규화 : 같은 성격, 내용 컬럼 연속시 컬럼 제거, 테이블 생성
- 2차 정규화 : PK복합키 구성일때 부분적 함수 종속관계 테이블 분리
- 3차 정규화 : PK가 아닌 일반컬럼에 의존하는 컬럼 분리
1차정규화
- 칼럼에 의한 반복적인 속성값을 갖는 형태는 속성의 원자성을 위배한 제1차 정규화의 대상이 됨
이런 반복적인 속성 나열 형태에서는 각 속성에 대해 or 연산자로 연결된 조건들이 사용되는데 이때 어느 한 속성이라도 인덱스가 정의되어있지 않게 되면 or로 연결된 모든 조건절들이 인덱스를 사용하지 않고 한 번의 전체 데이터 스캔으로 처리되게 되어 성능저하가 올 수 있음
또한 모든 반복 속성에 인덱스를 생성하게 되면 검색 속도는 좋아지겠지만 반대급부적으로 너무 많은 인덱스로 인해 입력/수정/삭제 성능이 저하 됨 -> 1차 정규화를 해야함
- 컬럼단위에서 중복된 경우에도 1차 정규화의 대상 . 1:M의 관계로 두개의 엔터티로 분리
1차 정규형
- 1차정규화를 마친 엔터티
* PK에 대해 반복되는 그룹이 존재하지 않으면 1차 정규형
- 이때 함수종속성이 있다면 2차 정규화 대상
2차 정규형
- 함수종속성이 없는 2차 정규화를 마친 엔터티
반정규화
- 정규화된 엔터티, 속성, 관계에 대해 시스템의 성능향상과 개발(Development)과 운영(Maintenance)의 단순화를 위해 중복, 통합, 분리 등을 수행하는 데이터 모델링의 기법을 의미
- 반정규화는 데이터를 중복시켜 성능을 향상시키는 기법
- 일반적으로 반정규화시 조인 성능이 향상
- 더 넓은 의미로 성능을 향상시키기 위해 정규화된 데이터 모델에서 중복, 통합, 분리 등을 수행하는 모든 과정
- 데이터의 무결성이 깨질 수 있는 위험을 무릅쓰고 데이터를 중복하여 반정규화 하는 이유 ?
ㄴ 데이터를 조회할 떄 디스크 I/O 량이 많아서 성능이 저하되거나 경로가 너무 멀어 조인으로 인한 성능저하가 예상되거나, 칼럼을 계산하여 읽을 때 성능이 저하되는 것이 예상되는 경우 수행
반정규화 대상조사 (범위처리빈도수, 범위, 통계성)
1. 자주 사용되는 테이블에 접근하는 프로세스의 수가 많고 항상 일정한 범위를 조회하는 경우
2. 테이블에 대량의 데이터가 있고, 대량의 데이터 범위를 자주 처리하는 경우, 처리범위를 일정하게 줄이지 않으면 성능보장이 힘든 경우
3. 통계성 정보가 필요할 때 -> 별도의 통계 테이블 생성
4. 테이블에 지나치게 많은 조인이 걸려 데이터를 조회하는 작업이 기술적으로 어려울 경우
반정규화 절차
1. 반정규화 대상조사
- 범위처리빈도수 조사
- 대량의 범위 처리 조사
- 통계성 프로세스 조사
- 테이블 조인 개수
2. 다른 방법유도 검토
- 뷰(View) 테이블 사용 : 지나치게 많은 조인이 걸려 데이터를 조회하는 작업이 기술적으로 어려울 경우 view를 사용한다 (view가 성능향상은 x)
- 클러스터링 적용 : 대량의 데이터 처리나 부분 처리에 의해 성능이 저하되는 경우 클러스터링을 적용하거나 인덱스를 조정함 (조회가 대부분일 때 클러스터링 적용)
- 인덱스 조정
- 파티셔닝 : 대량의 데이터는 PK의 성격에 따라 부분적인 테이블로 분리할 수 있다. 파티셔닝 키에 의해 물리적 저장공간 분리
- 캐시 : 응용 애플리케이션에서 로직을 구사하는 방법을 변경함으로써 성능을 향상시킬 수 있다.
3. 반정규화 적용
- 테이블 반정규화
테이블 병합
- 1:1 관계를 통합하여 성능향상
- 1:M 관계를 통합하여 성능향상
- 슈퍼/서브 관계를 통합하여 성능향상
테이블 분할
- 수직 분할 : 칼럼단위 테이블을 디스크 I/O를 분산처리하기 위해 테이블을 1:1로 분리하여 성능향상
- 수평 분할 : 로우단위로 집중 발생되는 트랜잭션을 분석하여 디스크 I/O 및 데이터 접근의 효율성을 높여 성능을 향상하기 위해 로우 단위로 테이블을 쪼갬
테이블 추가
- 중복 : 다른 업무이거나 서버가 다른 경우 동일한 테이블구조를 중복시켜 원격조인을 제거하여 성능 향상
- 통계 : SUM, AVG 등을 미리 수행하여 계산해 둠으로써 조회 시 성능 향상
- 이력 : 이력테이블 중에서 마스터 테이블에 존재하는 레코드를 중복하여 이력테이블에 존재시켜 성능 향상
- 부분 : 하나의 테이블의 전체 칼럼 중 자주 이용하는 집중화된 칼럼들이 있을 때 디스크 I/O 를 줄이기 위해 해당 칼럼들을 모아놓는 별도의 반정규화된 테이블을 생성
'자격증 > SQLD' 카테고리의 다른 글
SQLD 자격증 보수교육 배속 변경 (1) | 2024.11.11 |
---|---|
제 2장 데이터 모델과 성능 -2 (0) | 2023.03.08 |
제 1장 데이터모델링의 이해 정리 (0) | 2023.03.05 |