rueki

SQLD 2장 데이터 모델과 성능 본문

SQL

SQLD 2장 데이터 모델과 성능

륵기 2020. 5. 24. 00:21
728x90
반응형

성능 : 데이터 조회의 성능

 

성능 데이터 모델링 : DB 성능 향상 목적

데이터 증가가 빠를 수록, 성능저하에 따른 성능 개선 비용 증가

성능 튜닝하면서 변경 될 수 있는 특징 존재

분석/ 설계 단계에서 성능을 고려한 데이터 모델링 수행할 경우 성능 저하에 따른 rework 비용 최소화 기회 존재

 

 

성능 데이터 모델링 고려사항 순서

1. 정규화 정확하게 수행 - 중복 데이터 제거로 성능이 향상 된다. 반정규화 된 테이블에 비해 성능 향상

2. DB 용량 산정 수행 - 트랜잭션의 유형과 양을 분석하는 자료가 되므로 모텔링 할 때 중요 작업

3. 트랜잭션 유형 파악

4. 트랜잭션의 유형에 따라 반 정규화 수행

5. 이력모델 조정, PK/FK 조정, 슈퍼/서브 타입 조정 - 물리적 모델링 할때 성능 향상 요소

6. 성능 관점에서 데이터 모델 검증

 

조인 발생 시 성능 저하는 반정규화로 해결

 

 

정규화는 필수 사항이며, 함수 종속성에 근거하여 정규화 되어야 한다.

 

성능 데이터 모델링은 시점을 빠르게 잡을 수록 좋음

분석/설계 -> 구현 -> 테스트 -> 운영

 

 

1차 정규화 : 중복 컬럼 및 로우 제거

2차 정규화 : 완전 함수적 종속

                 기본키 중에 특정 컬럼에만 종속된 컬럼이 없어야 한다.

                 기본키 아닌 속성이 기본키에 완전함수 종속 -> 삽입/갱신/삭제 이상

 

반복 속성 값은 속성의 원자성에 위배 되므로 1차 정규화 대상이 된다.

1차 정규화중복 순서가 분리된다.

인덱스는 검색 속도를 증가 시키는 것이지, 데이터 입력, 수정, 삭제의 성능을 높여주지는 않는다.

개별로 인덱스 모두 생성 경우, 1차 정규화 수행 후 인덱스 적용할 것

 

 

반정규화 : 데이터를 중복하여 성능을 향상시키는 기법, 정규화된 데이터 모델에서 중복, 통합, 분리 등을 수행하는 과정

              데이터 조회할 때 디스크 I/O량이 많아서 성능이 저하되거나 경로가 너무 멀어 조인으로 인한 성능저하가 

              예상되거나 컬럼을 계산하여 읽을 때 성능이 저하될 것을 예상되는 경우 반정규화 수행

 

 

테이블 반정규화

병합 : 1:1 관계 통합, 1:M 관계 통합, 슈퍼/서브 관계 통합

 

테이블 분할 : 수직분할 - 컬럼 단위 테이블을 디스크 i/o를 분산처리 하기 위해 테이블 1:1분리

                  수평분할 : 로우단위로 테이블 쪼갠다.

 

테이블 추가

중복 : 동일 데이블 구조 중복해서 원격조인 제거

통계 : sum, avg등을 미리 수행해서 조회 시 성능 향상

이력 : 이력테이블 중에서 마스터 테이블에 존재하는 레코드 중복하여 이력테이블에 존재

부분 : 하나의 테이블의 전체 컬럼 중 자주 이용하는 집중화 된 컬럼이 있을 때 디스크 I/O를 줄이기 위해

        해당 컬럼들을 모아놓은 별도의 반정규화된 테이블 생성

 

 

컬럼 반정규화

중복 : 중복된 컬럼 위치, 조인 감소 목적

파생 : 미리 값을 계산해서 컬럼에 보관

이력테이블 : 이력테이블에 기능성 컬럼 추가

pk에 의한 컬럼 추가 : 이미 pk안에 데이터 존재하지만 일반속성으로 포함

응용 시스템 오작동을 위한 컬럼 추가 : 업무적으로 의미가 없으나 사용자가 원래 값으로 복구하기 원하는 경우

 

 

하나의 테이블에 많은 컬럼이 있으면, 로우 체이닝, 로우 마이그레이션이 발생해서 성능이 저하된다.

 

로우 체이닝 : 로우가 너무 길어, 데이터 블록 하나에 두개 이상의 블록이 걸쳐 하나의 로우로 저장

                  트랜잭션이 접근하는 컬럼유형을 분석하여 1:1로 테이블 분리하면 디스크 I/O 줄어든다.

 

파티셔닝 : 하나의 테이블이지만 물리적으로 여러개의 테이블로 분리하여 데이터 액세스 성능 향상하고 데이터 관리방법도 개선할 수 있도록 테이블에 적용하는 기법

 

테이블의 많은 양 데이터 예상될 때, 파티셔닝과 pk에 의해 테이블 분해를 적용할 수 있다.

728x90
반응형

'SQL' 카테고리의 다른 글

MySql과 파이썬 연동하기  (0) 2020.05.29
SQLD 1장 데이터 모델링 정리  (0) 2020.05.23
SQLD 최적화 기본 원리 정리  (0) 2020.05.21
SQL에서의 정규표현식(Regular Expression)  (0) 2020.04.24
SQL CHAR와 VARCHAR2의 차이  (0) 2020.04.24
Comments