SQL 자격검정 실전문제집(노랭이)를 풀면서 정리한 내용입니다.
성능 데이터 모델링
분석 및 설계 단계부터 성능과 관련한 데이터 모델링을 수행하는 것
- 정규화, 반정규화
- 테이블 분할, 테이블 병합, 테이블 추가
- 컬럼 추가, PK/FK 조정
- 슈퍼/서브 타입 조정
성능 데이터 모델링 특징
- 데이터의 증가량이 클수록 성능 저하에 따른 성능 개선 비용이 증가
- 데이터의 크기가 문제가 되어 테이블 분할을 하게 되는 경우 이로 인해 할 일이 많아지기 때문
- 데이터 모델이 성능을 튜닝 하면서 변경될 수 있음
- 테이블 분할, 병합, 추가로 인해 데이터 모델 구조 변경 가능
- 데이터 모델링을 수행할 경우 성능 저하에 따른 Rework 비용을 최소화 가능(미리 고민하고 처리했으니까)
성능 데이터 모델링 수행 절차
- 데이터 모델링을 할 때 정규화를 정확하게 수행
- 데이터 베이스 용량 산정을 수행한다.
- 데이터 베이스에 발생되는 트랜잭션의 유형을 파악한다.
- 용량과 트랜잭션의 유형에 따라 반정규화를 수행한다.
- 이력 모델의 조정, PK/FK 조정, 슈퍼/서브 타입 조정들을 수행한다.
- 변경 이력 중 최근 값에 대한 조회가 빈번할 경우 ‘최신 여부’를 확인 가능한 컬럼 추가
- 성능 관점에서 데이터 모델을 검증한다.
N차 정규화
어떤 기준 값에 의해 종속되는 현상인 함수적 종속성을 근거로 실행
이때, 기준 값을 결정자(Determinant)라 하고 종속되는 값을 종속자(Dependent)라고 한다.
- 1차 정규화
같은 속성이 일반 속성 안에서 컬럼 단위로 반복(속성의 원자성 위배)되는 경우 수행
- 완전 함수 종속성 만족
- 종속자가 기본 키에만 종속
- 1 : M 관계로 분리
- 2차 정규화
기본 키에 대한 부분 집합으로 존재하는 속성들을 따로 분리해 내어 엔터티를 구성
- 부분 함수 종속성을 제거
- 3차 정규화
- 이행 함수 종속성을 제거(X → Y → Z 관계 제거)
1차 정규화와 인덱스
WHERE : 인덱스 사용, OR : 인덱스 미 사용인 상황에서 Full Table Scan을 진행하고 싶을 때
문제점
각 유형 분류 코드 칼럼에 대해 모두 인덱스가 있을 때 인덱스를 사용해 검색 가능. 하지만 인덱스의 개수가 많아져 입력, 수정, 삭제 등과 같은 작업이 오히려 느려질 수 있음
해결 방안
따라서 1차 정규화 후 유형 기능 분류 속성을 하나로 통합 후 인덱스 적용해야 좋음
정규형
N차 정규화 규칙을 위반하지 않는 정규형
- 1차 정규화 조건을 어기지 않으면 1차 정규형
반정규화
정규화된 엔터티, 속성, 관계에 대해 시스템의 성능 향상/개발/운영 단순화 위해 중복, 통합, 분리를 수행하는 데이터 모델링 기법
- 데이터를 중복하여 성능을 향상 시킴
성능을 향상 시키기 위해 정규화 데이터 모델에서 중복, 통합, 분리 등을 수행하는 모든 과정
- 데이터 무결성이 깨질 수 있는 위험이 있음.
반정규화 판단 요소
- 재현의 적시성(빠르게 처리)
- 조회 시 I/O량이 많아 성능이 저하가 있는 경우
- 경로가 너무 멀어 조인으로 인한 성능 저하가 예상되는 경우
- 컬럼을 읽을 때 성능이 저하될 것이 예상되는 경우
반정규화 절차
- 반정규화 대상 조사
- 범위 처리 빈도수 조사
- 대량의 범위 처리 조사
- 통계성 프로세스 조사
- 테이블 조인 개수
- 다른 방법 검토
- 뷰 테이블
- 지나치게 많은 조인으로 데이터를 조회하는 작업이 어려울 경우 고려
- 클러스터링 적용
- 대량의 데이터 처리나 부분 처리에 의해 성능이 저하되는 경우
- 인덱스 조정
- 대량의 데이터 처리나 부분 처리에 의해 성능이 저하되는 경우
- 파티셔닝 기법
- PK의 성격에 따라 부분 테이블로 분리
- 응용 어플리케이션
- 로직 구사하는 방법을 변경
- 뷰 테이블
- 반정규화 적용
- 테이블 반정규화
- 속성(컬럼)의 반정규화
- 관계의 반정규화
반정규화 기법
- 테이블 분할
- 테이블 병합
- 테이블 추가(중복, 통계, 이력, 부분 테이블)
- 중복 테이블 : 원격지와의 조인을 줄이기 위해서 같은 구조의 테이블 추가
- 부분 테이블 : 자주 사용되는 집중된 컬럼을 별도로 모아 놓은 테이블 생성
- 컬럼 추가(중복, 파생, 기능 컬럼)
- PK, FK 조정
- 슈퍼/서브 타입 조정
테이블/컬럼의 반정규화
- 테이블
- 테이블 병합
- 1:1/1:M 관계 테이블 병합
- 슈퍼/서브 타입 테이블 병합
- 테이블 분할(파티셔닝)
- 수직/수평 분할
- 디스크 I/O 분산*, 데이터 접근 효율성 증가
- 수직 분할(컬럼 단위, 1 : 1 관계)
- 수평 분할(로우 단위, 관계 X)
- 테이블 추가
- 중복, 통계, 이력, 부분 테이블 추가
- 컬럼
- 중복 컬럼 추가
- 조인 감소를 위해 여러 테이블에 동일 컬럼을 갖도록 함
- 파생 컬럼 추가
- 조회 성능을 우수하게 하기 위해 미리 계산된 컬럼을 갖도록 함
- 이력 테이블에 컬럼 추가
- 최신 값을 처리하는 이력의 특성을 고려 기능성 컬럼을 추가
- PK에 의한 컬럼 추가
- FK
- 응용 시스템 오작동 방지를 위한 컬럼 추가
로우 체이닝(Row Chaining)
새로운 데이터가 입력될 때 빈 공간이 있는 블록에 입력되고 그 공간이 부족할 때 새로운 블록에 나머지 데이터를 입력하는 것을 로우 체이닝 이라고 함
- 로우 길이가 너무 길어(컬럼 수가 너무 많음)서 블록 하나에 데이터가 모두 저장되지 않고 두 개 이상의 블록에 걸쳐 한 로우가 저장되는 현상
- 테이블에 많은 컬럼이 존재할 경우 디스크 I/O 증가로 조회 성능 저하가 발생할 수 있음 자주 사용되는 컬럼/아닌 컬럼을 분류해서 수직 분할을 하여 디스크 I/O를 분산 시켜 해결
로우 마이그레이션(Row Migration)
변경 작업을 위해 공간이 더 필요한데 저장 공간이 없을 경우 새로운 블록으로 이동 시켜 변경 작업을 수행하는 것을 로우 마이그레이션이라 함
- 데이터 블록에서 수정이 발생했을 때 수정된 데이터를 해당 데이터 블록에 저장하지 못하고 다른 블록의 빈 공간을 찾아 저장
윈도우 함수
- RDBMS에서 이전 또는 이후 위치의 레코드에 대한 접근이 가능
슈퍼/서브 타입 데이터 모델 변환 기술
- 개별로 발생되는 트랜잭션은 개별 테이블로 구성
- 서브타입을 개별 테이블로 구성 : Roll-Down
- 슈퍼 타입 + 서브 타입에 대해 발생되는 트랜잭션은 슈퍼타입 + 서브 타입 테이블로 구성
- 전체를 하나로 묶어 트랜잭션이 발생할 때는 하나의 테이블로 구성
- 전체를 하나의 테이블로 구성 : Roll-Up
슈퍼 타입으로 서브 타입을 통합(IDENTITY) 하여 테이블 구성 : Roll - Up
서브 타입을 개별 테이블로 구성 : Roll - Down
슈퍼 타입 - 서브 타입을 각각 구분해서 테이블을 구성하는 구조
- 슈퍼 타입 : 공통 정보 저장
- 서브 타입 : 개별 정보 저장
인덱스
PK 순서를 결정하는 기준이 됨
- 인덱스를 효율적으로 이용할 수 있는 순서로 진행
인덱스의 특징
- 값의 범위에 따라 일정하게 정렬
- 상수 값 조회 컬럼 후 범위 조회 컬럼이 그 다음에 오도록 인덱스를 설정하면 엑세스 범위를 좁힐 수 있음
- 상속 받은 테이블에 대해서도 인덱스가 필요
분산 데이터 베이스
장점
- 지역 자치성
- 점증적 시스템 용량 확장 가능
- 신뢰성, 가용성
- 효용성, 융통성
- 빠른 응답 속도, 통신 비용 절감
- 데이터의 가용성, 신뢰성 증가
- 시스템 규모의 적절한 조절
- 지역 사용자의 요구 수용 증대
단점
- 소프트웨어 개발 비용 증가
- 잠재적 오류의 증가
- 처리 비용의 증가
- 설계, 관리의 복잡 및 비용 증가
- 불규칙한 응답 속도
- 어려운 통제
- 데이터 무결성에 대한 위협
- 무결성? DB에 저장된 값과 그것이 표현하는 현실 세계의 실제 값이 일치하는 지
분산 데이터 베이스 도입 고려
- 실시간 동기화가 요구되지 않을 때
- 거의 실시간의 업무적인 특징을 가지고 있을 때
- 특정 서버에 부하가 집중돼 이를 분산 시키려 할 때
- 백업 site를 구성하려고 할 때
분산 데이터 베이스 효율성 증대
- 테이블 복제 분산 적용
- 공통 코드, 기준 정보, 마스터 데이터 등을 복제 분산하여 구성
ETC
GSI
글로벌 통합 단일 시스템 구성
- 표준화 데이터, 프로세스를 근간으로 통합된 단일 시스템 구성
- Ex) SAP ERP 도입