🌳1. 성능 데이터 모델링의 개요
1. 성능 데이터 모델링
DB 성능향상을 위한 사항이 데이터 모델링에 반영되도록 하는 것.
2. 수행 시점
분석 / 설계 단계, 성능 데이터 모델링 시점이 늦어질수록 재업무 비용이 증가.
3. 고려 사항
정규화 수행, DB 용량 산정과 트랜잭션 유형 파악을 통한 반정규화 수행.
정규화는 무조건 해야 함.
🌳2. 정규화와 성능
1. 정규화 (Normalization)
데이터 분해 과정, 이상 현상 제거.
데이터 일관성, 중복, 유연성. 중복 제거하여 독립성 확보
정규형(NF: Normal Form)
- 정규화로 도출된 데이터 모델이 갖춰야 할 특성. 함수적 종속성에 근거
2. 함수적 종속성(FD)
결정자와 종속자의 관계.
결정자의 값으로 종속자의 값을 알 수 있음.
다치 종속 (MVD: Multivalued Dependency)
3. 정규화 이론
- 1차 2차 3차 보이스코드 정규화는 함수적 종속성에 근거
- 4차 정규화는 다치 종속 제거
- 5차 정규화는 조인에 의한 이상현상 제거하여 정규화 수행
1차 정규화
- 속성의 원자성 확보. 다중값 속성 분리. 기본키를 잡는 과정.
한칸에 하나씩 = 원자성 확보.
2차 정규화
- 부분함수 종속성 제거. 일부 기본키에만 종속된 속성 분리.
기본키가 하나의 칼럼일 때 생략. = 기본키가 2개 이상인 경우에만 발생.
부분함수 종속성 제거 = 새로운 테이블 도출
3차 정규화
- 이행 함수 종속성 제거. 종속관계가 있는 일반 속성 분리. 주식별자와 관련성 가장 낮음.
기본키 제외 칼럼 간 종속성 발생. 1,2정규화 거친 후 진행
보이스코드 정규화(BCNF)
- 후보키가 기본키 속성 중 일부에 함수적 종속일 때 다수의 주식별자 분리.
4차, 5차 정규화
4. 정규화와 성능
정규화는 입출력 데이터의 양을 줄여 성능을 향상.
정규화로 인한 성능 향상
- 유연성 증가 : 원칙에 충실
재활용 가능성 증가 : 개념 세분화
데이터 중복 치소화
입력, 수정, 삭제 시 성능 향상
정규화로 인한 성능 저하
- 조회 시 처리 조건에 따라 성능 저하 발생 가능.
데이터 조회 시 조인 유발해 CPU와 메모리 많이 사용하게 됨.
=> 반정규화로 해결 가능.
조인이 발생해도 인덱스 사용해 조인 연산 수행하면 성능 상 단점 거의 없음.
정규화 통해 필요한 인덱스 수 줄일 수 있음.
정규화를 통해 소량의 테이블이 생성된다면 성능 상 유리할 수 있음.
🌳3. 반정규화와 성능
1. 반정규화(Denormalization)
성능 향상 위해 데이터 중복을 허용해 조인을 줄이는 DB 성능 향상 방법.
데이터의 무결성을 희생하고 조회 성능 향상 = 유연성 저하.
반정규화 사용 이유
- 수행 속도 느려진 경우. 다량의 범위 자주 처리.
특정 범위 데이터만 자주 처리.
요약, 집계 정보 자주 사용.
2. 절차
- 반정규화 대상 조사 - 데이터 처리 범위 및 통계성 등 조사
- 다른 방법 검토 - 뷰, 클러스터링, 인덱스, 애플리케이션
- 반정규화 적용 - 정규화 수행 후 반정규화 수행
3. 기법
- 반정규화
- 테이블 병합
- 1:1 관계
- 1:N 관계 : 많은 데이터 중복 발생.
- 슈퍼, 서브 타입
- 테이블 분할
- 테이블 추가
- 중복 = 업무나 서버가 다를 때 중복 테이블 생성. 원격 조인 제거
- 통계
- 이력
- 부분 = 자주 이용하는 칼럼으로 구성된 테이블 생성
- 칼럼 반정규화
- 중복 칼럼 추가
파생 칼럼 추가 = 필요 값 미리 계산한 칼럼 추가
이력 테이블 칼럼 추가
PK에 의한 칼럼 추가 = PK의 종속자를 일반속성으로 생성
응용 시스템의 오작동을 위한 칼럼 추가
- 관계 반정규화
🌳4. 대용량 데이터에 따른 성능
테이블 반정규화 중 테이블 분할 관련
1. 블록
테이블의 데이터 저장 단위
2. 대량 데이터 발생으로 인한 현상
블록 I/O 횟수 증가 => 디스크 I/O 가능성 상승. (디스크 I/O 시 성능 저하)
- 로우 체이닝 : 행 길이가 너무 길어 여러 블록에 걸쳐 저장.
로우 마이그레이션 : 수정된 데이터가 해당 블록이 아닌 다른 블록의 빈 공간에 저장.
3. 테이블 분할
반정규화 기법
- 수직 분할 : 칼럼 단위로 테이블 분할해 I/O 감소. 많은 수의 칼럼이 있는 경우 사용.
수평 분할 : 행 단위로 테이블 분할해 I/O 감소.
4. 파티셔닝(Partitioning)
테이블 수평분할 기법. 논리적으로 하나의 테이블이지만 물리적으로 여러 데이터 파일에 분산 저장. 데이터 조회 범위를 줄여 성능 향상.
- Rang Partition : 데이터 값의 범위를 기준으로 분할
List Partition : 특정 값 기준으로 분할
Hash Partition : 해시 함수를 적용하여 분할. DBMS가 알아서 분할 관리. 데이터 위치 알 수 없음.
Composite Partition : 여러 파티션 기법을 복합적으로 사용하여 분할
파티션 인덱스
- Global, Local Index : 여러 파티션에서 단일 인덱스 사용. 파티션 별로 각자 인덱스 사용.
Prefixed, Non-Prefixed Index : 파티션 키와 인덱스 키 동일. 서로 구분.
🌳5. DB 구조와 성능
1. 슈퍼타입/ 서브타입 데이터 모델 변환을 통한 성능 향상
- 슈퍼 /서브 타입 데이터 모델
- 속성을 할당해 배치하는 수평 분할된 형태의 모델.
- 변환을 통해 정확한 업무 표현, 물리적 모델링 시 선택의 폭 넓힘.
- 변환 기준
- 변환 기술
- 1:1 타입 - 개별로 처리하는 트랜잭션에 대해 개별 테이블 구성. 슈퍼타입과 서브타입 각각 필요한 속성과 유형에 적합한 데이터만 가지도록 분리해 1:1 관계.
- 슈퍼/서브 타입 - 슈퍼타입과 서브타입을 공통으로 처리하는 트랜잭션에 대해 슈퍼타입과 서브타입 각각의 테이블 구성.
- All in One 타입(Single type) - 일괄 처리하는 트랜잭션에 대해 단일 테이블 구성.
2. PK/FK 칼럼 순서 조절을 통한 성능 향상
등호 조건이나 BETWEEN 조건이 걸리는 칼럼을 앞으로 이동
3. 인덱스 특성을 고려한 PK/FK DB 성능 향상
물리적인 테이블에 FK 제약을 걸어 인덱스 생성
🌳6. 분산 DB 데이터에 따른 성능
1. 분산 DB
분산된 DB를 하나의 가상 시스템으로 사용할 수 있도록 한 DB.
물리적 사이트는 분산되어 있으나 논리적으로 동일한 시스템.
과거에는 위치 중심이었으나 현재는 업무 필요에 따라 분산 설계.
- 설계 방식
- 상향식 - 지역 스키마 작성 후 전역 스키마 작성
- 하향식 - 전역 스키마 작성 후 지역 스키마 작성
- 장점
- 신뢰성과 가용성 증가
- 빠른 응답 속도와 통신비용 절감
- 용량 확장 용이
- 단점
- 관리 및 통제 어려움
- 데이터 무결성 관리 어려움
- S/W 개발 비용 및 처리 비용 증가
- 불규칙한 응답 속도
2. 분산 DB의 투명성
- 분할 투명성 : 하나의 논리적 관계가 분할되어 사본이 여러 사이트에 저장
- 위치 투명성 : 데이터 저장 장소가 명시되지 않아도 됨
- 지역사상 투명성 : 지역 DBMS와 물리적 DB 사이 사상 보장
- 중복 투명성 : DB 객체 중복 여부 몰라도 됨
- 장애 투명성 : 구성요소의 장애에 무관하게 트랜잭션 원자성 유지
- 병행 투명성 : 다수의 트랜잭션 동시 수행시 결과의 일관성 유지. 병렬 아님
3. 분산 DB 적용 기법
- 테이블 위치 분산 : 설계된 테이블의 위치 분산
- 테이블 분할 분산 : 테이블을 쪼개서 분산
- 테이블 복제 분산 : 동일한 테이블을 다른 지역이나 서버에서 동시 생성. 원격지 조인을 내부 조인으로 변경하여 성능 향상
- 테이블 요약 분산
- 분석 요약 - 사이트 별 요약정보를 본사에서 통합해 전체 요약정보 산출
- 통합 요약 - 사이트 별 정보를 본사에서 통합해 전체 요약정보 산출