SQL-D 기출 초토화: 데이터 모델과 성능(2)

0
post-thumbnail

반정규화

정규화된 엔티티, 속성, 관계에 대해

  1. 시스템의 성능 향상
  2. 개발과 운영의 단순화

를 위해 중복, 통합, 분리 등을 수행하는 데이터 모델링 기법을 의미

  • 데이터를 중복하여 성능을 향상시키기 위한 기법
  • 성능 향상을 위해 정규화된 데이터 모델을 중복, 통합, 분리 과정을 의미

반정규화를 수행하는(고려하는) 이유는?

  1. 테이터 조회 시 디스크 I/O량이 많아, 성능 저하의 우려가 있는 경우
  2. 데이터 조회 시 JOIN이 과다하거나 경로가 멀어, 성능 저하의 우려가 있는 경우
  3. 칼럼을 계산하여 읽을 때 성능이 저하될 우려가 있는 경우
  4. 하나의 결과셋 출력을 위해 다량의 데이터를 탐색하는 처리가 반복적으로, 빈번하게 발생하는 경우

반정규화 정보에 대한 재현의 적시성으로 판단한다.
예를 들어, 빌링의 잔액은 다수 테이블에 대한 다량의 조인이 불가피하므로, 데이터 제공의 적시성 확보를 위한 필수 반정규화 대상이 되는 정보이다.(O)

반정규화 테이블은 집계 테이블에 국한하여 적용한다.(X)

sol) 집계 테이블 외에, 다양한 유형에 대해 반정규화 테이블 적용이 필요할 수 있다.

테이블의 반정규화

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

부분테이블 추가

  • 하나의 테이블의 전체 칼럼 중 자주 이용하는 집중화된 칼럼들이 있을 때,
    디스크 I/O를 줄이기 위해 해당 칼럼들을 별도로 모아 놓는 반정규화 기법

칼럼의 반정규화

반정규화 기법
중복칼럼 추가
파생칼럼 추가
이력테이블 칼럼 추가
PK에 의한 칼럼 추가
응용시스템 오작동을 위한 칼럼 추가

중복칼럼 추가

  • JOIN 감소를 위해 여러 테이블에 동일한 칼럼을 갖도록 한다

파생칼럼 추가

  • 조회 성능 향상을 위해 미리 계산된 칼럼을 갖도록 한다

이력테이블에 기능 칼럼을 추가

  • 최신값을 처리하는 이력의 특성을 고려, 기능성 칼럼을 추가

FK 관계에 해당하는 속성을 추가하여 JOIN 성능을 향상시키는 것도 반정규화의 기법이다.(X)

sol) FK에 대한 속성 추가는, 데이터 모델링에서 관계를 연결할 때 나타나는 자연스러운 현상일 뿐이다.


반정규화 절차

1. 반정규화 대상 조사

  • 범위 처리 빈도수 조사
  • 대량의 범위 처리 조사
  • 통계성 프로세스 조사
  • 테이블 JOIN 개수 조사

2. 다른 방법 검토

  • VIEW 테이블
    지나치게 많은 JOIN이 걸려 데이터를 조회하는 작업이 기술적으로 힘든 경우

  • 클러스터링
    대량의 데이터 처리 또는 부분 처리에 의한 성능저하가 일어날 때

  • 인덱스 조정
    대량의 데이터 처리 또는 부분 처리에 의한 성능저하가 일어날 때

  • 파티셔닝
    대량의 데이터를 PK의 성격에 따라 부분적인 테이블로 분리하는 기법

하나의 테이블에 많은 양의 데이터가 저장되면 인덱스를 추가하고 테이블을 몇 개로 쪼개도 성능이 저하되는 경우가 있다.
이 때 논리적으로는 하나의 테이블이지만 물리적으로는 여러 개의 테이블로 분리하여 데이터 액세스 성능을 향상시키고, 데이터 관리 방법도 개선할 수 있도록 하는 기법을 파티셔닝이라고 한다.(O)

  • 응용 애플리케이션
    애플리케이션에서 로직을 구사하는 방법으로 성능을 향상시킴

3. 반정규화 적용

  • 테이블 반정규화
  • 속성 반정규화
  • 관계 반정규화

