[SQLD] 성능 데이터 모델링의 개요

영태·2022년 8월 15일
0

[SQLD]

목록 보기
2/7

성능 데이터 모델링의 개요

  1. 성능 데이터 모델링의 정의
    • 성능 저하의 원인 중 하나는 데이터 모델링의 근복적인 디자인이 잘못되어 있는 경우도 많다
    • 따라서 성능 데이터 모델링을 통해 성능향상을 도모해야한다
    • 성능 데이터 모델링이란?
      • 데이터베이스 성능향상을 목적으로 설계단계의 데이터모델링 때부터 성능과 관련된 사항이 모델링에 반영될 수 있도록 하는 것
  2. 성능 데이터 모델링 수행시점
    • 사전에 성능 모델링을 할수록 성능 향상을 위한 비용은 적게 든다
    • 분석/설계 단계에서 성능을 고려해 데이터 모델링을 수행할 경우 재업무 비용을 최소화할 수 있다
    • 따라서 분석/설계 단계에서 처리성능을 향상시킬 방법을 고려해야한다
  3. 성능 데이터 모델링 고려사항
    • 성능 데이터 모델링 프로세스
      • 정규화
      • DB 용량 산정
      • 트랜잭션의 유형 파악
      • 용량과 트랜잭션의 유형에 따라 반정규화
      • 이력모델 조정, PK/FK 조정, 슈퍼타입/서브타입 조정
      • 성능관점에서 데이터 모델을 검증

정규화와 성능

  1. 정규화를 통한 성능 향상 전략
    • 정규화를 수행한다는 것의 의미
      • 함수적 종속을 가지고 있는 일반속성을 의존자로 하여 입력/수정/삭제 이상을 제거하는것
      • 정규화를 하면 입력/수정/삭제의 성능이 향상된다
  2. 반정규화된 테이블의 성능저하 사례
    • PK가 걸려있는 방향으로 조인이 걸려 유니크 인덱스를 곧바로 찾아서 데이터 조회를 하기 때문에 정규화를 하면 느려지지 않고 오히려 빠르다
  3. 함수적 종속성에 근거한 정규화 수행 필요
    • 데이터는 속성간의 함수종속성에 근거하여 정규화되어야 한다
    • 정규화는 필수사항이다

반정규화와 성능

  1. 반정규화를 통한 성능향상 전략

    • 반정규화의 정의
      • 정규화된 엔티티,속성,관계에 대해 시스템 성능향상,개발과 운영의 단순화를 위해 중복,통합,분리 등을 수행하는 데이터 모델링 기법
      • 데이터 부결성이 깨질 수 있는 위험을 무릅쓰고 반정규화를 하는 이유
        • 디스크 I/O량이 많아서 성능이 저하
        • 경로가 너무 멀어 조인으로 인한 성능저하가 예상
        • 컬럼을 계산하여 읽을 때 성능 저하가 예상
      • 데이터의 중복성을 증가시켜야만 데이터 조회의 성능을 향상시키는 경우에 반정규화를 실시한다
      • 잘못된 반정규화는 다음과 같은 결과를 낳는다
        • 성능이 저하된 데이터베이스가 생성될 수 있다
        • 구축단계나 시험단계에서 반정규화를 적용할 때 수정에 따른 노력비용이 많이 들게 된다
    • 반정규화의 적용방법
      • 무분별한 반정규화는 데이터 무결성을 깨뜨린다
      • 따라서 데이터 무결성을 보장할 수 있는 방법을 고려한 이후에 반정규화를 적용해야 한다
      • 반정규화 프로세스
        • 반정규화의 대상을 조사한다.
        • 다음 네가지 경우에 반정규화를 고려한다
          • 자주 사용되는 테이블에 접근하는 프로세스 수가 많고 항상 일정한 범위만을 조회하는 경우
          • 테이블에 대량의 데이터가 있고 처리범위를 일정하게 줄이지 않으면 성능을 보장할 수 없는 경우
          • 통계성 프로세스에 의해 통계정보를 필요로 할때 별도의 통계 전용 반정규화 테이블을 생성
          • 테이블에 지나치게 많은 조인이 걸려 데이터를 조회하는 작업이 기술적으로 어려울 경우
        • 반정규화가 아닌 다른 방법으로 처리할 수 있을 지 검토, 다른 방법 모색
          • 성능을 고려한 뷰를 생성
          • 클러스터링 혹은 인덱싱을 해서 성능 향상
          • 파티셔닝 테이블을 적용
          • API 로직을 개선해 성능을 향상
        • 반정규화를 적용
  2. 반정규화의 기법

    • 테이블 반정규화
    • 칼럼 반정규화
    • 관계 반정규화
  3. 정규화가 잘 정의된 데이터 모델에서 성능이 저하될 수 있는 경우

  4. 정규화가 잘 정의된 데이터 모델에서 성능이 저하된 경우

