성능 데이터 모델링
성능 데이터 모델링의 정의
데이터베이스 성능 향상을 목적으로 설계단계의 데이터 모델링 때부터 정규화, 반정규화, 테이블통합, 테이블분할, 조인구조, PK, FK 등 여러 가지 성능과 관련된 사항이 데이터 모델링에 반영될 수 있도록 하는 것.
모델링 시점
- 성능 향상을 위한 비용은 프로젝트 수행 중에 있어서 사전에 할수록 비용이 들지 않음.
- 분석/설계 단계에서 데이터 모델에 성능을 고려한 데이터 모델링을 수행할 경우, 성능 저하에 따른 재업무 비용을 최소화할 수 있음.
- 분석/설계 단계에서 데이터베이스 처리 성능을 향상 시킬 수 있는 방법을 주도면밀하게 고려해야 함.
고려사항
- 데이터 모델링을 할 때 정규화를 정확하게 수행한다.
- 데이터베이스 용량 산정을 수행한다.
- 데이터베이스에 발생되는 트랜잭션의 유형을 파악한다.
- 용량과 트랜잭션의 유형에 따라 반 정규화를 수행한다.
- 이력 모델의 조정, PK/FK 조정, 슈퍼 타입/서브타입 조정 등을 수행한다.
- 성능관점에서 데이터 모델을 검증한다.
정규화와 성능
정규화의 정의
- 데이터를 결정하는 결정자에 의해 함수적 종속성을 가지고 있는 일반 속성을 의존자로 하여 입력/수정/삭제 이상현상을 제거하는 것.
- 데이터의 중복 속성을 제거하고 결정자에 의해 동일한 의미의 일반 속성이 하나의 테이블로 집약됨.
- 한 테이블의 데이터 용량이 최소화되는 효과를 가짐.
- 정규화된 테이블은 데이터를 처리할 때 속도가 빨리질 수도 있고 느려질 수도 있는 특성을 가짐.
- 정규화된 데이터모델은 조회 시에는 처리 조건에 따라 성능이 향상 혹은 저하 된다.
- 정규화된 데이터모델은 입력/수정/삭제 시 무조건 성능이 향상된다.
정규화 용어
- 정규화 : 관계형 데이터베이스 테이블의 삽입,삭제,갱신에 대한 이상 현상 발생 빈도를 최소화하기 위해 좀 더 작은 테이블 단위로 테이블을 설계하는 과정.
- 정규형 : 정규화 결과에 의해 도출된 데이터 모델이 갖춰야 할 특성.
- 함수적 종속성 : 식별 되는 속성에 다른 일반 속성을 알 수 있는 특성.
- 결정자 : 식별자 역할을 하는 속성을 의미함.
- 다치종속 : 결정자 컬럼에 의해 하나의 일반 속성으로 여러 값을 알 수 있다고 하면 다치종속이 되었다고 함.
정규화 효과 및 장점
- 종속성이 강한 데이터 요소들을 분리, 독립된 개념으로 정의하게 됨에 따라 높은 응집도와 낮은 결합도를 가지며, 데이터의 유연성이 높아짐.
- 개념이 세분화됨에 따라 해당 개념에 대한 재활용 가능성이 높아짐.
- 일반 속성들이 한번만 표현하게 됨으로써 중복이 최소화됨.
정규화 이론
- 1차 정규화 : 복수의 속성값을 갖는 속성을 분리, 속성의 원자성을 확보.
- 2차 정규화 : 주식별자에 완전종속적이지 않은 속성의 분리 (부분종속 속성을 분리)
- 3차 정규화 : 일반속성에 종속적인 속성의 분리 (이전종속 속성을 분리)
- 보이스 정규화 : 결정자안에 함수종속을 가진 주식별자 분리
- 4차 정규화 : 다가 종속 속성 분리.
- 5차 정규화 : 결합종속일 경우는 두개 이상의 N개로 분리.
제1 정규형
- 모든 속성은 원자 값을 가져야 함.
- 다중 값을 가질 수 있는 속성은 분리되어야 함.
연락처에 두 가지 값이 포함되어 있으므로 제1 정규형을 위반하였다고 할 수 있음.
두 개의 값을 가진 컬럼을 개별로 나누어 저장하게 하여 제1 정규형을 만족시키도록 하였음.
제2 정규형
- 제1 정규형을 만족하는 상태에서 모든 일반 컬럼은 기본 키 전체에 종속되어야 함.
- 기본 키에 종속되지 않거나 기본 키 일부 컬럼에만 종속 적인 컬럼은 분리되어야 함.
고객아이디는 고객명과 고객등급을 나타낼 수 있고, 주문 순번은 주문일자를 나타낼 수 있음. 그렇기 때문에 두 개를 나누어야 함.
제3 정규형
- 제2 정규형을 만족하는 상태에서 일반속성들 간에도 종속관계가 존재하지 않아야 함.
- 일반 속성들 간 종속관계가 존재하는 것들을 분리하여야 함.
직업코드와 직업명이 함수 종속을 가지고 있어 별도의 테이블로 구분해야 함.
정규화와 성능
- 정규화된 테이블을 조회시 인덱스를 사용하여 연산을 수행하게 될 경우, 성능 상의 단점은 없음.
- 정규화를 진행하면서 소량의 테이블이 생성하고 조회 시 소량의 테이블을 먼저 읽고 다른 테이블을 읽게 된다면 성능상 유리할 수 있음.
- 정규화가 위반이 된 테이블은 여러개의 인덱스가 필요하지만 정규화가 되고 난 후에는 하나의 인덱스만 있으면 됨.
함수적 종속성
- 함수의 종속성은 데이터들이 어떤 기준값에 의해 종속되는 현상을 의미.
- 이 때 기준값을 결정자라 하고 종속되는 값을 종속자라고 함.
반정규화와 성능
반정규화의 정의
- 데이터를 중복하여 성능을 향상시키는 기법을 말함.
- 데이터를 조회할 때 디스크 I/O량이 많아서 성능이 저하되거나 경로가 너무 멀어 조인으로 인한 성능저하가 예상될 때, 반정규화를 수행함.
반정규화의 기법 - 테이블 반정규화
기법분류 | 기법 | 내용 |
테이블 병합 | 1:1 관계 테이블 병합 | 1:1 관계를 통합 |
1:M 관계 테이블 병합 | 1:M 관계를 통합 | |
슈퍼/서브타입 테이블 병합 | 슈퍼/서브관계를 통합 | |
테이블 분할 | 수직분할 | 컬럼 단위로 테이블을 분할 |
수평분항 | 로우 단위로 테이블을 분할 | |
테이블 추가 | 중복 테이블 추가 | 동일한 테이블 구조를 중복으로 생성 |
통계 테이블 추가 | SUM, AVG를 미리 계산한 테이블 생성 | |
이력 테이블 추가 | 이력 컬럼만 분리하여 테이블 생성 | |
부분 테이블 추가 | 자주 사용되는 컬럼만 분리하여 생성 |
반정규화의 기법 - 칼럼의 반정규화
기법 | 내용 |
중복 칼럼 추가 | 조인을 감소 시키기 위해 중복된 칼럼을 추가 |
파생 칼럼 추가 | 미리 계산한 값을 가지는 칼럼 추가 |
이력 테이블 칼럼 추가 | 불특정한 조회 처리를 하기위한 이력 칼럼 추가 |
PK에 의한 칼럼 추가 | 복합 식별자를 단일 식별자로 변경하면서 일어나는 반정규화 |
응용시스템의 오작동을 위한 칼럼 추가 | 변경 전 데이터를 저장하는 방식으로 사용할 때. |
반정규화의 기법 - 관계 반정규화
기법 | 내용 |
중복 관계 추가 | 다른 데이터 검색을 좀 더 효율적으로 하기위해 추가적인 관계를 맺는 방식 |
대량 데이터에 따른 성능
대량 데이터발생에 따른 테이블 분할 개요
- 대량의 데이터가 존재하는 테이블에 많은 트랜잭션이 발생하여 성능이 저하될 가능성이 큼.
- 이를 예방하기 위해 수평/수직 분할 설계를 적용함.
- 수직분할은 정규화를 진행하여 분할 할 수 있음.
- 수평분할은 데이터를 월별 테이블을 통해 관리하는 등에 방식으로 분할 가능함.
- 칼럼이 많아지게 되면 하나의 로우를 저장 시 여러 물리적인 디스크 공간에 저장될 가능성이 큼.
- 결국은 여러 개의 블록을 읽어 들이게 됨.
대용량 테이블에서 발생할 수 있는 현상
- 로우체이닝 : 로우 길이가 너무 길어서 데이터 블록 하나에 데이터가 저장되지 못하고, 두 개 이상의 블록에 걸쳐 하나의 로우가 저장되는 현상.
- 로우 마이그레이션 : 데이터 블록에서 수정이 발생되면 수정된 데이터를 해당 데이터 블록에 저장하지 못하고 다른 블록의 빈 공간을 찾아 저장하는 방식.
HASH PARTITION
- 지정된 해싱 알고리즘에 따라 적용되어 테이블이 분리되는 것을 말함.
- 설계자는 테이블에 데이터가 정확하게 어떻게 들어갔는지 알 수 없음.
- 성능향상을 위해 사용하며 데이터 보관 주기에 따라 쉽게 삭제하는 기능은 제공하지 않음.
테이블 분할 절차
- 데이터 모델링을 완성한다
- 데이터베이스 용량 산정을 한다 .
- 대량 데이터가 처리되는 테이블에 대해서 트랜잭션 처리 패턴을 분석한다
- 칼럼 단위로 집중화된 처리가 발생하는지 , 로우 단위로 집중화된 처리가 발생되는지 분석하여 집중화된 단위로 테이블을 분리하는 것을 검토한다.
데이터베이스 구조와 성능
슈퍼 타입/서브타입 모델
- 공통되는 부분을 슈퍼타입 엔티티로 모델링하고 다른 엔티티와 차이가 있는 속성에 대해서는 별도의 서브타입 엔티티로 구분.
슈퍼/서브타입 모델 변환
- 슈퍼타입(Single 타입, All in One 타입)
- 하나의 테이블로 구성하는 것을 말함.
- 서브타입(Plus타입, Super+Sub 타입)
- 서브타입 테이블만으로 구성하는 것을 말함.
- 도출된 각각의 테이블은 슈퍼 엔티티가 가진 컬럼을 공통적으로 가지고 있어야 함.
- 개별타입(OneToOne타입, 1:1 타입)
- 슈퍼, 서브타입 테이블을 모두 각각 구성하는 것을 말함.
트랜잭션
- 트랜잭션이 항상 슈퍼타입 기준으로 처리되는 경우 + 테이블이 개별 또는 서브타입으로 처리된 경우, UNION ALL 연산에 의해 성능저하 발생. (슈퍼타입 모델로 변경 필요)
- 트랜잭션이 항상 서브타입 기준으로 처리되는 경우 + 테이블이 슈퍼타입 또는 개별타입으로 처리 되어진 경우, 비효율이 발생 가능(서브타입으로 변경 필요)
- 트랜잭션이 항상 개별타입 기준으로 처리되는 경우 + 테이블이 슈퍼타입으로 되어 있는 경우, 항상 많은 데이터를 불러들여 성능저하 발생. (개별타입으로 변경 필요)
데이터 모델 변환 타입 비교
구분 | 슈퍼타입 | 서브타입 | 개별타입 |
특징 | 하나의 테이블 | 각각의 서브타입 테이블 | 슈퍼/서브 각각의 테이블 |
확장성 | 나쁨 | 보통 | 좋은 |
조인성능 | 우수함 | 나쁨 | 나쁨 |
I/O 성능 | 나쁨 | 좋음 | 좋음 |
관리용이성 | 좋음 | 나쁨 | 나쁨 |
유형에 따른 트랜잭션 처리 방법 | 전체 데이터를 일괄적으로 처리 | 각각의 서브타입 기준으로 처리 | 각각의 슈퍼 서브 타입을 기준으로 처리 |
PK/FK 칼럼 순서와 성능
- 테이블에 발생되는 트랜잭션 조회 패턴에 따라 PK/FK 컬럼의 순서를 조정해야 함.
- 복합 식별자로 테이블을 구성하고 순서를 의식하지 하고 인덱스를 구성할 경우, 비효율이 발생.
- 가능한 equal 조건에 맞도록 인덱스를 구성하는 것이 좋음.
- 인덱스가 없는 경우 테이블 전체를 읽어 들임.
- 테이블에 FK 제약조건이 없는 경우, 자동으로 인덱스를 생성하지 않는 문제가 발생함. 자주 이용되는 컬럼인 경우 의식적으로 인덱스 추가 필요.
분산 데이터베이스와 성능
개요
- 여러 곳으로 분산되어 있는 데이터베이스를 하나의 가상 시스템으로 사용할 수 있도록 한 데이터베이스
- 논리적으로 동일한 시스템에 속하지만 물리적으로 분산되어 있는 데이터들의 모음.
분산 데이터베이스의 투명성
투명성 | 설명 |
분할 투명성(단편화) | 하나의 논리적 Relation이 여러 단편으로 분할되어 각 단편의 사본이 여러 site에 저장 |
위치 투명성 | 사용하려는 데이터의 저장 장소 명시 불필요. 위치정보가 System Catalog에 유지되어야 함. |
지역 사상 투명성 | 지역 DBMS와 물리적 DB 사이의 Mapping을 보장. |
중복 투명성 | DB 객체가 여러 site에 중복 되어 있는지 알 필요가 없는 성질 |
장애 투명성 | 트랜잭션 원자성 유지 |
병행 투명성 | 다수 트랜잭션을 동시 수행하여도 일관성을 유지 |
장단점
장점 | 단점 |
지역자치성, 점증적 시스템 용량확장 | 소프트웨어 개발 비용 |
신뢰성과 가용성 | 오류의 잠재성 증대 |
효용성과 융통성 | 처리 비용 증대 |
빠른 응답 속도와 통신비용 절감 | 설계, 관리의 복잡성 그리고 비용 증가 |
데이터의 가용성과 신뢰성 증가 | 불규칙한 응답 속도 |
시스템의 규모의 적절한 조절 | 통제의 어려움 |
각 지역 사용자의 요구 수용 증대 | 데이터 무결성에 대한 위협 |
분산 데이터베이스의 적용 기법
기법 | 설명 |
테이블 위치 분산 | 설계된 테이블의 위치를 각각 다르게 위치시키는 것 |
테이블 분할 분산 | 수평분할 / 수직분할 등으로 나누어진 테이블을 쪼개어 분산하는 방법 |
테이블 복제 분산 | 부분복제 / 광역복제 등으로 동일한 테이블을 다른 지역의 서버에 생성하는 방법 |
테이블 요약 분산 | 분석요약 / 통합요약을 통해 도출된 결과를 각각의 서버에서 관리하는 방법 |
'Backend > DataBase' 카테고리의 다른 글
SQLD 최적화 (0) | 2023.11.08 |
---|---|
SQL 활용 (0) | 2023.11.07 |
SQL 기본 (1) | 2023.11.07 |
SQL vs NoSQL (1) | 2023.11.03 |
데이터 모델의 이해 (0) | 2023.10.29 |