💡 SQLD 자격증 시험 대비 학습한 내용을 요약정리합니다.
데이터 모델과 성능
성능 데이터 모델링
데이터 모델의 성능이 저하되는 경우
1 데이터 모델 구조에 의해 성능이 저하
2 데이터가 대용량화
3 인덱스 특성을 충분히 고려하지 않고 인덱스를 생성
성능 -> 데이터 조회의 성능을 의미-> 반복, 빈번하게 발생하며 여러 건을 처리하는 경우가 많이 때문
성능 데이터 모델링
: DB 성능 향상을 목적으로 설계 단계의 데이터 모델링때부터 성능과 관련된 사항(정규화, 반정규화, 테이블 통합, 테이블 분할, 조인구조, PK, FK 등 )이 데이터 모델링에 반영될 수 있도록 하는 것.
성능 데이터 모델링 수행 시점
데이터의 증가 속도 ↑ -> 성능 저하 -> 성능개선비용 ↑
사전(분석/설계 단계)에 할수록 비용↓
프로젝트 초기에 트랜잭션을 발생시켜 실제 성능을 테스트할 필요가 있다.
성능 데이터 모델링 고려사항
- 데이터 모델링 -> 정규화 정확하게 수행
- DB 용량 산정 수행 ( 각 엔티티에 어느 정도의 트랜잭션이 들어오는지 파악)
- DB에 발생되는 트랙잭션의 유형을 파악
- 용량, 트랜잭션의 유형에 따라 반정규화 수행
- 이력모델의 조정, PK/FK 조정, 슈퍼/서브 타입 조정등을 수행
- 성능관점에서 데이터 모델을 검증
정규화와 성능
정규화
: RDBMS 설계에서 데이터의 중복을 최소화하도록 구조화하는 프로세스 -> 중복 제거로 인해 데이터의 무결성을 보장
데이터의 무결성
데이터의 정확성, 일관성, 유효성이 유지되는 것
- 개체 무결성 : 모든 테이블은 기본 키를 가지며, 기본키는 고유한 값이다. (Null 허용 X)
- 참조 무결성 : 참조 관계에 있는 두 테이블의 데이터가 항상 일관된 값을 갖도록 유지하는 것
- 도메인 무결성 : 필드의 무결성을 보장하기 위한 것으로 필드의 타입이나 Nullable 등의 설정을 하는 것.
- 무결성 규칙 : 데이터의 무결성을 지키기 위한 모든 제약 사항
💡데이터를 처리할 때 성능 : 조회 성능, CRUD 성능
💡함수적 종속성 : 데이터들이 어떤 기준에 의해 종속되는 것
정규화 수행
데이터를 결정하는 결정자에 의해 함수적 종속을 가지고 있는 일반 속성을 의존자로 하여 CRUD 이상을 제거하는 것.
-> 중복 속성 제거, 동일한 범주의 일반 속성을 하나의 테이블로 집약
정규화 수행 데이터 모델의 성능
조회 성능은 처리 조건에 따라 다르다.
반정규화와 성능
반정규화
: 성능을 향상 시키기 위해 정규화된 데이터 모델(엔티티, 속성, 관계에 대한 시스템)에서 중복, 통합, 분리 등을 수행하는 모든 과정.
반정규화를 적용하는 이유
- 조회 시, 디스크 I/O량 증가로 성능 저하된 경우
- 경로가 멀어 조인으로 인한 성능 저하가 예상되는 경우
- 컬럼을 계산하여 읽을 때 성능이 저하된 경우
-> 조회에 대한 처리 성능이 중요하다 판단될 경우 부분적으로 반정규화를 고려한다.
반정규화는 중복성의 원리(테이블, 컬럼, 관계의 중복성)를 활용하여 데이터 조회 시, 성능을 향상시키는 역할을 할 수 있다.
🚨주의사항
보통 컬럼 중복을 통해서만 반정규화를 수행하나, 무분별한 컬럼 반정규화는 데이터 무결성을 깨트리는 결정적인 요인됨
반정규화의 적용방법
-
반정규화 대상조사
- 범위처리빈도수 조사
- 대량의 범위 처리 조사
- 통계성 프로세스 조사
- 테이블 조인 개수
-
다른 방법 유도 검토
- 뷰(View) 테이블
- 클러스터링 적용
- 인덱스의 조정
- 응용 애플리케이션
-
반정규화 적용
- 테이블 반정규화
- 속성의 반정규화
- 관계의 반정규화
반정규화 대상 조사
- 자주 사용되는 테이블에 접근하는 프로세스 수가 많고 항상 일정한 범위만을 조회하는 경우
- 테이블에 대량의 데이터가 있고 대량의 데이터 범위를 자주 처리하는 경우에 처리범위를 일정하게 줄이지 않으면 성능을 보장할 수 없는 경우
- 통계성 프로세스에 의해 통계 정보를 필요로 할 때, 별도의 통계테이블(*반정규화 테이블)을 생성
- 테이블에 지나치게 많은 조인이 걸려 데이터 조회 작업이 기술적으로 어려울 경우
다른 방법 유도 검토
데이터를 중복하여 데이터 무결성을 깨트릴 위험을 제어하기 위해 성능을 향상 시킬 수 있는 다른 방법을 모색
1. 지나치게 많은 조인이 걸려 데이터를 조회하는 작업이 기술적으로 어려운 경우 뷰(View)를 사용.
2. 대량의 데이터 처리나 부분 처리에 의해 성능이 저하되는 경우 클러스터링을 적용하거나 인덱스를 조정한다.
3. 대량의 데이터는 PK의 성경에 따라 부분 테이블로 분리할 수 있다.(파티셔닝 기법)
4. 응용 애플리케이션에서 로직을 구사하는 방법을 변경
💡 클러스터링
대량의 데이터를 특정 클러스터링 팩트에 의해 저장방식을 달리하는 방법으로, 조회 중심의 테이블이 아니라면 생성하지 않는다.
💡파티셔닝 기법
인위적인 테이블을 통합/분리하지 않고 물리적인 저장기법에 따라 성능을 향상시키는 기법
반정규화의 기법
테이블 반정규화(테이블 병합, 분할, 추가)
-
테이블 병합(1:1, 1:M, 슈퍼/서브 타입)
- 1:1 관계를 통합하여 성능 향상
- 1:M 관계를 통합하여 성능 향상
- 슈퍼/서브 관계를 통합하여 성능 향상
-
테이블 분할(수직, 수평 분할)
- 수직 : 컬럼 단위의 테이블을 디스크 I/O를 분산처리 하기 위해 테이블을 1:1로 분리하여 성능향상
- 수평 : 로우 단위로 집중 발생되는 트랜잭션을 분석하여 디스크 I/O 및 데이터 접근의 효율성을 높여 성능을 향상하기 위해 로우 단위로 테이블을 쪼갬
-
테이블 추가(중복, 통계, 이력, 부분 테이블 추가)
- 중복 : 다른 업무이거나 서버가 다른 경우 동일한 테이블 구조를 중복하여 원격조인을 제거
- 통계 : SUM, AVG 등을 미리 수행하여 계산
- 이력 : 이력 테이블 중에서 마스터 테이블에 존재하는 레코드를 중복하여 이력 테이블에 존재하는 방법
- 부분 : 하나의 테이블의 전체 컬럼 중 자주 이용하는 집중화된 컬럼이 있을 때 디스크 I/O를 줄이기 위해 해당 컬럼들을 모아놓은 별도의 반정규화 테이블 생성
컬럼 반정규화
- 중복 컬럼 추가 : 조인에 의해 처리할 때 성능 저하를 예방하기 위해 중복된 컬럼을 위치 시킴
- 파생 컬럼 추가 : 트랜잭션이 처리되는 시점에 계산에 의해 발생되는 성능 저하를 예방하기 위해 미리 값을 계산하여 컬럼에 보관
- 이력테이블 컬럼 추가 : 대량의 이력데이터를 처리 할 때 불특정 날 조회나 최근 값을 조회할 때 나타날 수 있는 성능저하를 예방하기 위해 이력테이블에 기 능성 칼럼(최근값 여부, 시작과 종료일자 등)을 추가
- 응용시스템 오작동을 위한 컬럼 추가 : 업무적으로 는 의미가 없지만 사용자의 실수로 원래 값으로 복구 하기 원하는 경우 이전 데이터를 임시적으로 중복하 여 보관하는 기법
관계 반정규화
중복 관계 추가 : 데이터를 처리하기 위한 여러 경로를 거쳐 조인이 가능하지만 이 때 발생할 수 있는 성능 저하를 예방하기 위해 추가적인 관계를 맺는 방법
💡 테이블, 컬럼 반정규화 : 데이터 무결성에 영향 O
관계 반정규화 : 데이터 무결성에 영향 X
대량 데이터에 따른 성능
대량의 데이터가 하나의 테이블에 집약되어 있고 하나의 하드웨어 공간에 저장되어 있으면 성능저하가 발생한다.
트랜잭션이 분산 처리될 수 있도록 테이블 단위에서 분할의 방법을 적용할 필요가 있다.
로우 체이닝
로우 길이가 너무 길어서 데이터 블록 하나에 데이터가 모두 저장되지 않고 두 개 이상의 블록에 걸쳐 하나의 로우가 저장되어 있는 형태
로우 마이그레이션
데이터 블록에서 수정이 발생하면 수정된 데이터를 해당 데이터 블록에서 저장하지 못하고 다른 블록에 빈 공간을 찾아 저장하는 방식
로우 체이닝, 로우 마이그레이션이 발생하여 많은 블록에 데이터가 저장되면 DB 메모리에서 디스크와 I/O가 발생할 때 불필요하게 I/O가 많이 발생하여 성능이 저하된다.
한 테이블에 많은 수의 컬럼을 가지고 있는 경우
컬럼수가 많은 테이블에서 데이터를 처리하게 되면 디스크 I/O양이 증가하여 성능이 저하됨
트랜잭션이 발생될 때 어떤 컬럼에 대해 집중적으로 발생하는지 분석하여 테이블을 쪼개어 주면 디스크I/O가 감소 -> 성능 개선
대량 데이터 저장 및 처리로 인한 성능
PK에 의해 테이블을 분할, 파티셔닝을 적용
- Range Partition 적용
대상 테이블이 날짜 또는 숫자값으로 분리가 가능하고 각 영역별로 트랜잭션 분리 경우
데이터 보관 주기에 다른 테이블 관리(삭제)가 용이
- List Partition 적용
PK가 구성되어 있고 대량의 데이터가 있는 테이블이 있는 경우
대용량 데이터를 특정값에 따라 분리 저장할 수 있으나 데이터 보관 주기에 따라 쉽게 삭제하는 기능은 없음.
- Hash Partition 적용
지정된 HASH 조건에 따라 해시 알고리즘이 적용되어 테이블이 분리
데이터 보관 주기에 따라 쉽게 삭제하는 기능은 없음.
테이블에 대한 수평/수직 분할의 절차
- 데이터 모델링을 완성한다.
- DB 용량산정을 한다.
- 대량 데이터가 처리되는 테이블에 대해 트랜잭션 처리 패턴 분석
- 컬럼, 로우 단위 중 어떤 것에 집중화 된 처리가 발생하는지 분석하여 해당 단위로 테이블을 분리하는 것을 검토
데이터베이스 구조와 성능
슈퍼/서브 타입 데이터 모델
: 업무를 구성하는 데이터의 특징을 공통, 차이점의 특징을 고려하여 효과적으로 표현하는 모델링 방법.
슈퍼 : 공통의 부분
서브 : 공통을을 상속받아 다른 엔티티와 차이가 있는 속성
논리적인 데이터 모델에서 이용되는 형태로 분석단계에서 많이 사용한다.
물리적인 데이터 모델을 설계하는 단계에서는 슈퍼/서브 타입 데이터 모델을 일정한 기준으로 변환할 필요가 있다.
슈퍼/서브 타입 데이터 모델의 변환 기준
: 데이터 양, 트랜잭션의 유형
슈퍼/서브 타입 데이터 모델의 변환 기술
- 개별로 발생되는 트랜잭션에 대해서는 개별 테이블로 구성
- OneToOne Type, 트랜잭션이 슈퍼, 서브 타입 각각에 대해 발생하는 것.
- 꼭 필요한 속성 및 자신이 타입에 맞는 데이터만 가지게 하기 위서 모두 분리하여 1:1관계를 갖도록 한다.
- 슈퍼+서브 타입에 대해 발생되는 트랜잭션에 대해서 슈퍼+서브 타입 테이블로 구성: Plus Type
- 전체를 하나로 묶어 트랜잭션이 발생할 때는 하나의 테이블로 구성 : Single Type, All in One Type
인덱스 특성을 고려한 PK/FK DB 성능 향상
PK가 여러 개의 속성으로 구성된 복합식별자일 때 PK 순서를 고려해야 한다. 다른 엔티티로부터 상속받아 발생되는 PK순서까지 항상 주의하여 표시한다.
PK는 해당테이블의 데이터를 접근할 가장 빈번하게 사용되는 유일한 인덱스를 모두 자동 생성한다.
인덱스의 특징은 여러 개의 속성이 하나의 인덱스로 구성되어 있을 때 앞쪽에 위치한 속성의 값이 비교자 로 있어야 좋은 효율을 나타낸다. 앞쪽에 위치한 속성의 값이 가급적 ‘=’ 아니면 최소한 범위 ‘BETWEEN’ ‘<>’ 가 들어와야 효율적이다.
분산 데이터베이스의 성능
- 여러 곳으로 분산되어 있는 DB를 하나의 가상 시스템으로 사용할 수 있도록한 DB
- 논리적으로 동일한 시스템에 속하지만, 컴퓨터 네트워크를 통해 물리적으로 분산되어 있는 데이터 집합
DB를 연결하는 빠른 네트워크 환경을 이용하여 DB를 여러 지역, 노드로 위치시켜 사용성/성능 등을 극대화 시킨 DB
분산 DB의 투명성
- 분할 투명성(단편화) : 하나의 논리적 Relation이 여러 단편으로 분할되어 각 단편의 사본이 여러 Site에 저장
- 위치 투명성 : 사용하려는 데이터의 저장 장소 명시 불필요. 위치 정보가 시스템 카테고리에 유지
- 지역사상 투명성 : 지역 DBMS와 물리적 DB사이의 Mapping 보장. 각 지역 시스템 이름과 무관한 이름 사용 가능
- 중복 투명성 : DB 객체가 여러 site에 중복 되어 있는지 알 필요가 없는 성질
- 장애 투명성 : 구성요소(DBMS, 컴퓨터)의 장애에 무관한 트랜잭션의 원자성 유지
- 병행 투명성 : 다수 트랜잭션 동시 수행 시 결과의 일관성 유지, Time Stamp, 분산 2단계 Locking을 이용 구현현
대량 데이터 처리의 지역적 처리나 글로벌 처리 등에서 분산 DB가 유용하게 활용되고 있다.
분산 DB의 장단점
- 장점 : 지역 자치성, 신뢰성 가용성, 효용성 융통성, 빠른 응답속도, 비용절감, 각 지역 사용자 요구 수용
- 단점 : 비용증가, 오류의 잠재성 증대, 설계 관리의 복잡성, 불규칙한 응답 속도, 통제의 어려움, 데이터 무결성 위협
DB 분산구성의 가치
네트워크 부하 및 트랜잭션 집중에 따른 성능 저하의 원인을 분산된 DB 환경을 구축하므로 빠른 성능 제공이 가능해짐
분산 DB 적용 기법
- 테이블 위치 분산 : 테이블의 구조 변화 X, 중복 생성 X, 설계된 테이블의 위치를 각 다르게 하는것(본사-지사)
정보를 이용하는 형태가 각 위치별로 차이가 있을 경우 사용
- 테이블 분할 분산 : 각 테이블을 쪼개어 분산하는 방법.
- 수평분할(로우) : PK에 의해 중복 발생 X, 각 지사(Node) 별로 사용하는 로우가 다를 경우 사용
- 수직분할(컬럼) : 각 테이블에는 동일한 PK를 가지기 때문에 쪼개진 걸 조합해도 중복 발생 X
- 테이블 복제 분산 : 동일한 테이블을 다른 지역이나 서버에서 동시에 생성하여 관리하는 유형.
- 부분복제 : 마스터 DB에서 테이블의 일부의 내용만 다른 지역이나 서버에 위치
- 광역복제 : 마스터 DB 테이블의 내용을 각 지역이나 서버에 존재
- 테이블 요약 분산 : 지역 간에 또는 서버 간에 데이터가 비슷하지만 서로 다른 유형으로 존재하는 경우
- 분석요약 : 동일한 테이블 구조를 가지고 있으면서 분산되어 있는 동일한 내용의 데이터를 이용하여 통합된 데이터를 산출하는 방식
- 통합요약 : 분산되어 있는 다른 내용의 데이터를 이용하여 통합된 데이터를 산출하는 방식
분산 DB 설계를 고려해야 하는 경우
- 성능이 중요한 사이트
- 공통코드, 기준정보, 마스터 데이터의 성능향상
- 실시간 동기화가 요구되지 않는 경우, 거의 실시간의 업무적인 특징을 가지고 있는 경우
- 특정 서버에 부하가 집중되어 부하를 분산
- 백업 사이트 구성하는 경우