SQLD 시험 대비용 개념정리
출처: SQL 자격검정 실전문제, 한국데이터산업진흥원
-성능데이터모델링
- 성능향상 목적으로 설계 단계부터 성능과 관련된 사항이 데이터 모델링에 반영되게 함
- 데이터 증가가 빠를수록 성능저하에 따른 성능개선비용 증가
- 데이터모델은 성능을 튜닝하면서 변경이 될 수 있음
- 분석/설계 단계에서 성능을 고려한 데이터 모델링을 수행할 경우, 성능 저하에 따른 Rework 비용을 최소화할 수 있음
-성능데이터모델링 수행절차
- 정규화
- 용량산정
- 트랜잭션
- 반정규화
- 조정
- 검증
-성능데이터 모델링 할 때 고려사항
- 용량산정: 전체적인 DB에 발생되는 트랜잭션의 유형과 양을 분석하는 자료
- 물리적 데이터 모델링시 PK/FK의 칼럼의 순서조정, FK인덱스 생성 등은 성능 향상을 위해 중요함
- 이력데이터는 시간에 따라 반복적으로 발생, 대량 데이터가 될 가능성이 높아 성능을 고려하여 추가 설계를해야 함
- 데이터 모델링의 정규화는 중복된 데이터를 제거하기 때문에 조회 성능 향상
출처: porimp.tistory.com/entry/SQLD정규화Normalization정규화와-성능
-정규화
- 제1정규화: 속성의 원자성을 확보(모든 도메인이 원자값), 기본키를 설정 (대상: 중복속성에 대한 분리, 로우단위의 중복, 칼럼 단위로 중복이 되는 경우)
- 제2정규화: 기본키가 2개 이상의 속성으로 이루어진 경우, 부분 함수 종속성을 제거함
- 제3정규화: 기본키를 제외한 칼럼 간에 종속성을 제거함, 이행 함수 종속성을 제거
- BCNF: 기본키를 제외하고 후보키가 있는 경우(모든 결정자가 후보키), 후보키가 기본키를 종속시키면 분해됨
- 제4정규화: 여러 칼럼들이 하나의 칼람을 종속시키는 경우 분해하여 다중값 종속성을 제거(다치종속 제거)
- 제5정규화: 조인에 의해서 종속성이 발생되는 경우 분해
+정규형과 정규화는 다르다. 정규형은 이미 정규화를 거친 형태를 뜻함
-반정규화
- 정규화된 엔터티, 속성, 관계에 대해 시스템의 성능향상과 개발, 운영의 단순화를 위해 중복, 통합, 분리 등을 수행하는 데이터 모델링의 기법
- 데이터를 중복하여 성능을 향상시키기 위한 기법
-반정규화를 하는 이유(무결성이 깨질 수 있는 위험을 무릅쓰고 데이터를 중복하여 적용하는 이유)
- 데이터를 조회할 때 디스크 I/O량이 많아서 성능 저하가 발생하는 경우
- 경로가 너무 멀어 조인으로 인한 성능 저하가 발생하는 경우
- 칼럼을 계산하여 읽을 때 성능 저하가 발생하는 경우
-반정규화를 고려할 때 판단요소
- 반정규화 정보에 대한 재현의 적시성으로 판단
- 다수 테이블에 대한 다량의 조인이 불가피하므로 데이터 제공의 적시성 확보를 위해 반정규화 필수
- 하나의 결과셋을 추출하기 위해 다량의 데이터를 탐색하는 처리가 반복적으로 빈번하게 발생하면 반정규화를 해야함
-테이블의 반정규화 기법
- 테이블 병합(1:1, 1:M 관계, 슈퍼/서브타입)
- 테이블 분할(수직, 수평)
- 테이블 추가(중복, 통계, 이력, 부분)
Q. 자주 이용하는 집중화된 칼럼들이 있을 때 디스크 I/O를 줄이기 위해 해당 칼럼들을 별도로 모아놓는 반정규화 기법
A. 부분테이블 추가
-칼럼의 반정규화 기법
- 중복칼럼 추가
- 파생칼럼 추가
- 이력테이블 칼럼 추가
- PK에 의한 칼럼 추가
- 응용시스템 오작동을 위한 칼럼 추가
-반정규화 절차
1. 반정규화 대상조사
- 범위처리빈도수 조사
- 대량의 범위 처리 조사
- 통계성 프로세스 조사
- 테이블 조인 개수
2. 다른 방법유도 검토
- 뷰 테이블
- 클러스터링 적용
- 인덱스의 조정
- 응용 어플리케이션
3. 반정규화 적용
- 테이블 반정규화
- 속성의 반정규화
- 관계의 반정규화
-반정규화 기법
- 중복 칼럼을 추가: 조인감소를 위해 여러 테이블에 동일한 칼럼을 넣음
- 파생 칼럼을 추가: 조회 성능을 우수하게 하기 위해 미리 계산된 칼럼을 넣음
- 이력 테이블 칼럼 추가: 최신값을 처리하는 이력의 특성을 고려, 기능성 칼럼을 추가
-반정규화의 대상에 대해 다른 방법으로 처리
- 지나치게 많은 조인이 걸려 데이터 조회가 어려울 경우 -> 뷰 사용
- 대량의 데이터처리나 부분처리에 의해 성능이 저하되는 경우 -> 클러스터링 적용 or 인텍스 조정
- 대량의 데이터는 PK의 성격에 따라 부분적인 테이블로 분리 가능 => 파티셔닝 기법
- 응용 애플리케이션에서 로직을 구사하는 방법을 변경
Q. 하나의 테이블에 많은 양의 데이터가 저장되는 경우 성능저하를 처리하는 법
A. 논리적으로는 하나의 테이블이지만 물리적으로는 여러 개의 테이블로 분리하여 데이터 엑세스 성능도 향상, 데이터 관리 방법도 개선할 수 있도록 테이블에 적용하는 파티셔닝 기법을 사용
-슈퍼/서브 타입 데이터 모델의 변환기술 (논리적 모델 -> 물리적 모델)
- 개별로 발생되는 트랜잭션 => 개별 테이블로 구성
- 슈퍼 + 서브 타입에 대해 발생되는 트랜잭션 => 슈퍼 + 서브타입 테이블로 구성
- 전체를 하나로 묶어 발생된느 트랜잭션 => 하나의 테이블로 구성
*UNION ALL: 두 개의 쿼리문의 값을 하나로 묶어 출력
*UNION: 중복되는 값을 제외한 두 개의 쿼리문의 결과값을 하나로 묶어 출력
-PK순서를 결정하는 기준
인덱스의 특징: 여러 개의 속성이 하나의 인덱스로 구성되어 있을때, 앞쪽에 위치한 속성의 값이 비교자로 있어야
인덱스가 설계된 순서 그대로 생성되어있는 경우, 즉 값의 범위에 따라 인덱스가 일정하게 정렬되어 있는 경우
- = (한 개의 값 지정)
- 범위 ( BETWEEN A and B) or <> (not)
-분산 데이터베이스
장점
- 지역 자치성, 점증적 시스템 용량 확장
- 신뢰성과 가용성
- 효용성과 융통성
- 빠른 응답 속도와 통신비용 절감
- 데이터의 가용성과 신뢰성 증가
- 시스템 규모의 적절한 조절
- 각 지역 사용자의 요구 수용 증대
단점
- 소프트웨어 개발 비용
- 오류의 잠재성 증대
- 처리 비용의 증대
- 설계, 관리의 복잡성과 비용
- 불규칙한 응답 속도
- 통제의 어려움
- 데이터 무결성에 대한 위협
*조인을 많이 하는 CASE
성능 향상을 위해 FK와 관계없이 인덱스 생성이 필요
-분산 데이터베이스 환경
- 마스터 데이터는 분산데이터베이스에 복제분산 적용 (원격지에서 접근이 빈번하다)
- 실시간 업무적인 특성을 가지고 있을때, 분산 데이터베이스를 사용
- 백업 사이트 구성 시 간단하게 분산기능을 적용하여 구성
'SQL' 카테고리의 다른 글
[ORACLE] 프로그래머스 이름에 el이 들어가는 동물 찾기 (0) | 2021.05.27 |
---|---|
[ORACLE] 프로그래머스 루시와 엘라 찾기 (0) | 2021.05.27 |
[ORACLE] 프로그래머스 DATETIME에서 DATE로 형 변환 (+MySQL) (0) | 2021.03.14 |
[ORACLE] 프로그래머스 있었는데요 없었습니다 (0) | 2021.03.14 |
[ORACLE] 프로그래머스 없어진 기록 찾기 (0) | 2021.03.14 |