성능 데이터 모델링
성능 데이터 모델링은 데이터베이스 성능을 향상시키기 위해 설계 단계부터 정규화, 반정규화, 테이블 통합, 테이블 분할, 조인 구조, PK(Primary Key), FK(Foreign Key) 등 다양한 요소를 고려하여 데이터 모델을 설계하는 것이다. 이는 데이터의 증가가 빠를수록 성능 저하에 따른 성능 개선 비용이 증가하기 때문에 중요하다.
고려사항
- 정규화 수행: 데이터 중복을 최소화하고 데이터의 일관성을 유지하기 위해 정규화를 정확하게 수행해야 한다.
- 데이터베이스 용량 산정: 전체 트랜잭션의 유형과 양을 분석하여 데이터베이스 용량을 산정해야 한다.
- 용량산정: 전체적인 데이터베이스에 발행되는 트랜잭션의 유형과 양을 분석하는 자료
- 트랜잭션 유형 파악: 발생하는 트랜잭션의 유형을 파악하여 성능 향상을 위한 조치를 고려해야 한다.
- 반정규화 수행: 용량과 트랜잭션의 유형에 따라 반정규화를 수행하여 성능을 향상시켜야 한다.
- 이력 모델 조정: 이력 데이터의 성능 고려를 위해 모델을 조정해야 한다. (PK/FK 조정, 슈퍼타입/서브타입 조정 등)
- 성능 관점에서 데이터 모델 점검: 설계 단계에서 성능을 고려하여 데이터 모델을 점검하고 개선해야 한다.
정규화
정규화는 데이터를 결정하는 결정자에 의해 함수적 종속을 가지고 있는 속성을 의존자로 하여 입력/수정/삭제 이상을 제거하는 과정이다. 정규화를 통해 특정 종류의 종속성을 해결하고 데이터 이상(Anomaly)을 방지한다.
- 함수적 종속성 (Functional Dependency): 데이터들이 어떤 기준값에 의해 종속되는 현상이며, 기준값는 결정자고, 종속되는 값이 종속자에 해당된다.
정규화에 대한 설명은 추후 기재 예정 (1차: 중복 속성에 대한 분리, 2차, 3차 정규화)
반정규화
반정규화는 성능 향상을 목적으로 정규화된 엔터티, 속성, 관계에 대해 중복, 통합, 분리 등을 수행하는 데이터 모델링 기법이다. 데이터 조회 시 디스크 I/O를 줄이기 위해 사용된다. 반정규화 시 데이터 무결성을 보장할 수 있는 방법을 고려해야 한다.
반정규화 절차
- 반정규화 대상 조사: 자주 사용되는 테이블에 접근하는 패턴을 분석하여 대상을 선정하거나, 대량 데이터 처리에서 성능을 보장할 수 없을 경우 검토한다. 별도의 통계 테이블을 생성하거나 조인의 개수를 고려하여 반정규화 대상으로 삼을 수 있다.
- 다른 방법 유도 검토: 뷰(view) 테이블, 클러스터링, 인덱스 조정 등을 고려한다.
- 파티셔닝(Partitioning): 논리적으로는 하나의 테이블이지만 물리적으로는 여러 개의 테이블로 분리하는 기법
- 반정규화 적용: 테이블, 속성, 관계에 대해 반정규화를 수행한다.
반정규화 기법
반정규화 기법은 테이블, 칼럼, 관계 반정규화로 구분할 수 있다.
- 테이블 반정규화
기법 분류 | 기법 | 내용 |
테이블 병합 | 1:1 관계 테이블 병합 | 1:1 관계를 통합하여 성능 향상 |
1:M 관계 테이블 병합 | 1:M 관계를 통합하여 성능 향상 | |
슈퍼/서브타입 테이블 병합 | 슈퍼/서브 관계를 통합하여 성능 향상 | |
테이블 분할 | 수직 분할 | 칼럼 단위의 테이블을 디스크 I/O를 분산처리하기 위해 테이블을 1:1로 분리 (트랜잭션의 처리되는 유형을 파악하는 게 선행되어야 함) |
수평 분할 | 로우 단위로 집중 발생되는 트랜잭션을 분석하여 디스크 I/O 및 데이터 접근의 효율성을 높여 성능을 향상하기 위해 로우 단위로 테이블을 쪼갬 | |
테이블 추가 | 중복 테이블 추가 | 다른 업무거나 서버가 다른 경우 동일한 테이블 구조를 중복하여 원격 조인을 제거 |
통계 테이블 추가 | SUM, AVG 등을 미리 수행하여 계산해 둠으로써 조회 시 성능 향상 | |
이력 테이블 추가 | 이력 테이블 중에서 마스터 테이블에 존재하는 레코드를 중복하여 이력 테이블에 존재하는 방법 | |
부분 테이블 추가 | 하나의 테이블의 전체 칼럼 중 자주 이용하는 집중화된 칼럼이 있을 때 디스크 I/O를 줄이기 위해 해당 칼럼을 모아놓은 별도의 반정규화된 테이블 생성 |
- 칼럼 반정규화
반정규화 기법 | 내용 |
중복 칼럼 추가 | 조인에 의해 처리할 때 성능 저하를 예방하기 위해 중복된 칼럼 위치 |
파생 카럼 추가 | 트랜잭션이 처리되는 시점에 계산에 의해 발생되는 성능 저하를 예방하기 위해 미리 값을 계산하여 칼럼에 보관 (Derived Column) |
이력 테이블 칼럼 추가 | 대량의 이력 데이터를 처리할 때 불특정 날 조회나 최근 값을 조회할 때 나타날 수 있는 성능 저하를 예방하기 위해 이력 테이블에 기능성 칼럼(최근값 여부, 시작과 종료 일자 등) 추가 |
PK에 의한 칼럼 추가 | 복합 의미를 갖는 PK를 단일 속성으로 구성하였을 경우 발생. 단일 PK 안에서 특정 값을 별도로 조회하는 경우 성능 저하가 발생될 수 있음. 이때 이미 PK 안에 데이터가 존재하지만 성능 향상을 위해 일반 속성으로 포함하는 방법 |
응용시스템 오작동을 위한 칼럼 추가 | 업무적으로는 의미가 없지만 사용자가 데이터 처리를 하다 잘못 처리하여 원리 값으로 복구를 원하는 경우 이전 데이터를 임시적으로 중복하여 보관하는 기법. 칼럼으로 보관하는 방법은 오작동 처리를 위한 임시적인 기법이지만 이력 데이터 모델로 풀어내면 정상적인 데이터 모델의 기법이 될 수 있음 |
- 관계 반정규화
- 중복 관계 추가: 데이터를 처리하기 위한 여러 경로를 거쳐 조인이 가능하지만 이때 발생할 수 있는 성능 저하를 예방하기 위해 추가적인 관계를 맺는 방법
대량 데이터에 따른 성능
많은 블록에 데이터가 저장되면 로우 체이닝과 로우 마이그레이션이 발생하여 DB 메모리에서 디스크 I/O가 발생할 때 많은 I/O가 발생하여 성능이 저하될 수 있다. 대량 데이터 처리 시 성능을 향상시키기 위해 파티셔닝을 적용하거나 PK에 의해 테이블을 분할하는 방법을 사용한다.
- 로우 체이닝 (Row Chaining): 로우 길이가 너무 길어서 데이터 블록 하나에 데이터가 모두 저장되지 않고 두 개 이상의 블록에 걸쳐 하나의 로우가 저장되어 있는 형태를 말한다.
- 로우 마이그레이션 (Row Migration): 데이터 블록에서 수정이 발생하면 수정된 데이터를 해당 데이터 블록에서 저장하지 못하고 다른 블록의 빈 공간을 찾아 저장하는 방식이다.
파티셔닝 기법
- List Partition (특정값 지정): 핵심적인 코드값으로 PK가 구성되어 있고 대량의 데이터가 있는 테이블의 경우에 사용한다.
- Range Partition (범위): 대상 테이블이 날짜 또는 숫자 값으로 분리가 가능하고 각 영역별로 트랜잭션이 분리되는 경우에 사용한다.
- Hash Partition (해쉬 적용): 지정된 HASH 조건에 따라 해시 알고리즘이 적용되어 테이블이 분리될 때 사용한다.
테이블에 대한 수평/수직 분할 절차
- 데이터 모델링을 완성한다.
- 데이터베이스 용량산정을 한다.
- 대량 데이터가 처리되는 테이블에 대해 트랜잭션 처리 패턴을 분석한다.
- 칼럼 단위(수평 분할 필요)로 집중화된 처리가 발생하는지, 로우 단위(수직 분할 필요)인지 확인하여 테이블을 분리, 검토한다.
데이터베이스 구조와 성능
- Extended ER모델 (슈퍼/서브타입 데이터 모델): 업무를 구성하는 데이터를 공통과 차이점의 특징을 고려한 표현이다. 공통의 부분을 슈퍼 타입, 공통으로부터 상속받아 다른 엔터티와 차이가 있는 속성에 대해서는 별도의 서브엔터티로 구분한다. 변환 타입으로는 OneToOne Type, Plus Type, Single Type이 있다. 각각의 특징은 다음과 같다.
- OneToOne Type: 개별로 발생하는 트랜잭션에 대해 개별 테이블로 구성
- Plus Type: 슈퍼타입 + 서브타입으로 발생하는 트랜잭션에 대해 슈퍼타입 + 서브타입 테이블로 구성
- Single Type: 전체를 일괄적으로 처리하는 경우 하나의 테이블로 구성
- 인덱스 특성 고려: 여러 개의 속성이 하나의 인덱스로 구성되어 있을 때 앞쪽에 위치한 속성의 값이 비교자(가급적 '=' 연산자)로 있어야 좋은 효율을 나타낸다.
분산 데이터베이스
분산 데이터베이스는 여러 지역에 데이터가 분산되어 있는 데이터베이스를 하나의 가상 시스템으로 사용할 수 있도록 한데이터베이스로, 논리적으로는 하나의 시스템으로 인식되지만 컴퓨터 네트워크를 통해 물리적으로는 분산되어 있는 데이터 집합을 말한다.
투명성 (Transparency)
- 분할 투명성: 하나의 논리적 Relation이 여러 단편으로 분할되어 각 사본이 여러 site에 저장된다.
- 위치 투명성: 사용하려는 데이터의 저장 장소를 명시할 필요가 없다. 위치 정보는 System Catalog에 유지된다.
- 지역 사상 투명성: 지역 DBMS와 물리적 DB 사이의 Mapping을 보장한다.
- 중복 투명성: DB 객체가 여러 site에 중복되어 있는지 알 필요가 없다.
- 장애 투명성: 구성요소의 장애에 무관한 Transaction의 원자성을 유지한다.
- 병행 투명성: 다수 Transaction 동시 수행 시 결과의 일관성을 유지한다.
장점 및 단점
장점 | 단점 |
- 지역 자치성, 점증적 시스템 용량 확장 - 신뢰성 & 가용성 - 효용성 & 융통성 - 빠른 응답 속도와 통신비용 절감 - 시스템 규모의 적절한 조절 - 각 지역 사용자의 요구 수용 증대 |
- 소프트웨어 개발 비용 - 오류의 잠재성 증대 - 처리 비용의 증대 설계, 관리의 복잡성과 비용 - 불규칙한 응답 속도 - 통제의 어려움 - 데이터 무결성에 대한 위험 |
적용 기법
- 테이블 위치 분산: 설계된 테이블의 위치를 각각 다르게 위치시킨다. (ex. 본사와 자사 단위)
- 테이블 분할 분산: 각각의 테이블을 쪼개어 분산한다.
- 수평 분할: 테이블 로우 단위로 분리한다. 데이터를 한군데 집합시켜도 PK에 의해 중복이 발생하지 않는다.
- 수직 분할: 테이블 칼럼 단위로 분리한다. 각각의 테이블에 동일한 PK 구조와 값을 가지고 있어야 한다.
- 테이블 복제 분산: 동일한 테이블을 다른 지역이나 서버에서 동시에 생성한다. 마스터 DB에서 일부만 복제하는 부분 복제와 마스터 DB 전체를 복제하는 광역 복제가 있다.
- 테이블 요약 분산
- 분석 요약: 분산되어 있는 동일한 내용의 데이터를 이용하여 통합된 데이터를 산출한다.
- 통합 요약: 분산되어 있는 다른 내용의 데이터를 이용하여 통합된 데이터를 산출한다.
'SQLD' 카테고리의 다른 글
[SQLD] 1과목: 데이터 모델링의 이해 - 엔터티, 속성, 관계, 식별자 (0) | 2023.11.05 |
---|---|
[SQLD] 1과목: 데이터 모델링의 이해 (1) | 2023.11.01 |