[SQLD/P] 데이터 모델과 성능 - 참고사항
1. 성능 데이터 모델링
- 데이터베이스 성능 향상을 목적으로, 설계단계의 데이터 모델링부터 성능과 관련한 사항이 데이터 모델링에 반영될 수 있도록 하는 것이다.
- 성능을 튜닝하면서 변경될 수 있다.
2. 데이터 모델링 순서
- 데이터 모델링시 정규화 수행
- 용량과 트랜잭션의 유형에 따라 반정규화 수행
- 데이터베이스 용량산정 수행
- 데이터베이스에 발생되는 트랜잭션 유형 파악
- 성능 관점에서 데이터 모델 검증
- 이력모델의 조정, PK/FK 조정, 슈퍼타입/서브타입 등을 조절
3. 동일한 유형의 속성이 컬럼단위로 반복될 경우
- 분류코드 별로 index를 생성할 경우 수정, 삭제 등을 할 때 성능이 저하되어 제1정규화를 수행한 후 인덱스를 적용한다.
- 기본적으로 중복 속성에 대한 분리가 1차 정규화이고, 1:M 관계로 형성
4. 반정규화의 고려
- 정규화된 엔티티, 속성, 관계에 대해 시스템 성능 향상 및 개발, 운영 등의 단순화를 위해 중복/통합/분리를 수행하는 데이터 모델링 기법
- 데이터를 의도적으로 중복시켜 성능을 향상시키는 기법
- 무결성이 깨질 수 있으나, 데이터 조회시 디스크I/O 과다 및 경로가 멀어 성능 저하가 예상될때 반정규화 수행
- 파티션이나 물리적으로 데이터 클러스터링 후에도 반복적으로 성능 저하가 발생한다면, 그때 반정규화를 고려(즉, 재현의 적시성으로 판단)
- RDBMS에서는 현재 레코드를 기준으로 이전 또는 이후 위치의 레코드에 대해 접근이 window function을 통해 가능
5. 테이블 추가 - 부분 테이블 추가
- 한 테이블에 전체 칼럼 중 자주 이용되는 집중화된 칼럼들이 모여 있을때, 디스크 I/O를 줄이기 위해 해당 칼럼들을 별도로 모아놓는 반정규화 기법
6. 반정규화 기법
테이블 반정규화
- 테이블 병합 -> 1:1관계 테이블 병합 / 1:M관계 테이블 병합 / 슈퍼 및 서브타입 테이블 병합
- 테이블 분할 -> 수직분할 / 수평분할
- 테이블 추가 -> 중복테이블 추가, 통계테이블 추가, 이력테이블 추가, 부분테이블 추가
컬럼 반정규화
- 중복칼럼 추가 : 조인감소를 위해 여러 테이블에 동일한 칼럼을 추가
- 파생컬럼 추가 : 조회 성능을 높이기 위해 미리 계산한 칼럼을 추가, 여러 단가를 합한다고 한다면 해당 단가에 대한 자식(조회하는 곳)에 추가하는 것을 권장
- 이력 테이블 칼럼 추가 : 최신값을 처리하는 이력테이블 특성을 고려한 기능성 칼럼 추가
- PK에 의한 칼럼 추가
- 응용시스템 오작동을 위한 칼럼 추가
7. 반정규화 절차
- 반정규화 대상조사 : 범위처리빈도수, 대량의 범위 처리, 통계성 프로세스, 테이블 조인 개수
- 다른 방법유도 검토 : VIEW 테이블, 클러스터링, 인덱스 조정, 응용application
- 반정규화 적용 : 테이블, 속성, 관계
8. 칼럼수가 많은 테이블
- 로우체이닝이 발생할 정도로 테이블에 많은 컬럼들이 존재한다면 조회성능저하 발생한다.
- 트랜잭션이 접근하는 컬럼 유형을 분석하여 1:1테이블로 분리하면 디스크I/O가 줄어들어 조회기능을 향상시킬 수 있다.
9. 파티셔닝
- 하나의 테이블에 많은 데이터가 저장되면 인덱스를 추가하거나, 테이블을 몇개로 쪼개도 성능이 저하되는 경우가 많다.
- 하나의 테이블을 물리적으로 여러 테이블로 나누어, 데이터 액세스 성능도 향상시키고 데이터 관리방법도 개선 가능
10. SQL 패턴
- 동등(=) 조건 -> 범위 조건순으로 인덱스를 생성하는 것이 조회시 효율적이다.
11. FK와 조인
- PK에 인덱스가 존재하나, FK에는 없을 경우 조회성능 저하 예방을 위해 FK에 대해서도 별도의 인덱스를 생성 필요
12. 데이터 분산설계
- 마스터 데이터에 대해서는 분산DB에 모두 복제분산
- 실시간(Near Real time) 업무적인 특성일때 분산 데이터베이스를 사용하여 구성 가능
- 백업 사이트 구성시 활용 가능
- GSI(Global Single Instance)는 하나의 통합된 DB로, 데이터 분산설계의 방향과 완전히 반대되는 개념