매일 매일 미라클 코딩

SQLD 오답노트 (3) - 데이터 모델과 성능 본문

데이터베이스

SQLD 오답노트 (3) - 데이터 모델과 성능

뚜벅-뚜벅 2022. 8. 30. 17:45

성능을 고려한 데이터 모델링
분석 설계 단계에서 성능을 고려한 데이터 모델링을 수행하여 성능저하에 따른 Rework 비용을 최소화한다. 프로젝트 초기에 운영환경에 대비한 테스트환경을 구현하고, 그곳에 트랜잭션을 발생시켜 실제 성능을 테스트해 보아야한다. 이때 데이터 모델의 구조도 변경하면서 검토하는 디자인 전략이 요구된다.

성능을 고려한 데이터 모델링의 순서
1) 데이터 모델링을 할 때 정규화를 정확하게 수행한다
2) 데이터베이스 용량산정을 수행한다
3) 데이터베이스에 발생되는 트랜잭션의 유형을 파악한다
4) 용량과 트랜잭션의 유형에 따라 반정규화를 수행한다
5) 이력모델의 조정, PK/FK 조정, 슈퍼타입/서브타입 등의 조정을 수행한다
6) 성능관점에서 데이터 모델을 검증한다

데이터모델 반정규화 판단요소
다량데이터 탐색의 경우 인덱스가 아닌 파티션 및 데이터 클러스터링 등의 다양한 물리 저장기법을 활용하여 성능 개선을 유도할 수 있다. 다만, 하나의 결과셋을 추출하기 위해 다량의 데이터를 탐색하는 처리가 반복적으로 빈번하게 발생한다면 이때는 반정규화를 고려하는 것이 좋다. 다수 테이블에 대한 다량의 조인이 불가피한 경우 데이터 제공의 적시성 확보를 위해 반정규화 한다.

테이블의 반정규화

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


칼럼의 반정규화

반정규화 기법
중복칼럼 추가 : 조인 감소를 위해 여러테이블에 동일한 칼럼을 갖도록 한다
파생칼럼 추가: 조회 성능을 우수하게 하기 위해 미리 계산된 칼럼을 갖도록 한다
이력테이블 칼럼 추가: 최신 값을 처리하는 이력의 특성을 고려하여 기능성 칼럼을 추가한다
PK에 의한 칼럼 추가
응용시스템 오작동을 위한 칼럼 추가


칼럼수가 많은 테이블
로우체이닝이 발생할 정도로 한 테이블에 많은 칼럼들이 존재할 경우 디스크 I/O가 대량으로 발생하여 성능이 저하될 수 있다. 따라서 트랜잭션 시 자주 접근하는 칼럼들과 상대적으로 접근 빈도가 낮은 칼럽들을 구분하여 테이블을 1:1 분리하면 성능을 향상시킬 수 있다. NULL 상태가 많은 컬럼을 뒤쪽 순서에 모아둠으로써 로우의 길이를 어느정도 감소시킬 수 있으나, NULL 상태이던 칼럼에 나중에 데이터가 들어올 경우 더 많은 로우 체인이 발생할 수도 있기 때문에 바람직한 해결법은 아니다.

인덱스와 성능
인덱스는 값의 범위에 따라 일정하게 정렬되어있다. 상수값으로 EQUAL(=) 조건으로 조회되는 칼럼이 가장 앞쪽에 위치할 때 인덱스의 이용 효율성이 가장 높다. 범위 조회(between)하는 유형의 칼럼이 그 다음에 오도록하는 것이 인덱스 엑세스 범위를 좁히는 가장좋은방법이다.

분산데이터베이스 장점
- 지역자치성 (각지역 사용자의 요구 수용 증대)
- 점증적 시스템 용량 확장(시스템 규모 적절히 조절)
- 신뢰성과 가용성
- 효용성과 융통성
- 빠른 응답 속도와 통신비용 절감

분산데이터베이스 단점
- 소프트웨어 개발 비용
- 오류의 잠재성 증대
- 처리 비용의 증대
- 설계, 관리의 복잡성과 비용
- 불규칙한 응답 속도
- 통제의 어려움
- 데이터 무결성에 대한 위협

* 분산데이터 환경에서 데이터베이스 분산설계를 적용하여 효율성을 증대시킬 수 있는 경우
1) 공통 코드, 기준정보 등 마스터데이터에 복제분산을 적용하는 경우
2) 백업사이트를 구성하는 경우
3) 실시간(준실시간) 업무적 특성을 가지는 경우