본문 바로가기
자격증/SQLD(SQL 개발자)

SQLD - 데이터 모델과 성능

by 어쩌다개발 2022. 10. 25.
반응형

 

* 내용은 노랭이 책으로 유명한 SQL 자격검정 실전문제 책 및 SQL 가이드 책을 참고하였습니다.

 
1. 성능 데이터모델링 : 데이터베이스 성능 향상을 목적으로 설계단계의 데이터 모델링 때부터 성능과 관련된 사항이 데이터 모델링에 반영될 수 있도록 하는 것
- 데이터 증가가 빠를수록 성능저하에 따른 성능개선비용은 증가
- 데이터모델은 성능을 튜닝하면서 변경이 될 수 있음.
- 분석/설계 단계에서 성능을 고려한 데이터모델링을 수행할 경우 성능 저하에 따른 Rework 비용을 최소화 할 수 있는 기회를 가짐.

2. 반정규화(역정규화)
- 데이터 모델링을 할 때 정규화를 정확하게 수행
- 데이터베이스 용량산정을 수행
- 데이터베이스에 발생되는 트랜잭션의 유형을 파악
- 용량과 트랜잭션의 유형에 따라 반정규화를 수행
- 이력모델의 조정, PK/FK 조정, 슈퍼타입/서브타입 조정 등을 수행
- 성능관점에서 데이터모델을 검증

3. 정규화가 항상 조회 성능을 저하시키지는 않으며, 기본적으로 중복된 데이터를 제거함으로써 조회성능을 향상시킬 수 있음.

4. 컬럼에 의한 반복적인 속성값을 갖는 형태는 속성의 원자성을 위배한 제 1차 정규화의 대상이 됨.
반복적인 속성 나열 형태에서는 각 속성에 대해 'or' 연산자로 연결된 조건들이 사용되는데, 이 때 어느 하나의 속성이라도 인덱스가 정의되어 있지 않게 되면 'or'로 연결된 모든 조건절들이 인덱스를 사용하지 않고 한 번의 전체 데이터 스캔으로 처리되게 되어 성능 저하가 나타날 수 있게 됨.
또한 모든 반복 속성에 인덱스를 생성하게 되면 검색 소드는 좋아지겠지만 반대급부적으로 너무 많은 인덱스로 인해 입력, 수정, 삭제의 성능이 저하됨.

5. 반정규화는 정규화된 엔터티, 속성, 관계에 대해 시스템의 성능향상과 개발과 운영의 단순화를 위해 중복, 통합, 분리 등을 수행하는 데이터 모델링 기법을 의미.
반정규화는 데이터를 중복하여 성능을 향상시키기 위한 기법이라고 정의할 수 있고 좀 더 넓은 의미의 반정규화는 성능을 향상시키기 위해 정규화된 데이터 모델에서 중복, 통합, 분리 등을 수행하는 모든 과정을 의미.
데이터 무결성이 깨질 수 있음에도 불구하고, 데이터를 중복하여 반정규화를 적용하는 이유는 데이터를 조회할 때 디스크 I/O량이 많아서 성능이 저하되거나 경로가 너무 멀어 조인으로 인한 성능저하가 예상되거나 컬럼을 계산하여 읽을 때 성능이 저하될 것이 예상되는 경우임.

6.
- 다량 데이터 탐색의 경우 인덱스가 아닌 파티션 및 데이터 클러스터링 등의 다양한 물리 저장 기법을 활용하여 성능 개선을 유도. 하나의 결과셋을 추출하기 위해 다량의 데이터를 탐색하는 처리가 반복적으로 번번하게 발생하다면 이때는 반정규화를 고려.
- 이전 또는 이후 위치의 레코드에 대한 탐색은 window function으로 접근 가능.
- 집계 테이블 이외에도 다양한 유형(다수 테이블의 키 연결 데이터 등)에 대하여 반정규화 테이블 적용이 필요할 수 있음.
- 반정규화 정보에 대한 재현의 적시성으로 판단. 다수 테이블에 대한 다량의 조인이 불가피한 경우 데이터 제공의 적시성 확보를 위한 반정규화가 필수.
(적시성 : 데이터 최신성 유지와 같은 품질 요건에 얼마나 잘 대처하고 있는지를 의미)

7. 테이블의 반정규화

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


8. 컬럼의 반정규화

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


9. 반정규화 절차
1) 반정규화 대상조사
- 범위처리빈도수 조사
- 대량의 범위 처리 조사
- 통계성 프로세스 조사
- 테이블 조인 개수