칼럼 수가 많은 테이블


  1.  한 테이블에 많은 칼럼들이 존재할 경우, 데이터가 물리적으로 저장되는 디스크에 넓게 분포되어 디스크 I/O가 대량으로 발생할 수 있으며, 이로 인한 성능 저하가 생길 수 있다.
    따라서, 트랜잭션이 접근하는 칼럼 유형을 분석하여 자주 접근하는 칼럼 / 상대적으로 접근 빈도가 낮은 칼럼을 구분하여 1:1로 테이블을 분리하면 디스크 I/O를 줄이고 성능을 향상 시킬 수 있다.

  2.  주로 사용되는 칼럼을 앞쪽에 두고, 주로 NULL 상태로 존재하는 칼럼을 뒷쪽에 위치시키는 것이 로우의 길이를 어느 정도 감소시킬 수는 있다. 그러나 후에 어쨌든 데이터가 채워지게 된다면 로우체이닝이 발생하게 된다.
    따라서, 자주 사용되는 칼럼 / 사용빈도가 낮은 칼럼끼리 모아서 별도의 1:1 관계 엔티티로 분리하는 등의 설계가 필요하다.

로우체이닝이란?

어느 한 로우의 데이터 크기가, 이를 저장하려고 하는 블록의 크기보다 큰 경우 발생한다.
데이터를 쪼개서 분산 저장한다.


트랜잭션

  • 트랜잭션은 항상 전체를 대상으로 일괄 처리하는데, 테이블을 서브타입별로 개별 유지하도록 변환하면 Union 연산에 의해 성능이 저하될 수 있다.

  • 트랜잭션은 항상 서브타입을 개별로 처리하는데, 테이블을 하나로 통합하여 변환하면 불필요하게 많은 양의 데이터가 집적되어 있어, 성능이 저하될 수 있다.

  • 트랜잭션은 항상 슈퍼+서브 타입을 함께 처리하는데, 개별로 유지학메 되면 JOIN에 의해 성능이 저하될 수 있다.

트랜잭션은 항상 전체를 통합하여 분석 및 처리하는데, 하나로 통합되어 있으면 데이터 집적으로 인해 성능이 저하될 수 있다.(X)

sol) 트랜잭션은 항상 전체를 통합하여 분석 및 처리하며 슈퍼-서브 타입이 하나의 테이블로 통합되어 있으면, 하나의 테이블에 집적된 데이터만 읽어 처리할 수 있기 때문에, 다른 형식에 비해 성능이 더 우수하다.


조회 성능 향상

인덱스는 값이 범위에 따라 일정하게 정렬되어 있다.
인덱스 액세스 범위를 좁히려면 다음의 조건을 따른다.

  1. 상수 값으로 EQUAL 조건 조회되는 칼럼을 가장 앞으로 당긴다
  2. 범위조회에 해당하는 칼럼을 그 다음에 오도록 설계한다

데이터 모델에 표현된 Foreign Key

엔티티 간에 논리적인 관계가 있을 경우 즉, 엔티티 간의 관계를 정의하여 관련 엔티티 상호 간 업무적인 연관성이 있음을 표시하는 것은, 상호 간 JOIN이 자주 발생함을 의미한다.
따라서 DMBS가 제공하는 FK Constraints를 생성했는지의 여부와 상관 없이, JOIN 성능을 향상시키기 위한 인덱스를 생성해주는 것이 옳다.

모델에서는 관계를 연결하고 데이터베이스에 FK 제약조건 생성을 생략하는 경우에도, 데이터의 JOIN 관계는 필요하므로 이에 대한 인덱스를 따로 생성해줄 필요가 있다.(O)

특정 칼럼에 대해, 부모 테이블에 이미 인덱스가 존재한다고 하여도 JOIN에 의한 성능 저하를 예방하기 위해, 상속받아 생긴 테이블에도 해당 칼럼에 대한 별도의 인덱스를 지정해야 한다.(O)


분산 데이터베이스

장점

  • 지역 자치성, 점증적 시스템 용량의 확장
  • 신뢰성 / 가용성
  • 효용성 / 융통성
  • 빠른 응답 속도 / 비용 절감
  • 시스템 규모의 적절한 조절
  • 각 지역 사용자의 요구 수용 증대

단점

  • 개발 비용 증대
  • 오류 잠재성 증대
  • 처리 비용 증대
  • 설계 및 관리의 복잡성
  • 불규칙한 응답 속도
  • 어려운 통제
  • 데이터 무결성에 대한 잠재적 위험

Global Single Instance(GSI)를 구성할 때 분산 데이터베이스를 활용하여 구성하는 것이 효율적이다.(x)

sol) GSI는 통합된 하나의 인스턴스 즉, 통합 데이터베이스를 의미한다. 분산 데이터베이스와는 대치되는 개념이다.

0개의 댓글