성능 데이터 모델링
데이터베이스 성능 향상을 목적으로 설계 단계의 데이터 모델링 때부터 성능 관련된 사항이 데이터 모델링에 반영되도록 하는 것
성능 데이터 모델링 수행 절차
- 정규화
- DB 용량 산정
- 트랜잭션 유형 파악
- 반정규화
- 이력모델의 조정, PK/FK 조정, 슈퍼타입/서브타입 조정
- 성능관점에서 데이터 모델을 검증
성능 데이터 모델링 시 고려사항
PK/FK 컬럼 순서조정, FK인덱스 생성 등은 성능 향상을 위한 데이터 모델링 작업에 중요한 요소이다
이력데이터는 시간에 따라 반복적으로 발생돼서 대량일 가능성이 높아 성능을 고려하여 컬럼 등을 추가하도록 설계
정규화
- 제 1 정규형: 모든 속성 값이 원자 값
- 1차 정규화: 중복값 제거, 새로운 테이블 추가, 1:M 관계
- 제 2 정규형: 기본키에 완전 종속
- 2차 정규화: PK가 2개 이상의 속성일 때 종속성 제거
- 제 3 정규형: 일반 컬럼에 의존하는 컬럼이 존재
- 3차 정규화: 기본키에 의존하지 않고 일반 컬럼에 의존하는 컬럼 제거
반정규화
시스템의 성능향상과 개발과 운영의 단순화를 위해 중복, 통합, 분리 등을 수행하는 데이터 모델링 기법
반정규화 고려 시 판단 요소
다량 데이터 탐색의 경우 파티션, 데이터 클러스터링 등 다양한 기법으로 성능 개선 가능
처리가 반복적이고 빈번하면 반정규화 고려
테이블과 컬럼의 반정규화
- 테이블 병합: 1:1, 1:M 관계 테이블 병합
- 테이블 분할: 디스크 IO 분산 처리, 디스크 IO 및 데이터 접근 효율성을 높임
- 테이블 추가
- 중복 컬럼 추가: 조인을 감소
- 파생 컬럼 추가: 성능저하 예방을 위해 미리 계산
- 이력테이블 컬럼 추가: 최근 값 조회 시 성능저하 예방을 위해
- PK에 의한 컬럼 추가: 성능향상을 위해 일반속성으로 포함
- 응용 시스템 오작동을 위한 컬럼 추가: 이전 데이터를 임시적으로 중복하여 보관
반정규화 대상에 대해 다른 방법으로 처리
- 지나치게 많은 조인 -> 뷰
- 대량 데이터 처리나 부분 처리 -> 클러스터링, 파티셔닝, 인덱스 조정
컬럼수가 많은 테이블
- 디스크 IO가 대량으로 발생, 성능 저하
- 접근 빈도에 따라 컬럼을 구분해서 1:1 테이블 분리
- 컬럼 위치 조정으로 NULL이 존재하는 컬럼을 뒤로 모아서 로우의 길이 감소시킬 수 있음
- NULL 상태이던 컬럼에 데이터가 채워지면 더 많은 로우 체인이 발생할 수 있어서 바람직하지 않음
파티셔닝
데이터 엑세스 성능을 향상시키기 위해 적용하는 방법 중 하나이다. 논리적으로는 하나의 테이블이지만 물리적으로는 여러 개의 테이블로 분리하여 데이터 엑세스 성능도 향상시키고, 데이터 관리방법도 개선할 수 있도록 테이블에 적용하는 기법이다.
슈퍼/서브 타입 데이터 모델 변환
트랜잭션에 따라 알맞게 구성하기
-
트랜잭션 일괄 처리: 하나의 테이블로 구성
-
트랜잭션 슈퍼타입+서브타입에 대해 발생: 슈퍼타입+서브타입으로 테이블 구성
-
트랜잭션 개별 처리: 개별 테이블로 구성
-
쓸데없이 테이블을 하나로 통합하면 많은 양의 데이터가 집약되어 있어 성능이 저하될 수 있다.
-
쓸데 없이 개별로 유지하면 UNION 연산에 의해 성능이 저하될 수 있다.
PK/FK 컬럼
- FK는 반드시 인덱스 생성, 조회 조건 고려하여 인덱스 컬럼 순서를 효율적으로 생성해야 함
- 트랜잭션에 의해 거의 활용되지 않을 때만 FK 인덱스를 지우는 방법이 적절
분산 데이터베이스
- 실시간 업무적인 특성을 가지고 있을 때 분산 데이터베이스를 사용하여 구성
- 공통코드, 기준정보 등 마스터 데이터는 분산 데이터베이스에 복제분산을 적용