1. 성능 데이터 모델링의 정의
  • 성능이 저하되는 데이터 모델의 경우 크게 세 가지 경우를 고려하여 그 성능을 향상시킬 수 있다. 데이터모델 구조에 의해 성능이 저하될 수도 있고 데이터가 대용량이 됨으로 인해 불가피하게 성능이 저하되어 나타나는 경우도 있다. 또한 인덱스 특성을 충분히 고려하지 않고 인덱스를 생성함으로 인해 성능이 저하되어 나타나는 경우도 있다.
  • 성능 데이터 모델링이란 데이터베이스 성능향상을 목적으로 설계단계의 데이터 모델링 때부터 정규화, 반정규화, 테이블통합, 테이블분할, 조인구조, PK, FK 등 여러 가지 성능과 관련된 사항이 데이터 모델링에 반영될 수 있도록 하는 것으로 정의할 수 있다.

     
     

     
     

  1. 성능 데이터 모델링 수행시점
  • 분석/설계 단계에서 데이터 모델링 성능을 고려한 데이터 모델링을 수행할 경우 성능저하에 따른 재업무(Rework) 비용을 최소화 할 수 있는 기회를 가지게 된다.
  • 성능이 저하되는 SQL문장을 튜닝하고, 부족한 하드웨어 용량(CPU, Memory 등)을 증설하는 등의 작업은 추가적인 비용을 소진하게 하는 원인이 된다. 특히 데이터의 증가가 빠를수록 성능저하에 따른 성능개선비용은 기하급수적으로 증가하게 된다.

  • 많은 프로젝트에서 분석/설계단계 때부터 치밀하게 성능에 대비한 설계를 하지 않고, 성능이 저하된 결과만을 대상으로 문제발생 시점에 근시안적인 튜닝을 적용하고 있다. 마치 SQL 튜닝이 모든 것인 것처럼 그것이 마법인 것처럼 SQL문장에만 집중하여 튜닝을 하는 프로젝트의 현장이 아직도 많이 있다.
  • 따라서 분석/설계 단계에서 데이터 베이스 처리 성능을 향상시킬 수 있는 방법을 주도면밀하게 고려해야 한다.
  • 프로젝트 초기에 운영환경에 대비한 테스트 환경을 구현하고 그곳에 트랜잭션을 발생시켜 실제 성능을 테스트해 보아야 한다.

 
 

  1. 성능 데이터 모델링 고려사항
  2. 데이터 모델링을 할 때 정규화를 정확하게 수행한다 : 정규화된 모델이 데이터를 주요 관심사 별로 분산시키는 효과가 있기 때문에 그 자체로 성능을 향상시키는 효과가 있다.
  3. 데이터베이스 용량산정을 수행한다 : 각각의 엔티티(테이블)에 대한 용량산정을 수행하면 어떤 엔티티(테이블)에 데이터가 집중되는지 파악할 수 있다. 엔티티별로 데이터가 대용량인지를 구분하게 하기 때문에 테이블에 대한 성능고려를 엄격하게 적용해야 하는지 기준이 될 수 있다.
  4. 데이터베이스에 발생되는 트랜잭션의 유형을 파악한다 : 트랜잭션의 유형에 대한 파악은 CRUD 매트릭스, 시퀀스 다이어그램, 화면에서 처리된 이벤트(입력, 수정, 삭제, 조회)에 따라 테이블에 데이터가 어떻게 처리되는지를 유추할 수 있다. 유형을 파악하게 되면 SQL문장의 조인관계 테이블에서 데이터 조회의 칼럼들을 파악할 수 있게 되어 그에 따라 성능을 고려한 설계를 할 수 있다.
  5. 용량과 트랜잭션의 유형에 따라 반정규화를 수행한다 : 테이블, 속성, 관계에 대해 포괄적인 적용
  6. 이력모델의 조정, PK/FK조정, 슈퍼타입/서브타입 조정 등을 수행한다 : 대량 데이터가 처리되는 이력모델에 대해 성능고려를 하고 PK/FK의 순서가 인덱스 특성에 따라 성능에 영향을 미치는 영향도가 크기 때문에 반드시 PK/FK를 성능이 우수한 순서대로 칼럼의 순서를 조정해야 한다.
  7. 성능 관점에서 데이터 모델을 검증한다 : 데이터 모델 검토 시에 일반적인 데이터 모델 규칙만을 검증하지 말고 충분하게 성능이 고려되었는지를 체크리스트에 포함하여 검증하도록 한다.

By haisins

오라클 DBA 박용석 입니다. haisins@gmail.com 으로 문의 주세요.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다