2. 데이터 모델과 성능

 

. 데이터모델링 

– 데이터의 증가가 빠를수록 성능저하에 따른 성능개선비용은 증가한다.

– 데이터모델은 성능을 튜닝하면서 변경이 될 수 있는 특징이 있다.

– 분석/설계 단계에서 성능을 고려한 데이터모델링을 수행할 경우 성능 저하에 따른 Rework비용을 최소화 할 수 있는 기회를 가지게 된다.

 

– 데이터모델링을 할 때 정규화를 정확하게 수행한다.

– 데이터베이스 용량산정을 수행한다.

– 데이터베이스에 발생되는 트랜잭션의 유형을 파악한다,

– 용량과 트랜잭션의 유형에 따라 반정규화를 수행한다.

– 이력모델의 조정, PK/FK조정, 슈퍼타입/서브타입 조정등을 수행한다.

 

. 모델링 순서

– 데이터 모델링을 할 때 정규화를 정확하게 수행한다.

– 데이터베이스 용량산정을 수행한다.

– 데이터베이스에 발생되는 트랜잭션의 유형을 파악한다.

– 용량과 트랜잭션의 유형에 따라 반정규화를 수행한다.

– 이력모델의 조정, PK/FK조정, 슈퍼타입/서브타입 조정 등을 수행한다.

– 성능관점에서 데이터 모델을 검증한다.

 

. 성능데이터 모델링 고려사항

– 용량산정은 전체적인 데이터베이스에 발생되는 트랜잭션의 유형과 양을 분석하는 자료가 되므로 성능데이터 모델링을 할 때 중요한 작업이 될 수 있다.

– 물리적인 데이터 모델링을 할때 PK/FK의 칼럼의 순서조정, FK인덱스 생성 등은 성능 향상을 위한 데이터 모델링 작업에 중요한 요소가 된다.

– 이력데이터는 시간에 따라 반복적으로 발생이 되기 때문에 대량 데이터일 가능성이 높아 특별히 성능을 고려하여 칼럼 등을 추가하도록 설계해야 한다.

 

. 필요한 정규화 설명

– 2차 정규화 – 정규화테이블(관서번호, 관리점번호, 관서명, 상태, 관서 등록일자)

3

 

. 엔터티 설명(일자별매각물건)

– 2차 정규화가 필요한 엔터티로서 매각기일과 일자별매각물건으로 1:M관계가 될 수 있다.

4

 

. 테이블 현상 설명

– 유형기능분류코드 각각에 대하여 개별로 Index를 모두 생성할 경우 입력, 수정, 삭제 때 성능이 저하되므로 제1차 정규화를 수행한 후 인덱스를 적용하는 것이 좋다.

5

 

 

. 테이블 설명

– 1차 정규화가 필요한 엔터티로서 일재고와 일재고상세로 1:M의 관계가 될 수 있다.

6

 

. 정규형과 정규화 대상

– 1차 정규형 – 2차 정규화 대상

7

 

. 반정규화시 고려사항

– 반정규화 정보에 대한 재현의 적시성으로 판단한다. 예를 들어, 빌링의 잔액(balance)은 다수 테이블에 대한 다량의 조인이 불가피하므로 데이터 제공의 적시성 확보를 위한 필수 반정규화 대상 정보이다.

 

. 디스크 I/O를 줄이기 위해 해당 칼럼들을 별도로 모아놓은 반정규화 기법

– 테이블추가 – 부분테이블 추가

 

. 테이블의 반정규화

기법분류 반정규화 기법
테이블병합 1:1 관계 테이블병합
1:M 관계 테이블병합
슈퍼/서브타입 테이블병합
테이블분할 수직분할
수평분할
테이블추가 중복테이블 추가
통계테이블 추가
이력테이블 추가
부분테이블 추가

 

. 칼럼의 반정규화

반정규화 기법
중복칼럼 추가
파생칼럼 추가
이력테이블 칼럼추가
PK에 의한 칼럼 추가
응용시스템 오작동을 위한 칼럼 추가

 

. 칼럼 반정규화 기법

– 중복칼럼을 추가 – 조인감소를 위해 여러 테이블에 동일한 칼럼을 갖도록 한다.

– 파생칼럼을 추가한다 – 조회 성능을 우수하게 하기 위해 미리 계산된 칼럼을 갖도록 한다.

– 이력테이블에 기능 칼럼을 추가한다 – 최신값을 처리하는 이력의 특성을 고려하여 기능성 칼럼을 추가한다.

 

. 조회를 빠르게 수행하기 위한 반정규화 방법

– 주문 엔터티에 단가를 합한 계산된 칼럼을 추가하도록 한다.

