데이터 모델과 성능
성능 데이터 모델링의 개요
-
성능 데이터 모델링의 정의
- 데이터베이스 성능향상을 목적으로 설계단계의 데이터 모델링 때부터
정규화, 반정규화, 테이블통합, 테이블분할, 조인구조, PK, FK 등
여러 가지 성능과 관련된 사항이 데이터 모델링에 반영될 수 있도록 하는 것
-
성능 데이터 모델링 수행시점

- 성능에 대비한 설계를 하지 않으면 데이터의 증가가 빠를 수록 성능개선비용은 기하급수적으로 증가한다.
- 분석/설계 단계 때부터 성능에 대비한 설계를 한다.
-
성능 데이터 모델링 고려사항
- 데이터 모델링을 할 때 정규화를 정확하게 수행한다.
- 데이터베이스 용량산정을 수행한다.
- 데이터베이스에 발생되는 트랜젝션의 유형을 파악한다.
- 용량과 트랜잭션의 유형에 따라 반정규화를 수행한다.
- 이력모델의 조정, PK/FK조정, 슈퍼타입/서브타입 조정 등을 수행한다.
- 성능관점에서 데이터모델을 검증한다.
정규화와 성능
정규화는 최소한의 데이터 중복, 데이터의 일관성, 최대한의 데이터 유연성을 위해 데이터를 분해하는 과정이다. 이 과정을 통해 데이터 중복을 제거하고 데이터 모델의 독립성을 확보하는 방법이다.
(1~5정규화까지 있으나 실질적으로 3정규화까지 실시)
-
제 1정규화
- 모든 속성은 반드시 하나의 값, 속성값 중복을 제거한다.
- 속성의 원자성을 확보하며 PK를 설정한다.
-
제 2정규화
- PK가 2개 이상의 속성으로 이루어진 경우 부분 함수 종속성을 제거한다.
- 식별자에 종속되지 않는 속성의 중복 제거
- 식별자가 아닌 모든 속성은 식별자 전체 속성에 완전 종속한다.

-
제 3정규화
- PK를 제외한 칼럼 간 종속성을 제거한다.
- 2차 정규형을 만족하고 식별자 외 일반 컬럼간의 종속 존재 제거

