성능 데이터 모델링의 정의
인프라가 갖추어지지 않은 환경에서 과연 빠른 속도로 이동할 수 있을까?
길이 굽이굽이 굽어져 있고 곳곳에 신호등이 있는 도로에서 아무리 성능이 좋은 차여도 빨리 지날 수 없다.
데이터베이스에서 기본적으로 설계 단계에서부터 성능을 고려하지 않고 설계를 하는 것은 빠르게 지나갈 수 없는 길을
지나가는 차에게 빨리 와달라고 요청하는 것과 다름이 없다.
데이터의 용량이 커질수록 기업의 의사결정의 속도가 빨라질수록 데이터를 처리하는 속도는 빠르게 처리되어야 할 필요성을 반증해 준다. 일반적으로 실무 프로젝트에서 보면 잘못된 테이블 디자인 위에서 개발된 애플리케이션의 성능이 저하되는 경우, 개발자가 구축한 SQL 구문에 대해서만 책망을 하는 경우가 많이 있다. 물론 개발자가 SQL 구문을 잘못 구성하여 성능이 저하되는 경우도 있지만 근본적으로 디자인이 잘못되어 SQL 구문을 잘 못 작성하도록 구성될 수 밖에 없는 경우도 빈번하게 발생되고 있음을 기억해야 한다..
성능이 저하되는 데이터 모델의 경우 크게 세 가지 경우를 고려하여 그 성능을 향상시킬 수 있다.
데이터 모델 구조에 의해 성능이 저하될 수도 있고 데이터가 대용량이 됨으로 인해 불가피하게 성능이 저하되어 나타나는 경우도 있다. 또한 인덱스 특성을 충분히 고려하지 않고 인덱스를 생성함으로 인해 성능이 저하되어 나타나는 경우도 있다.
일반적으로 성능이라고 하면 데이터조회의 성능을 의미하곤 한다.
그 이유는 데이터 입력/수정/삭제는 일시적이고 빈번하지 않고 단건 처리가 많은 반면 데이터 조회의 경우 반복적이고 빈번하며 여러 건을 처리하는 경우가 많기 때문이다. 이러한 특징은 일반적인 트랜잭션의 성격이 조회의 패턴을 가지고 있다는 것이고 업무에 따라서는 입력/수정/삭제의 성능이 중요한 경우도 있다.
따라서 데이터 모델링을 할때 어떤 작업 유형에 따라 성능향상을 도모해야 하는지 목표를 분명하게 해야 정확한 성능향상 모델링을 할 수 있음을 기억해야 한다. 성능 데이터 모델링이란 데이터베이스 성능향상을 목적으로 설계단계의 데이터 모델링부터 정규화, 반정규화, 테이블통합, 조인구조, PK, FK 등 여러 가지 성능과 관련된 사항이 데이터 모델링에 반영될 수 있도록 하는 것으로 정의할 수 있다.
성능 데이터 모델링이 단순히 반정규화만을 의미하지 않음을 주목해야 한다.
성능 데이터 모델링은 정규화를 통해서도 수행할 수 있고 인덱스의 특징을 고려해서 칼럼의 순서도 변형할 수 있다.
또한 대량의 데이터특성에 따라 비록 정규화된 모델이라도 테이블을 수직 또는 수평분할하여 적용하는 방법도 있고
논리적인 테이블을 물리적인 테이블로 전환할 때 데이터 처리의 성격에 따라 변환하는 방법도 성능 데이터 모델링의 범주에 포함될 수 있다.
성능 데이터 모델링 수행시점
- 성능 향상을 위한 비용은 프로젝트 수행 중에 있어서 사전에 할 수록 비용이 들지 않는다.
- 분석/설계 단계에서 데이터 모델에 성능을 고려한 데이터 모델링을 수행할 경우 성능 저하에 따른
Rework 비용을 최소화 할 수 있는 기회를 가지게 된다. - 분석/설계단계에서 데이터 모델은 대충하고, 성능이 저하되는 SQL 문장을 튜닝하고,
부족한 하드웨어 용량(CPU, Memory 등)을 증설하는 등의 작업은 추가 비용을 소진하게 되는 원인이 된다. - 데이터의 증가가 빠를수록 성능저하에 따른 성능개선 비용은 기하급수적으로 증가하게 된다.
성능을 고려한 데이터 모델링의 순서 (정용트 반조검)
- 데이터 모델링을 할 때 정규화를 정확하게 수행한다. (정규화)
- 데이터베이스 용량산정을 수행한다. (용량산정)
- 데이터베이스에 발생되는 트랜잭션의 유형을 파악한다. (트랜잭션)
- 용량과 트랜잭션의 유형에 따라 반정규화를 수행한다. (반정규화)
- 이력모델의 조정, PK/FK조정, 슈퍼타입/서브타입 조정 등을 수행한다. (조정)
- 성능관점에서 데이터 모델을 검증한다. (검증)
데이터 모델링을 할 때 기본적으로 정규화를 완벽하게 수행해야 한다.
정규화된 모델이 데이터를 주요 관심사별로 분산시키는 효과가 있기 때문에 그 자체로 성능을 향상시키는 효과가 있다.
# Reference:
'Language > RDBMS' 카테고리의 다른 글
반정규화와 성능 (0) | 2023.03.07 |
---|---|
정규화와 성능 (0) | 2023.03.07 |
식별자(Identifiers) (0) | 2023.03.07 |
관계(Relationship) (0) | 2023.03.07 |
속성(Attribute) (0) | 2023.03.07 |