9

 

 

. 데이터모델 설명

– 데이터를 조회할 때 과도한 조인으로 인해 조회성능이 저하될 수 있으므로 공급자 테이블에 가장 빈번하게 조회되는 값인 최근 변경값에 해당하는 전화번호, 메일주소, 위치를 반정규화하여 조회 성능을 향상 시킬 수 있다.

– 전화번호, 메일주소, 위치에 대한 가장 최근에 변경된 값을 알 수 있도록 최신여부 라는 속성을 추가함으로써 최근 값을 찾기 위한 조회 성능 저하를 예방할 수 있다.

– 조회 성능을 위해서는 하나의 테이블로 통합하여 전화번호, 메일주소, 위치 등이 변경될 경우 전체 속성이 계속 발생되는 이력의 형태로 설계 될 수 있다. 이럴 경우 조회에 대한 성능은 향상이 되나, 과도한 데이터가 한 테이블에 발생하게 되어 용량이 너무 커지는 단점이 있다.

스크린샷 2024 08 18 13.39.46

 

. 칼럼수가 많은 테이블에 대한 설명

– 로우체이닝이 발생할 정도로 한 테이블에 많은 칼럼들이 존재할 경우 조회성능저하가 발생할 수 있다. 트랜잭션이 접근하는 칼럼유형을 분석하여 1:1로 테이블을 분리하면 디스크 I/O가 줄어들어 조회 성능을 향상 시킬 수 있다.

 

. 데이터 액세스 성능향상 방법

– 하나의 테이블에 많은 양의 데이터가 저장되면 인덱스를 추가하고 테이블을 몇 개로 쪼개도 성능이 저하되는 경우가 있다. 이때 논리적으로는 하나의 테이블이지만 물리적으로는 여러 개의 테이블로 분리하여 데이터 액세스 성능도 향상시키고, 데이터 관리방법도 개선할 수 있도록 테이블에 적용하는 기법을 Partitioning 이라고 한다.

 

. 데이터 모델과  SQL문에 개선해야 할 사항

– 긴급사건, 특수사건, 일반사건을 하나의 테이블로 통합하고 PK를 사건 분류코드 + 사건번호로 조합하여 구성하도록 한다.

11

 

. 논리데이터모델의 슈퍼타입과 서브타입 데이터모델을 물리적인 테이블 형식으로 변환할때

– 트랜잭션은 항상 전체를 대상으로 일괄 처리하는데 테이블은 서브타입 별로 개별 유지하는 것으로 변환하면 Union 연산에 의해 성능이 저하 될 수 있다.

– 트랜잭션은 항상 서브타입 개별로 처리하는데 테이블은 하나로 통합하여 변환하면 불필요하게 많은 양의 데이터가 집적되어 있어 성능이 저하될 수 있다,

– 트랜잭션은 항상 슈퍼+서브 타입을 함께 처리하는데 개별로 유지 하면 조인에 의해 성능이 저하될 수 있다.

 

. SQL 패턴 설명

– 사무소코드가 ‘=’로 상수값이 들어 왔고, 거래일자가 범위 ‘BETWEEN’으로 들어왔기 때문에 PK의 순서를 사무소코드 + 거래일자 + 출급기번호 + 명세표번호로 바꾸고 인덱스를 생성하는 것이 성능에 유리함

12

 

. SQL의 성능 설명

– 지사코드에 대해 입력 값이 EQUAL 조건으로 사용되므로 지사코드를 실적 테이블의 맨 처음 위치로 옮겨서 일자 칼럼의 앞에 두면 인덱스 이용 효율성이 높아진다.

13

 

. 데이터모델 FK(Foreign Key) 설명

– 학사기준번호는 부모 테이블에 이미 인덱스가 존재하나 수강신청과 조인에 의한 성능저하 예방을 위해 상송받아 생긴 수강신청에도 학사기준번호 칼럼에 대한 별도의 인덱스가 필요하다.

– 데이터모델에서는 관계를 연결하고 데이터베이스에 FK제약조건 생성을 생략하는 경우에도 데이터의 조인관계가 필요하므로 학사기준번호에 대한 인덱스를 생성할 필요가 있다.

14

 

. 데이터베이스 분산 설계 적용방법

– 공통코드, 기준정보 등 마스터 데이터는 분산데이터베이스에 복제분산을 적용한다.

– 거의 실시간(Near Real Time) 업무적인 특성을 가지고 있을 때 분산 데이터베이스를 사용하여 구성할 수 있다.

– 백업 사이트를 구성할 때 간단하게 분산기능을 적용하여 구성할 수 있다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다