. 데이터모델링
– 데이터의 증가가 빠를수록 성능저하에 따른 성능개선비용은 증가한다.
– 데이터모델은 성능을 튜닝하면서 변경이 될 수 있는 특징이 있다.
– 분석/설계 단계에서 성능을 고려한 데이터모델링을 수행할 경우 성능 저하에 따른 Rework비용을 최소화 할 수 있는 기회를 가지게 된다.
– 데이터모델링을 할 때 정규화를 정확하게 수행한다.
– 데이터베이스 용량산정을 수행한다.
– 데이터베이스에 발생되는 트랜잭션의 유형을 파악한다,
– 용량과 트랜잭션의 유형에 따라 반정규화를 수행한다.
– 이력모델의 조정, PK/FK조정, 슈퍼타입/서브타입 조정등을 수행한다.
. 모델링 순서
– 데이터 모델링을 할 때 정규화를 정확하게 수행한다.
– 데이터베이스 용량산정을 수행한다.
– 데이터베이스에 발생되는 트랜잭션의 유형을 파악한다.
– 용량과 트랜잭션의 유형에 따라 반정규화를 수행한다.
– 이력모델의 조정, PK/FK조정, 슈퍼타입/서브타입 조정 등을 수행한다.
– 성능관점에서 데이터 모델을 검증한다.
. 성능데이터 모델링 고려사항
– 용량산정은 전체적인 데이터베이스에 발생되는 트랜잭션의 유형과 양을 분석하는 자료가 되므로 성능데이터 모델링을 할 때 중요한 작업이 될 수 있다.
– 물리적인 데이터 모델링을 할때 PK/FK의 칼럼의 순서조정, FK인덱스 생성 등은 성능 향상을 위한 데이터 모델링 작업에 중요한 요소가 된다.
– 이력데이터는 시간에 따라 반복적으로 발생이 되기 때문에 대량 데이터일 가능성이 높아 특별히 성능을 고려하여 칼럼 등을 추가하도록 설계해야 한다.
. 필요한 정규화 설명
– 2차 정규화 – 정규화테이블(관서번호, 관리점번호, 관서명, 상태, 관서 등록일자)
. 엔터티 설명(일자별매각물건)
– 2차 정규화가 필요한 엔터티로서 매각기일과 일자별매각물건으로 1:M관계가 될 수 있다.
. 테이블 현상 설명
– 유형기능분류코드 각각에 대하여 개별로 Index를 모두 생성할 경우 입력, 수정, 삭제 때 성능이 저하되므로 제1차 정규화를 수행한 후 인덱스를 적용하는 것이 좋다.
. 테이블 설명
– 1차 정규화가 필요한 엔터티로서 일재고와 일재고상세로 1:M의 관계가 될 수 있다.
. 정규형과 정규화 대상
– 1차 정규형 – 2차 정규화 대상
. 반정규화시 고려사항
– 반정규화 정보에 대한 재현의 적시성으로 판단한다. 예를 들어, 빌링의 잔액(balance)은 다수 테이블에 대한 다량의 조인이 불가피하므로 데이터 제공의 적시성 확보를 위한 필수 반정규화 대상 정보이다.
. 디스크 I/O를 줄이기 위해 해당 칼럼들을 별도로 모아놓은 반정규화 기법
– 테이블추가 – 부분테이블 추가
. 테이블의 반정규화
기법분류 | 반정규화 기법 |
테이블병합 | 1:1 관계 테이블병합 |
1:M 관계 테이블병합 | |
슈퍼/서브타입 테이블병합 | |
테이블분할 | 수직분할 |
수평분할 | |
테이블추가 | 중복테이블 추가 |
통계테이블 추가 | |
이력테이블 추가 | |
부분테이블 추가 |
. 칼럼의 반정규화
반정규화 기법 |
중복칼럼 추가 |
파생칼럼 추가 |
이력테이블 칼럼추가 |
PK에 의한 칼럼 추가 |
응용시스템 오작동을 위한 칼럼 추가 |
. 칼럼 반정규화 기법
– 중복칼럼을 추가 – 조인감소를 위해 여러 테이블에 동일한 칼럼을 갖도록 한다.
– 파생칼럼을 추가한다 – 조회 성능을 우수하게 하기 위해 미리 계산된 칼럼을 갖도록 한다.
– 이력테이블에 기능 칼럼을 추가한다 – 최신값을 처리하는 이력의 특성을 고려하여 기능성 칼럼을 추가한다.
. 조회를 빠르게 수행하기 위한 반정규화 방법
– 주문 엔터티에 단가를 합한 계산된 칼럼을 추가하도록 한다.
. 데이터모델 설명
– 데이터를 조회할 때 과도한 조인으로 인해 조회성능이 저하될 수 있으므로 공급자 테이블에 가장 빈번하게 조회되는 값인 최근 변경값에 해당하는 전화번호, 메일주소, 위치를 반정규화하여 조회 성능을 향상 시킬 수 있다.
– 전화번호, 메일주소, 위치에 대한 가장 최근에 변경된 값을 알 수 있도록 최신여부 라는 속성을 추가함으로써 최근 값을 찾기 위한 조회 성능 저하를 예방할 수 있다.
– 조회 성능을 위해서는 하나의 테이블로 통합하여 전화번호, 메일주소, 위치 등이 변경될 경우 전체 속성이 계속 발생되는 이력의 형태로 설계 될 수 있다. 이럴 경우 조회에 대한 성능은 향상이 되나, 과도한 데이터가 한 테이블에 발생하게 되어 용량이 너무 커지는 단점이 있다.
. 칼럼수가 많은 테이블에 대한 설명
– 로우체이닝이 발생할 정도로 한 테이블에 많은 칼럼들이 존재할 경우 조회성능저하가 발생할 수 있다. 트랜잭션이 접근하는 칼럼유형을 분석하여 1:1로 테이블을 분리하면 디스크 I/O가 줄어들어 조회 성능을 향상 시킬 수 있다.
. 데이터 액세스 성능향상 방법
– 하나의 테이블에 많은 양의 데이터가 저장되면 인덱스를 추가하고 테이블을 몇 개로 쪼개도 성능이 저하되는 경우가 있다. 이때 논리적으로는 하나의 테이블이지만 물리적으로는 여러 개의 테이블로 분리하여 데이터 액세스 성능도 향상시키고, 데이터 관리방법도 개선할 수 있도록 테이블에 적용하는 기법을 Partitioning 이라고 한다.
. 데이터 모델과 SQL문에 개선해야 할 사항
– 긴급사건, 특수사건, 일반사건을 하나의 테이블로 통합하고 PK를 사건 분류코드 + 사건번호로 조합하여 구성하도록 한다.
. 논리데이터모델의 슈퍼타입과 서브타입 데이터모델을 물리적인 테이블 형식으로 변환할때
– 트랜잭션은 항상 전체를 대상으로 일괄 처리하는데 테이블은 서브타입 별로 개별 유지하는 것으로 변환하면 Union 연산에 의해 성능이 저하 될 수 있다.
– 트랜잭션은 항상 서브타입 개별로 처리하는데 테이블은 하나로 통합하여 변환하면 불필요하게 많은 양의 데이터가 집적되어 있어 성능이 저하될 수 있다,
– 트랜잭션은 항상 슈퍼+서브 타입을 함께 처리하는데 개별로 유지 하면 조인에 의해 성능이 저하될 수 있다.
. SQL 패턴 설명
– 사무소코드가 ‘=’로 상수값이 들어 왔고, 거래일자가 범위 ‘BETWEEN’으로 들어왔기 때문에 PK의 순서를 사무소코드 + 거래일자 + 출급기번호 + 명세표번호로 바꾸고 인덱스를 생성하는 것이 성능에 유리함
. SQL의 성능 설명
– 지사코드에 대해 입력 값이 EQUAL 조건으로 사용되므로 지사코드를 실적 테이블의 맨 처음 위치로 옮겨서 일자 칼럼의 앞에 두면 인덱스 이용 효율성이 높아진다.
. 데이터모델 FK(Foreign Key) 설명
– 학사기준번호는 부모 테이블에 이미 인덱스가 존재하나 수강신청과 조인에 의한 성능저하 예방을 위해 상송받아 생긴 수강신청에도 학사기준번호 칼럼에 대한 별도의 인덱스가 필요하다.
– 데이터모델에서는 관계를 연결하고 데이터베이스에 FK제약조건 생성을 생략하는 경우에도 데이터의 조인관계가 필요하므로 학사기준번호에 대한 인덱스를 생성할 필요가 있다.
. 데이터베이스 분산 설계 적용방법
– 공통코드, 기준정보 등 마스터 데이터는 분산데이터베이스에 복제분산을 적용한다.
– 거의 실시간(Near Real Time) 업무적인 특성을 가지고 있을 때 분산 데이터베이스를 사용하여 구성할 수 있다.
– 백업 사이트를 구성할 때 간단하게 분산기능을 적용하여 구성할 수 있다.