반정규화와 성능
- 데이터 조회할 때 디스크 I/O량이 많아서 성능이 저하되거나 경로가 너무 멀어 조인으로 인한 성능 저하가 예상될 때
- 칼럼을 계산하여 읽을때 성능이 저하될 것이 예상되는 경우 반정규화를 수행한다.
- 반정규화를 적용할 때 기본적으로 무결성이 깨질 가능성이 큼으로 무결성을 보장할 수 있는 방법을 생각한다.
- 반정규화 전에 테이블 추가를 하지 않는다.
반정규화 대상
- 자주 사용되는 테이블에 접근하는 프로세스 수가 많고 항상 일정한 범위만을 조회하는 경우
- 테이블의 대량의 데이터가 있고 대량의 데이터 범주를 자주 처리하는 경우에 처리범위를 일정하게 줄이지 않으면 성능을 보장 할 수 없는 경우
- 통계성 프로세스에 의해 통계 정보를 필요로 할 때 별도의 통계 테이블을 생성하는 경우
- 테이블에 지나치게 많은 JOIN이 걸려 데이터를 조회하는 작업이 기술적으로 어려울 경우
대량 데이터에 따른 성능
설계가 잘 된 데이터 모델이어도 대량의 데이터가 하나의 테이블에 집약되어, 하나의 하드웨어 공간에 저장되어 있으면 성능이 저하된다.
성능 저하의 원인
- SQL 문장에서 데이터를 처리하기 위한 I/O량이 증가하기 때문이다.
- 많은 칼럼은 로우체이닝과 로우마이그레이션이 많아지게 되어 성능이 저하된다.
- 로우체이닝
- Row 길이가 너무 길어서 데이터 블록 하나에 데이터가 모두 저장되지 않고, 두 개 이상의 블록에 걸쳐 하나의 로우가 저장되어 있는 형태
- 로우마이그레이션
- 데이터 블록에서 수정이 발생하면 수정된 데이터를 해당 데이터 블록에서 저장하지 못하고, 다른 블록의 빈 공간을 찾아 저장하는 방식
성능 개선 방법
한 테이블에 많은 수의 칼럼을 가지고 있는 경우
- 어떤 칼럼에 대해 집중적으로 발생하는지 분석하여 테이블을 쪼개어 주면 디스크 I/O가 감소하게 되어 성능이 개선되게 된다.
- 트랜젝션을 분석하여 적절하게 1:1 관계로 분리함으로써 성능 향상이 가능하도록 해야 한다.
대량 데이터 저장 및 처리로 인한 성능
- 테이블에 많은 양의 데이터가 예상될 경우, 파티셔닝을 적용하거나 PK에 의해 테이블을 분할하는 방법을 적용한다.
파티셔닝 적용
- Range Partition 적용
- 대상 테이블이 날짜 또는 숫자 값으로 분리가 가능하다.
- 각 영역별로 트랜잭션이 분리된다면 사용한다.
- 데이터 보관 주기에 따라 테이블에 데이터를 쉽게 지우는게 가능하여 관리에 용이.
- List Partition 적용
- 핵심적인 코드값으로 PK가 구성되고, 대량의 데이터가 있는 테이블이라면 값 각각에 의해 파티셔닝이 되는 List Partition을 적용한다.
- 대용량 데이터를 특정 값에 따라 분리/저장 가능함
- 쉽게 삭제하는 기능은 제공될 수 없다.
- Hash Partition 적용
- 지정된 Hash 조건에 따라 해쉬 알고리즘이 적용되며 테이블이 분리, 설계자는 테이블의 데이터가 정확하게 어떻게 들어갔는지 알 수 없다.
- 주로 성능향상을 위해 사용된다.
- 쉽게 삭제하는 기능은 제공하지 않는다.
데이터량이 대용량이 되면 파티셔닝의 적용은 필수적이며 조건에 따라 적절한 파티셔닝 방법을 선택하여 성능을 향상한다.
분산 데이터베이스와 성능
분산 데이터베이스 정의
- 여러 곳으로 분산되어 있는 데이터베이스를 하나의 가상 시스템으로 사용할 수 있도록 한 데이터 베이스
- 논리적으로 동일한 시스템에 속하지만 컴퓨터 네트워크를 통해 물리적으로 분산되어 있는 데이터들의 모임
분산 데이터베이스의 투명성(Transparency)
분산 데이터베이스 투명성 |
내용 |
분할 투명성(단편화) |
하나의 논리적 Relation이 여러 단편으로 분할되어 각 단편의 사본이여러 site에 저장 |
위치 투명성 |
사용하려는 데이터 저장 명소 명시불필요, 위치 정보가 System Catelog에 유지되어야 함 |
지역 사상 투명성 |
지역 DBMS와 물리적 DB사이의 Mapping보장, 각 지역시스템 이름과 무관한 이름 사용 가능 |
중목 투명성 |
DB 객체가 여러 site에 중복 되어있는지 알 필요가 없는 성질 |
장애 투명성 |
구성요소(DBMS, Computer)의 장애에 무관한 트랜잭션의 원자성 유지 |
병행 투명성 |
다수 트랜잭션 동시 수행 시 결과의 일관성 유지, Time Stamp, 분산 2단계 Locking을 이용 구현 |
분산 데이터베이스 목적과 가치
통합된 데이터베이스에서 제공할 수 없는 빠른 성능을 제공한다.
네트워크 부하 및 트랜잭션 집중에 따른 성능 저하의 원인을 분산 데이터베이스 환경을 구축하여 빠른 성능을 제공 할 수 있다.
분산 데이터베이스의 적용 기법
- 데이터베이스 분산 종류
- 테이블 위치 분산
- 위치 분산은 테이블의 구조는 변하지 않는다.
- 테이블이 다른 데이터베이스에 중복되어 생성되지도 않는다.
- 설계된 테이블이 각각 지역별로 분산되어 생성되는 경우
- 각각 테이블마다 위치를 표기하여 테이블을 생성한다.
- 테이블 분할 분산
- 각각의 테이블을 쪼개어 분산하는 방법
- 수평분할 : 테이블을 row단위로 분리
- column은 분리되지 않는다.
- 한군데 집합시켜도 pimary key에 의해 중복이 발생하지 않는다.
- 수직분할 : 테이블을 column단위로 분할
- row단위로는 분리되지 않는다.
- 동일한 pimarykey는 하나로 표현하면 됨으로 데이중복이 되지않는다.
- 테이블 복제 분산
- 부분 복제
- 데이터베이스에서 테이블의 일부의 내용만 다른 지역이나 서버에 위치
- 여러 테이블에 join이 발생하지 않는 빠른 작업 수행이 가능
- 본사와 지사간에 데이터의 중복이 항상 발생
- 데이터를 복제하는데 시간이 소요, 서버에 부하 발생
- 광역 복제
- 데이터베이스의 테이블의 내용을 각 지역이나 서버에 존재시킨다.
- 본사에서 데이터가 입력, 수정, 삭제되어 지사에서 이용하는 방식
- 테이블 요약 분산
- 요약의 방식에 따라 동일한 테이블 구조를 가지고 있으면서 분산되어 있는 동일한 내용의 데이터를 이용하여 통합된 데이터를 산출하는 방식(분석요약)
- 분산되어 있는 다른 내용의 데이터를 이용하여 통합된 데이터를 산출하는 방식의 통합요약이 있다.
분산 데이터베이스의 적용
- 성능이 중요한 사이트에 적용
- 공통코드, 기준정보, 마스터 데이터 등에 대해 분산환경을 구성하면 성능이 좋아진다.
- 실시간 동기화가 요구되지 않을 때 좋다.
- 특정 서버에 부하가 집중이 될 때 부하를 분산할 때도 좋다.
- 백업 사이트를 구성할 때 간단하게 분산기능을 적용하여 구성할 수 있다.