정규화와 성능
by 으렴정규화의 문제점
정규화는 테이블을 분해해서 데이터 중복을 제거하기 때문에 데이터 모델의 유연성을 높인다. 정규화는 데이터 조회시에 join을 유발하기 때문에 CPU와 메모리를 많이 사용한다. 하다보면 뭐 다른 비교하는 기능을 추가해야하는 경우가 생긴다 이를 위해서 index나 optimizer가 있다. join자체가 부하를 유발한다. 정규화의 문제점을 해결하기 위해서 반정규화를 하여 하나의 테이블에 저장한다면 조인을 통한 성능저하는 해결된다. 이런 성능저하를 해결하기 위해 반 정규화가 있다고 보면 된다.
정규화를 이용한 성능 튜닝
정규화는 조인으로 인하여 성능이 저하된다. 그래서 이 문제를 반정규화로 해결한다. 반정규화는 데이터를 중복하기 때문에 또다른 문제점을 발생시킨다. 예를들어 한 행의 칼럼이 계속적으로 증가하면 조인이 최소화 되기때문에 조화를 빠르게 할 수 있다. 너무 많은 칼럼이 추가된다면 한 행의 크기가 데이터베이스 관리 시스템의 입출력 단위인 Block Size의 크기를 넘어서게 된다. 이렇게 되면 한개의 행을 읽기 위해서 여러개의 블록을 읽어야 한다. 한행을 읽기 위해서 여러개의 블록을 읽게 되면 DISK IO가 증가하기 때문에 성능이 떨어진다. 이와 같은 문제가 발생하면 테이블을 분해하는 방법 밖에 없다. 따라서 정규화는 입출력 데이터의 양을 줄여서 성능을 향상 시킬 수 있다.
반정규화(De-Normalization)
데이터베이스의 성능향상을 위하여 데이터 중복을 허용하고 조인을 줄이는 데이터 베이스 성능 향상 방법이다. 반정규화는 select 속도를 향상시키지만 데이터 모델의 유연성은 낮아진다.
반정규화를 수행하는 경우
1. 정규화에 충실하면 종속성, 활용성은 향상되지만 수행속도가 느려지는 경우
2. 다량의 범위를 자주 처리해야 하는 경우
3. 특정 범위의 데이터만 자주 처리하는 경우
4. 요약/집계 정보가 자주 요구되는 경우
반정규화 절차
1. 대상 조사 및 검토 : 데이터 처리 범위, 통계성 등을 확인해서 반정규화 대상을 조사한다.
2. 다른 방법 검토 : 반정규화를 수행하기 전에 다른 방법이 있는지 검토한다. 클러스터링, 뷰, 인덱스, 튜닝, 응용프로그램, 파티션 등 검토
3. 반정규화 수행 : 테이블, 속성, 관계 등을 반정규화 한다.
클러스터링(Clustering)
클러스터링 인덱스라는 것은 인덱스 정보를 저장할 때, 물리적으로 정렬해서 저장하는 방법이다.
조회시에 인접 블록을 연속적으로 읽기 때문에 성능이 향상된다.
반정규화 기법
1. 계산된 칼럼 추가
2. 테이블 수직 분할
3. 테이블 수평분할
- 파티션 기법
데이터 베이스에서 파티션을 사용하여 테이블을 분할 할 수 있다. 파티션을 사용하면 논리적으로는 하나의 테이블이지만 여러개의 데이터 파일에 분산되어서 저장된다.
Range Partition : 데이터 값의 범위를 기준으로 파티션을 수행한다.
List Partition : 특정 값을 지정하여 파티션을 수행한다.
Hash Partition : 해시함수를 적용하여 파티션을 수행한다.
Composite Partition : 범위와 해시를 복합적으로 사용하여 파티션을 수행한다.
장점: 데이터 조회시 액세스 범위가 줄어들기때문에 성능 향상 / 데이터가 분할되어 있기 때문에 I/O성능이 향상 / 각 파티션을 독립적으로 백업 및 복구가 가능
4. 테이블 병합
1대1의 관계의 테이블을 하나의 테이블로 병합해서 성능을 향상시킨다
1대N 관계의 테이블을 병합하여 성능을 향상시킨다. 하지만 많은 양의 데이터 중복이 발생한다.
슈퍼타입과 서브타입 관계가 발생하면 테이블을 통합하여 성능을 향상시킨다.
Super type과 Sub type
고객 엔티티는 개인고객과 법인 고객으로 분류된다 이때 고객엔티티는 슈퍼타입이고 개인고객과 법인 고객은 서브타입이 된다. 즉 부모와 자식간의 관계가 나타난다 슈퍼타입과 서브타입의 관계는 배타적 관계와 포괄적 관계가 있는데 베타적 관걔는 고객이 개인고객이거나 법인고객인 경우를 의미한다 포괄적 관걔는 고객이 개인고객일 수도 있고 법인 고객일 수도 있는 것이다.
변환 방법
OneToOne type : 슈퍼타입과 서브타입을 개별테이블로 도출 / 테이블의 수가 많아서 조인이 많이 발생하고 관리가 어렵
Plus type : 슈퍼타입과 서브타입 테이블로 도출 / 조인이 발생하고 관리가 어렵
Single type : 슈퍼타입과 서브타입을 하나의 테이블로 도출 / 조인 성능이 좋고 관리가 편리하지만 IO성능이 나쁨
'DATABASE > SQL' 카테고리의 다른 글
DDL Data Definition Language - ALTER DROP 테이블의 변경과 삭제 (0) | 2019.02.26 |
---|---|
DDL Data Definition Language - CREATE 테이블 생성 (0) | 2019.02.26 |
정규화 Normalization (0) | 2019.02.24 |
Entity Identifier 엔티티 식별자 (0) | 2019.02.24 |
식별 관계와 비식별 관계 (0) | 2019.02.23 |
사이트의 정보
코딩하렴
으렴