대량 데이터에 따른 성능

  1. 대량 데이터발생에 따른 테이블 분할 개요

    • 대량의 데이터가 하나의 테이블에 집약되어있고 하나의 하드웨어 공간에 저장되어 있으면 성능저하를 피하기 어렵다
    • 데이터를 처리하기 위한 I/O의 양이 증가하기 때문이다
      • 조회조건에 따른 인덱스를 적절하게 이용하면 그다지 증가하지 않을것이라고 생각할 수도 있다
      • 그러나 대량의 데이터가 하나의 테이블에 존재하면 인덱스의 용량이 커지게되고 인덱스를 찾아가는 단계가 깊어지게 되어 조회의 성능에 영향을 미친다
      • 조회에는 큰영향이 없지만 데이터 CUD에 많은 성능저하를 유발한다
  2. 한 테이블에 많은 수의 칼럼을 가지고 있는 경우

    • 컬럼이 너무 많으면 로우체이닝과 로우마이그레이션 현상이 발생한다
      • 로우체이닝 : 로우 길이가 너무 길어서 데이터 블록 하나에 데이터가 모두 저장되지 않고 두 개 이상의 블록에 걸쳐 하나의 로우가 저장되어 있는 형태
      • 로우마이그레이션 : 데이터 블록에서 수정이 발생하면 수정된 데이터를 해당 데이터 블록에서 저장하지 못하고 다른 블록의 빈 공간을 찾아 저장하는 방식
      • 데이터베이스 메모리에서 불필요한 I/O가 많이 발생하여 성능이 저하된다
  3. 대량 데이터 저장 및 처리로 인한 성능 저하

    • 데이터량이 너무 많으면 SQL의 성능이 나오지 않는다
    • 이 때 하나의 테이블로 보이지만 물리적으로는 여러개의 테이블스페이스에 쪼개어 저장되게 하는 파티셔닝을 적용한다
    • Range 파티션 적용
      • 하나의 테이블에 접근하면 내부적으로 RANGE로 구분된 테이블에서 트랜잭션을 처리한다
      • 예를 들어 데이터의 생성일자로 구분하여 트랜잭션을 분리한다
    • LIST 파티션 적용
      • 특정 PK값에 의한 파티셔닝을 LIST 파티셔닝이라고 한다
      • 특정값에 따라 분리 저장할 수 있다
      • RANGE 파티션과 같이 보관주기에 따라 쉽게 수정/삭제하는 기능은 적용될 수 없다
    • HASH 파티션 적용
      • 해쉬 알고리즘에 따라 테이블이 분리된다
      • 설계자는 어떻게 데이터가 들어갔는지 정확하게 알 수 없다
      • 보관주기에 따라 쉽게 수정/삭제하는 기능은 제공되지 않는다
  4. 테이블에 대한 수평분할 수직분할의 절차

    • 결정 원칙
      • 데이터 모델링을 완성한다
      • 데이터베이스 용량산정을 한다
      • 대량 데이터가 처리되는 테이블에 대해서 트랜잭션 처리 패턴을 분석한다
      • 컬럼단위인지 로우단위인지 집중화된 처리가 어떻게 발생되는지를 분석하여 테이블 분리를 검토한다

데이터베이스 구조와 성능

  1. 슈퍼타입 서브타입 모델의 성능고려 방법
    • 업무를 구성하는 데이터의 특징을 공통점과 차이점의 특징을 고려하여 효과적으로 표현할 수 있기 때문에 쓰인다
    • 공통 부분을 슈퍼타입으로 모델링한다
    • 다른 엔티티와 차이가 있는 속성에 대해서는 별도의 서브타입으로 모델링한다
    • 논리적인 데이터 모델링 단계
    • 분석 단계에서 쓰이는 모델
  2. 인덱스 특성을 고려한 PK/FK 데이터베이스 성능향상
  3. 물리적인 테이블에 FK제약이 걸려있지 않을 경우 인덱스 미생성으로 성능저하

