목표
데이터 모델링 각 성능에 대해 이해하고 학습하기
학습할 것
- 성능 데이터 모델링의 개요
- 정규화의 성능
- 반정규화의 성능
- 대량 데이터에 따른 성능
- 데이터베이스 구조와 성능
- 분산 데이터베이스와 성능
성능 데이터 모델링의 개요
성능 데이터 모델링
DB 성능향상을 위해서 설계단계의 데이터 모델링때부터 정규화, 반정규화, 테이블 통합, 테이블 분할,
조인구조, PK, FK등 여러가지 성능과 관련된 사항이 데이터 모델링에 반영되도록 한다.
- 데이터 모델은 성능을 튜닝하면서 변경 될 수 있는 특징이 있다.
- 데이터의 증가가 빠를수록, 성능저하에 따른 성능 개선비용은 증가한다.
- 분석/ 설계 단계에서 고려한 데이터 모델링을 수행할 경우 성능 저하에 따른 Rework 비용을 최소화
할 수 있는 기회를 갖게된다.
성능을 고려한 데이터 모델링의 순서
- 데이터 모델링을 할 때 정규화를 정확하게 수행한다.
- 데이터베이스 용량산정 수행한다.
- 데이터베이스에 발생되는 트랜잭션 유형 파악한다.
- 용량과 트랜잭션의 유형에 따라 반정규화 수행한다.
- 이력모델의 조정, PK/FK 조정, 슈퍼타입/서브타입 조정 수행한다.
- 성능관점에서 데이터 모델 검증한다.
정규화의 성능
정규화
데이터의 일관성, 최소한의 데이터 중복, 최소한의 데이터 유연성을 위한 방법이며 데이터를 분해하는 과정이다.
특징
- 정규화된 모델은 테이블이 분해되고, 분해된 테이블들은 조인을 통해 하나의 합집합으로 만들어 질 수 있다.
- 정규화를 하면 불필요한 데이터를 입력하지 않아도 되기 때문에 중복 데이터가 제거된다.
- 업무가 변경되도 모델의 유연성을 향상 시킨다.
- 모델의 독립성을 향상시킨다.
- 찾아야할 데이터가 적어 쿼리 수행속도가 더 빨라진다.
정규화 절차
제 1정규화 | 제 2정규화 | 제 3정규화 | 제 4정규화 | 제 5정규화 |
모든 속성은 원자값 가져야한다 | 부분 함수 종속 제거해야한다 | 이행 함수 종속 제거해야한다 | 다중값 종속을 제거해야한다 | 조인 종속성을 제거해야한다 |
1. 1차 정규화
2. 2차 정규화
3. 3차 정규화
정규화의 문제점 및 해결 방법
- 정규화의 문제점
- 데이터 조회시 조인을 유발한다.(많은 조인 = 데이터베이스 서버 부하 = 처리속도느려짐(성능저하))
- CPU, 메모리를 많이 사용한다.
- 중첩된 루프 = 이중 for문을 사용해야함
- 정규화의 문제 해결방법
- 인덱스, 옵티마이저를 통해 비효율 해결
- 조인에 의한 성능 저하를 반정규화를 하여 하나의 테이블에 저장(반정규화 = 데이터 중복 허용)
- 반정규화의 문제점
- 데이터 중복의 문제
- 1행의 크기가 커짐에 따라 디스크 입출력 증가 -> DB입출력단위 블록 크기 초과 -> 성능 저하 유발
- 결론
- 정규화는 조인개수가 많아지고, 반정규화는 테이블 칼럼 개수가 준다.
- 항상 반정규화를 수행한다고해서 조회속도가 빨리지는 것이 아니다.
- 트랜잭션 유형과 데이터 용량등을 고려해보고 성능이슈가 없으면 반정규화 안해도된다.
반정규화와 성능
반정규화
데이터베이스 성능 향상을 위하여, 데이터 중복을 허용하고 조인을 줄이는 방법이다.
반정규화를 수행하는 경우
- 정규화를 시켜 종속성&활용성이 향상되었지만 수행속도가 느리진경우
- 특정 범위만 자주 처리하는 경우(자주 쓰는 한테이블은 정규화를 하지 않고 접근하는게 더 효율적임)
- 다량 범위만 자주 처리하는 경우(ex. 주문데이터베이스에서 특정 지역또는 기간의 주문 정보를 자주
처리해야하는 경우 미리 특정지역이나 기간만 새로운 테이블에 저장하는 방식으로 반정규화) - 요약/집계 정보가 자주 요구되는 경우(블로그, 메일 테이블있는데 특정 사용자의 활동정보만
보고싶은 경우)
반정규화 절차
- 대상 조사 및 검토: 데이터 처리범위, 통계성 등을 확인
- 다른 방법 검토: 클러스터링(물리적 데이터 저장방식중 하나), 뷰(가상의 테이블),
인덱스 튜닝(중복 인덱스 제거 등등) 등을 검토 - 반 정규화 수행: 테이블, 속성, 관계 등을 반정규화
반정규화 기법
- 테이블 반정규화
※슈퍼-서브 타입 관계: 두개의 테이블이 공통된 속성을 가지면 새로운 테이블을 만들어 분류할수 있다.
예시) 학생과 교사 테이블이 있다. 기본키와 이름 생년월일이 있으면 이름과 생년월일은 공통적인 속성으로
슈퍼-서브타입관계 적용가능하다. => 인물테이블(인물id, 이름, 생년월일), 학생테이블(학생id), 교사테이블(교사id)
이력 테이블 추가: 과게 데이터 변화를 추적하기 어렵기 때문에 데이터가 변경하는 테이블(고객 정보) 같은 경우는
이력데이터를 별도의 테이블로 저장한다.(추후 데이터의 변경 이력 추적 가능)
- 컬럼 반 정규화
※PK에 의한 컬럼 추가 예시: 주문 테이블과 고객테이블이 있을때 주문정보를 조회할려면 고객번호가 필요하다고
하는 경우에 주문테이블은(Id(pk), 고객id(외래키), 주문번호) 가아니라 (Id(pk), 고객id(외래키), 주문번호, 고객번호(추가된 칼럼)이 필요하다.
- 관계 반정규화
- 중복관계추가: 데이터를 처리하기 위한 여러 경로를 거쳐 조인이 가능하지만 성능저하를 예방하기 위해
추가적인 관계를 맺는 방법
- 중복관계추가: 데이터를 처리하기 위한 여러 경로를 거쳐 조인이 가능하지만 성능저하를 예방하기 위해
대량 데이터에 따른 성능
컬럼이 많아짐에 따라 성능이 저하되는 유형
- 로우 체이닝(Row Chaining) : 행 길이가 너무 길어서 데이터 블록 하나에 데이터가 모두 저장되지 않고 두 개 이상 의 블록에 걸쳐 하나의 로우가 저장되어 있는 형태 -> 하나의 로우가 여러블록에 거쳐있으면 외부에서 그 로우를 읽을때도 여러 데이터 블록에 접근해야하므로 추가비용발생한다.
- 로우 마이그레이션(Row Migration) : 데이터 블록에서 수정이 발생하면 수정된 데이터를 해당 데이터 블록에서 저장하지 못하고 다른 블록의 빈 공간을 찾아 저장하는 방식 -> 수정된 데이터를 새로운 블록에 저장하기 위해 빈 공간을 찾고, 데이터를 복사해야하므로 추가비용발생한다.
- ⇒ 트랜잭션을 분석하여 적절하게 1:1 관계로 분리함으로써 성능향상이 가능하도록 해야함
PK에 의해 테이블을 분할하는 방법 (파티셔닝)
- Range Partition
- 대상 테이블이 날짜 또는 숫자값으로 분리가 가능하고 각 영역별로 트랜잭션이 분리되는 경우
- ex)하루의 기록을 저장하는 로그 테이블 -> 로그_0722, 로그_0723, 로그_0724 등
- Hash Partition
- 지정된 HASH 조건에 따라 해슁 알고리즘이 적용되어 테이블이 분리됨, 고정된 수의 파티션으로 데이터를
분할한다. - ex) 학번이 1000~3000 까지라면 범위를 해시알고리즘에 넣으면 각 학번마다 고정된 해시값이 나옴 -> 균등하게 분산 가능
- 지정된 HASH 조건에 따라 해슁 알고리즘이 적용되어 테이블이 분리됨, 고정된 수의 파티션으로 데이터를
- List Partition
- 지점, 사업소, 사업장, 핵심적인 코드값 등으로 PK가 구성되어 있고 대량의 데이터가 있는 테이블이라면 값 각각에 의해 파티셔닝
- ex) 은행 테이블 → 은행_서울, 은행_부산, 은행_경기 등
테이블에 대한 수평/수직분할의 절차
- 데이터 모델링을 완성
- 데이터베이스 용량산정
- 대량 데이터가 처리되는 테이블에 대해서 트랜잭션 처리 패턴을 분석
- 칼럼 단위로 집중화된 처리가 발생하는지, 로우단위로 집중화된 처리가 발생되는지 분석하여 집중화된 단위로 테이블을 분리하는 것을 검토
데이터베이스 구조와 성능
슈퍼/서브 타입 모델 : 업무를 구성하는 데이터의 특징을 공통과 차이점의 특징을 고려하여 효과적으로 표현하는 방법이다.
- 슈퍼 타입 : 데이터의 공통된 부분
- 서브 타입 : 공통으로부터 상속받아 다른 엔터티와 차이가 있는 속성이다.
- 논리적 데이터 모델에서 주로 사용되며, 분석 단계에서 활용된다.
- 슈퍼/서브 타입 모델은 물리적 데이터 모델로 변환 될때 적절히 변환되어 사용된다.
슈퍼/서브 타입 데이터 모델의 변환 기술 : 물리적 데이터 모델링 단계에서는 변환해서 써야함
- OneToOne Type : 개별적으로 발생하는 트랜잭션에 대해서는 개별테이블로 구성한다.
- Plus Type : 슈퍼타입 서브타입에 대해 발생되는 트랜잭션에 대해서는 슈퍼타입+서브타입 테이블로 구성한다.
- Single Type, All in one : 전체를 하나로 묶어 트랜잭션이 발생할 때는 하나의 테이블로 구성한다.
인덱스 특성을 고려한 PK/FK 데이터 베이스 성능 향상
- 인덱스의 특징은 여러 개의 속성이 하나의 인덱스로 구성되어 있을 때, 앞쪽에 위치한 속성의 값이
비교에 사용될때 효율적이다. - 앞쪽에 위치한 속성 값이 =(같다) 조건이나 BETWEEN<>(범위)와 같은 조건에 사용되어야 한다.
- =조건이 가장 앞으로 오고, BETWEEN이 그다음에 오도록 하는것이 인덱스 액세스 범위 줄이는
팁이다.
분산 데이터베이스와 성능
- 분산 데이터베이스
- 여러 곳으로 분산되어있는 데이터베이스를 하나의 가상 시스템으로 사용할 수 있도록 한 데이터베이스
- 논리적으로 동일한 시스템에 속하지만, 컴퓨터 네트워크를 통해 물리적으로 분산되어 있는 데이터들의 모임.
- 분산 데이터베이스가 되기 위한 6가지 투명성
- 위치 투명성 : 사용하려는 데이터의 저장 장소 명시 불필요. 위치정보가 System Catalog에 유지되어야 함
- 중복 투명성 : DB 객체가 여러 site에 중복 되어 있는지 알 필요가 없는 성질
- 병행 투명성 : 다수 Transaction 동시 수행시 결과의 일관성 유지, Time Stamp, 분산 2단계 Locking을 이용 구현
- 분할 투명성(단편화) : 하나의 논리적 Relation이 여러 단편으로 분할되어 각 단편의 사본이 여러 site에 저장
- 장애 투명성 : 구성요소(DBMS, Computer)의 장애에 무관한 Transaction의 원자성 유지
- 지역사상 투명성 : 지역적인 데이터베이스 관리시스템과 물리적 데이터베이스 사이의 매핑을 보장하는 성질이다.
- 분산 데이터 베이스의 장단점
- 장점
- 지역 자치성, 점중적 시스템 용량 확장
- 신뢰성과 가용성
- 효용성과 융통성
- 빠른 응답속도와 통신비용 절감
- 데이터의 가용성과 신뢰성 증가
- 시스템 규모의 적절한 조절
- 각 지역 사용자의 요구 수용 증대
- 단점
- 소프트웨어 개발 비용
- 오류의 잠재적 증대
- 처리 비용의 증대
- 설계, 관리의 복잡성과 비용
- 불규칙한 응답 속도
- 통제의 어려움
- 데이터 무결성에 대한 위협
- 장점
- 빠른 성능을 제공한다는 것이 가장 큰 가치
- 분산 데이터 베이스의 적용 기법
- 테이블 위치 분산
- 설계된 테이블 자체의 위치를 각각 다르게 위치시키는 것
- 위치를 파악할 수 있는 도식화된 위치별 데이터베이스 문서가 필요
- 테이블 분할 분산
- 각각의 테이블을 쪼개어 분산하는 방법
- 수평 분할 : 특정 컬럼 값을 기준으로 로우를 분리, 중복 x, 지사별로 사용 로우가 다를 때
- 수직 분할 : 칼럼을 기준으로 분리, 각 테이블에 동일한 PK가 있어야함
- 테이블 복제 분산
- 동일한 테이블을 다른 지역이나 서버에서 동시에 생성하여 관리하는 유형
- 부분복제(Segment Replication) : 마스터 데이터베이스에서 테이블의 일부의 내용만 다른 지역이나 서버에 위치시킴
- 광역복제(Broadcast Replication) : 마스터 데이터베이스의 테이블의 내용을 각 지역이나 서버에 존재시킴
- 테이블 요약 분산
- 지역간에 또는 서버 간에 데이터가 비슷하지만 서로 다른 유형으로 존재하는 경우
- 분석 요약 : 동일한 테이블 구조를 가지고 있으면서 분산되어 있는 동일한 내용의 데이터를 이용하여 통합된 데이터를 산출하는 방식 ex) 판매실적 : 지사A, 지사B
- 통합 요약 : 분산되어 있는 다른 내용의 데이터를 이용하여 통합된 데이터를 산출하는 방식 ex) 판매실적 : 지사A의 C제품, 지사B의 D제품
- 테이블 위치 분산
- 분산 데이터 베이스 설계를 적용하면 좋은 경우
- 성능이 중요한 사이트
- 테이블 복제 분산 공통코드, 기준정보, 마스터 데이터 등에 대해 분산환경을 구성하면 성능이 좋아짐
- 실시간 동기화가 요구되지 않는 경우
- 거의 실시간 업무적인 특징을 가지고 있는 경우
- 특정 서버에 부하가 집중이 되는 경우
- 백업 사이트를 구성하는 경우
'데이터베이스 > SQL' 카테고리의 다른 글
[SQL] SQL 활용(2) (0) | 2023.08.14 |
---|---|
[SQL] SQL 활용(1) (0) | 2023.08.08 |
[SQL] 기본 정리 (0) | 2023.07.31 |
[SQL] 데이터 모델링의 이해 (0) | 2023.07.17 |
데이터베이스 개념요약(데이터베이스, 관계형데이터베이스) (0) | 2023.04.21 |