1. 성능 데이터 모델링의 개요
데이터베이스의 성능향상을 목적으로 설계단계의 데이터 모델링 때부터 정규화, 반정규화, 테이블통합, 테이블분할, 조인구조, PK, FK 등 여러가지 성능과 관련된 사항이 데이터모델링에 반영될 수 있도록 하는 것
- 수행시점
사전에 할수록 비용이 들지 않음 - 고려사항
정규화 수행
용량 산정
트랜잭션의 유형을 파악하기
해당 프로젝트에 적합한 반정규화 수행
이력 모델의 조정, PK/FK 조정, 슈퍼타입/서브타입 조정
데이터모델 검증하기
2. 정규화와 성능
- 성능 향상 전략
정규화는 결정자에 의해 함수적 종속을 가지고 있는 일반 속성을 의존자로 하여 입력/수정/삭제 이상현상을 제거하는 것
중복을 최소화하므로 한 테이블의 데이터 용량이 최소화됨
그렇지만 무조건 속도가 빠르다고는 할 수 없음 - 효과 및 장점
유연성이 극대화 됨
재활용성에 좋음
중복 최소화 - 성능
정규화를 수행하여 조인이 발생하게 되더라도 인덱스 사용을 통해 조인 연산 수행시 성능 상 단점은 거의 없음
소량의 테이블을 먼저 읽어 조인 연산을 수행하면 되므로 성능 상 유리함
정규화를 한다면 동이란 종류의 속성을 여러개 가지는 중복을 제거하므로 하나의 인덱스만 만들어도 됨
3. 반정규화와 성능
성능향상과 개발과 운영의 단순화를 위해 중복, 통합, 분리 등을 수행하는 기법
무결성이 깨질 수 있지만 데이터 조회시 디스크 I/O량을 줄일 수 있고 조인 시 경로가 너무 멀면 성능이 많이 저하됨
오로지 성능만을 위해 수행
- 절차
컬럼의 반정규화 뿐만 아니라 테이블의 반정규화와 관계의 반정규화를 종합적으로 고려하여 적용
다른 방법부터 찾아보고 반정규화를 적용해야 함 - 기법
- 테이블 반정규화
테이블 병합, 테이블 분할, 테이블 추가
- 칼럼의 반정규화
중복 칼럼 추가, 파생 칼럼 추가, 이력 테이블 칼럼 추가, PK에 의한 칼럼 추가, 응용시스템의 오작동을 위한 칼럼 추가
- 관계 반정규화
중복 관계 추가
4. 대량 데이터에 따른 성능
칼럼이 많아지면 하나의 로우를 저장 시 물리적인 디스크에 여러 블록에 데이터가 저장될 가능성이 높아짐
즉, 하나의 행을 읽더라도 여러 개의 블록을 읽어야 함
- 대용량 테이블에서 발생할 수 있는 현상
- 로우 체이닝 : 로우가 너무 길어서 두 개 이상의 블록에 걸쳐 하나의 로우가 저장되어 있는 형태
- 로우 마이그레이션 : 데이터 블록에서 수정이 발생하면 수정된 데이터를 해당 데이터 블록에서 저장하지 못하고 다른 블록의 빈 공간 을 찾아 저장하는 방식
데이터 조회시 절대적인 Block I/O의 횟수가 많아져 Disk I/O도 증가함
5. 데이터베이스 구조와 성능
- 슈퍼 타입 / 서브 타입 모델
공통의 부분을 슈퍼타입으로 모델링하고 슈퍼타입을 상속받아 서브 엔터티로 서브 타입 모델을 모델링함
트랜잭션 처리 시 Union연산이 줄어듬 - PK/FK 칼럼 순서와 성능
(PK가 복합키일 경우)
테이블에 발생되는 트랜잭션 조회 패턴에 따라 PK/FK 칼럼의 순서를 조정해야 함.
인덱스 선두 칼럼에 대한 조건이 들어와야 인덱스 전체를 읽거나 테이블 전체를 읽는 경우를 피할 수 있음.
Where 절에서 인덱스로 읽을 수 있도록 PK의 순서가 알맞게 되어야 함
6. 분산 데이터베이스와 성능
여러 곳으로 분산되어 있는 데이터베이스를 하나의 가상 시스템으로 사용할 수 있도록 한 데이터베이스
- 투명성
분할 투명성 : 하나의 릴레이션이 여러 단편으로 분할되어 각 단편의 사본이 여러 site에 저장
위치 투명성 : 위치정보가 System Catalog에 유지되어야 함
지역 사상 투명성 : 지역 DBMS와 물리적 DB사이의 Mapping 보장
중복 투명성
장애 투명성
병행 투명성 - 장단점
빠른 응답 속도와 통신비용 절감. 각 지역 사용자의 요구 수용 증대
개발 비용 높음. 불규칙한 응답 속도
'Database' 카테고리의 다른 글
[ SQLD 이론 심화] Chapter 04. SQL 활용 (0) | 2021.07.29 |
---|---|
[ SQLD 이론 심화] Chapter 03. SQL 기본 (0) | 2021.07.29 |
[ SQLD 이론 심화 ] Chapter 01. 데이터 모델링의 이해 (0) | 2021.07.29 |
[ SQLD 이론 기초 ] Chapter 08. 백업 및 복구 (0) | 2021.07.28 |
[ SQLD 이론 기초 ] Chapter 07. 테이블 설계 (0) | 2021.07.28 |