분산 데이터베이스와 성능

  1. 분산 데이터베이스의 개요
    • 여러 곳으로 분산되어있는 데이터베이스를 하나의 가상 시스템으로 사용할 수 있도록 한 데이터베이스
    • 논리적으로는 동일한 시스템에 속함
    • 컴퓨터 네트워크를 통해 물리적으로 분산되어있는 데이터들의 모임
    • 논리적으로 사용자 통합-공유
    • 빠른 네트워크 환경을 이용해 데이터베이스를 여러 지역,노드에 위치시켜 성능을 극대화시킨 데이터베이스를 말한다
  2. 분산 데이터베이스의 투명성
    • 다음 6가지 투명성을 만족해야한다
      • 분할 투명성 : 하나의 논리적 relation이 여러 단편으로 분할되어 저장
      • 위치 투명성 : 데이터의 저장 장소 명시 불필요
      • 지역맵핑 투명성 : 지역DBMS와 물리적 DB사이의 맵핑을 보장해야한다
      • 중복 투명성 : DB 객체가 여러 장소에 중복되어있는 알 필요가 없다
      • 장애 투명성 : 구성요소의 장애와 무관한 트랜잭션의 속성을 유지한다
      • 병행 투명성 : 다수 트랜잭션이 동시 수행시 결과의 일관성을 유지한다. 타임스탬프와 분산 2단계 Locking을 이용해 구현한다
  3. 분산 데이터베이스의 적용 방법 및 장단점
    • 적용방법
      • 분산 환경이 목적이 아닌 업무의 특징에 따라 분산구조를 선택적으로 설게해야 한다
    • 장단점
      • 장점
        • 지역 자치성, 점증적 시스템 용량 확장
        • 신뢰성과 가용성
        • 효용성과 융통성
        • 빠른 응답 속도와 통신비용 절감
        • 데이터의 가용성과 신뢰성 증가
        • 시스템 규모의 적절한 조절
        • 각 지역 사용자의 요구 수용 증대
      • 단점
        • 개발 비용 증가
        • 오류의 잠재성 증가
        • 처리 비용 증가
        • 설계, 관리의 복잡성
        • 불규칙한 응답 속돋
        • 통제의 어려움
        • 데이터 무결성에 대한 위협
  4. 분산 데이터베이스의 활용 방향성
    • 업무적인 특성에 따라 활용
  5. 데이터베이스 분산구성의 가치
    • 가장 핵심적인 가치는 빠른 성능
    • 물리적인 거리를 줄인다
  6. 분산 데이터베이스의 적용 기법
    • 테이블 위치 분산
      • 테이블의 구조는 변하지 않는다
      • 중복되어 생성되지도 않는다
      • 다만 테이블의 위치를 다르게 하는것 뿐이다
      • 도식화된 위치별 데이터베이스 문서가 필요하다
    • 테이블 분할 분산
      • 위치만 다른 곳에 두는 것이 아니라 테이블을 쪼개서 분산한다
      • 로우 단위로 분리하는 수평분할
        • 특정 칼럼의 값을 기준으로 로우를 분리한다
        • 합쳐놔도 PK의 값이 중복되지 않는다
        • 노드별로 사용하는 로우가 다를 때 이용한다
      • 칼럼 단위로 분리하는 수직 분할
        • 칼럼을 기준으로 분리
        • 같은 PK구조와 값을 가지고 잇어야한다
        • 통합하여 처리하는 프로세스가 많은 경우에는 이용하지 않아야 한다
    • 테이블 복제 분산
      • 다른 지역이나 서버에서 동시에 생성하여 관리하는 유형
      • 부분복제
        • 통합된 테이블을 본사가 가지고 있고 지사별로 해당된 로우를 가지고 있는 형태
        • 지사의 데이터는 반드시 본사에 존재한다
        • 본사가 지사의 합이 된다
        • 지사의 데이터 처리가 용이하다
        • 전체 데이터에 대한 통합처리도 본사의 통합 테이블을 이용하므로 빠른 작업 수행이 가능하다
        • 복제하는 데 부하가 많이 발생하므로 야간에 배치작업을 따로 한다
      • 광역복제
        • 본사 지사 모두 같은 데이터량을 가지고 있다
      • 테이블 요약 분산
        • 데이터가 비슷하지만 서로 다른 유형일때 사용
        • 분석요약
          • 지사별로 존재하는 요약정보를 본사에 통합하여 다시 전체에 대한 요약정보를 산출한다
        • 통합요약
          • 지사별로 존재하는 다른 내용의 정보를 본사에 통합하여 다시 전체에 대한 요약정보를 산출한다
  7. 분산 데이터베이스를 적용하여 성능이 향상된 사례
    • 성능이 중요한 사이트에 적용해야한다
    • 공통코드, 기준정보, 마스터 데이터 등을 통해 분산환경을 구성하면 성능이 좋아진다
    • 실시간 동기화가 요구될때는 사용하지 않는 것이 좋다
    • 특정 서버에 부하가 집중될때 부하를 분산하기 좋다
    • 백업 사이트를 구성할 때 간단하게 분산기능을 적용한다
profile
개발 공부중

0개의 댓글