2) 다른 방법유도 검토
- 뷰 테이블(지나치게 많은 조인이 걸려 데이터를 조회하는 작업이 기술적으로 어려울 경우)
- 클러스터링 적용(대량의 데이터처리나 부분처리에 의해 성능이 저하되는 경우 클러스터링을 적용)
- 인덱스의 조정(대량의 데이터처리나 부분처리에 의해 성능이 저하되는 경우 인덱스를 조정)
- 응용애플리케이션(응용애플리케이션에서 로직을 구사하는 방법을 변경하으로써 성능 향상)
- 대량의 데이터는 primary key의 성격에 따라 부분적인 테이블로 분리할 수 있음. 즉 파티셔닝 기법이 적용되어 성능저하를 방지

3) 반정규화 적용
- 테이블 반정규화
- 속성 반정규화
- 관계 반정규화

10. 한 테이블에 많은 컬럼들이 존재하는 경우우데이터가 물리적으로 저장되는 디스크 상에 넓게 분포할 가능성이 커지게 되어 디스크 I/O가 대량으로 발생할 수 있고, 이로 인해 성능이 저하될 수 있음.
따라서 트랜잭션이 접근하는 컬럼 유형을 분석해서 자주 접근하는 컬럼들과 상대적으로 접근 빈도가 낮은 컬럼들을 구분하여 1:1로 테이블을 분리하면 디스크 I/O가 줄어들어 성능을 향상 시킬 수 있음.
테이블 내에서 컬럼의 위치를 조정하는 것은 데이터 주로 채워지는 컬럼을 앞 쪽에 위치, 데이터가 채워지지 않고 주로 NULL 상태로 존재하는 컬럼들을 뒤쪽에 모아둠으로써 로우의 길이를 어느정도 감소시킬 수 있기 때문에 바람직한 해결책이라고 보기 힘드며, 무엇보다 데이터가 채워지지 않고 null 상태로 존재하게 되는 컬럼들이 많이 나타나는 경우 너무 낳은 엔터티들에 무리하게 동질성을 부여하여 통합을 수행했거나, 예측하기 어려운 미래 시점을 겨냥하여 과도하게 의욕적으로 속성을 확장한 경우 등에서 주로 나타남.
자주 사용되는 컬럼들이나 현시점에서 주로 사용되는 컬럼을 한데 모으고, 사용빈도가 낮은 컬럼들이나 미래 시점에 사용될 것으로 예상되는 컬럼들을 한데 모아 1:1 관계 엔터티로 분리하는 등의 설계 수정을 고려하는 것이 좋음.

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

12. 슈퍼/서브 타입 데이터 모델의 변환기술
- 개별로 발생되는 트랜잭션에 대해서는 개별 테이블로 구성
- 슈퍼타입+서브타입에 대해 발새오디는 트랜잭션에 대해서는 슈퍼타입+서브타입 테이블로 구성
- 전체를 하나로 묶어 트랜잭션이 발생할 때는 하나의 테이블로 구성
13. =로 들어온 조건에 해당하는 컬럼이 인덱스의 가장 앞쪽에 위치할 때 인덱스의 이용 효율성이 가장 높음.
14. 분산 데이터의 장점
- 지역 자치성, 점증적 시스템 용량 확장
- 신뢰성과 가용성
- 효용성과 융통성
- 빠른 응답 속도와 통신비용 절감
- 데이터의 가용성과 신뢰성 증가
- 시스템 규모의 적절한 조절
- 각 지역 사용자의 요구 수용 증대

15. 분산 데이터의 단점
- 소프트웨어 개발 비용
- 오류의 잠재성 증대
- 처리 비용의 증대
- 설계, 관리의 복잡성과 비용
- 불규칙한 응답 속도
- 통제의 어려움
- 데이터 무결성에 대한 위협

16. 데이터가 여러 지역에 분산되어 있지만 하나의 데이터베이스처럼 사용하기를 원하는 분산데이터베이스 환경에서의 분산설계
- 공통코드, 기준정보 등 마스터 데이터는 분산데이터베이스에 복제분산을 적용
- 거의 실시간 업무적인 특성을 가지고 있을 때 분산 데이터베이스를 사용하여 구성
- 백업 사이트를 구성할 때 간단하게 분산기능을 적용하여 구성 




조상님LOTTO - Google Play 앱

무료로 로또 당첨 확률을 높일 수 있습니다.

play.google.com

뽀모도로 타이머(Pomodoro Timer) - Google Play 앱

뽀모도로(Pomodoro)공부법은 단시간 집중력 향상을 위한 자기주도 학습법입니다.

play.google.com

반응형

'자격증 > SQLD(SQL 개발자)' 카테고리의 다른 글

SQLD 합격후기 / 노랭이책 공부법  (1) 2022.11.26
SQLD - SQL 기본  (0) 2022.11.01
SQLD - 데이터 모델링의 이해  (2) 2022.10.24
SQLD(SQL 개발자) 요약/요점정리  (0) 2022.10.24
[SQL활용] 그룹 함수  (0) 2017.12.06

댓글