728x90
4) 대량 데이터에 따른 성능
1. 대량 데이터 발생에 따른 테이블 분할
- 데이터가 특정 테이블에 많이 발생되는 경우, 트랜잭션(DB에서 수행하는 논리적 작업의 단위)이 분산 처리될 수 있도록 테이블 단위에서 분할하는 방법을 적용할 필요가 있다
대량의 데이터가 존재하는 테이블에 많은 트랜잭션이 발생하여 성능이 저하되는 테이블 구조에 대해 수평/수직 분할 설계를 통해 성능 저하를 예방한다
- 성능 저하를 예방하는 2가지 경우
- 한 테이블에 데이터가 대량으로 집중된 경우
- SQL 문장에서 데이터 처리를 위한 I/O 양이 증가하기 때문에 성능 저하
- 인덱스 구성으로 접근하는 범위를 조절하면서 I/O를 줄일 수 있다.
- 하나의 테이블에 여러 칼럼이 존재하여 디스크에 많은 블록을 점유한 경우
- 디스크에 물리적으로 저장되는 범위가 넓어짐(여러 블록을 차지)
- 데이터 처리를 위해 여러 블록에 접근해야 하기 때문에 SQL 문장의 성능이 저하
- 함수적 종속성에 근거하여 하나의 테이블을 설계하거나 기술적 분석을 통해 성능 향상
- Row Chaining : row 길이가 너무 길어 데이터 블록 하나에 데이터가 모두 저장되지 않고 두 개 이상의 블록에 걸쳐 하나의 로우가 저장된 형태
- Row Migration : 데이터 블록에서 수정이 발생하면서 수정된 데이터를 해당 데이터 블록에서 저장하지 못하고 다른 블록의 빈 공간에 저장하는 방식
- 한 테이블에 데이터가 대량으로 집중된 경우
2. 한 테이블에 많은 칼럼을 가지고 있는 경우
-
칼럼 수가 많은 테이블에서 데이터 처리하면 디스크 I/O 양이 증가하기 때문에 성능이 저하 됨
-
트랜잭션이 발생되는 특정 칼럼을 분석하여 테이블을 분할하는 과정을 통해 디스크 I/O를 줄일 수 있다
-
분리된 테이블은 디스크에 적어진 칼럼이 저장되므로 Row chaining과 Row migration이 줄어든다
3. 대량 데이터 저장 및 처리로 인한 성능
논리적으로는 하나의 테이블이지만 물리적으로 테이블 스페이스를 분할하여 저장하는 구조의 파티셔닝을 적용
- RANGE PARTIOTION
- 대상 테이블이 날짜 또는 숫자 값으로 분리 가능하고, 각 영역별 트랜잭션이 분리 된다면 적용
- 데이터 보관 주기에 따라 테이블에 데이터를 쉽게 지우는 것이 가능(파티션 된 테이블을 DROP하면 되니까)하므로 데이터 보관 주기에 따른 테이블 관리가 용이
- LIST PARTITION
- 핵심 코드 값으로 PK가 구성되어 있고, 대량의 데이터가 있는 테이블이라면 각각의 값에 의해 파티셔닝 진행
- 대용량 데이터를 특정 값에 따라 분리 저장은 할 수 있지만, RANGE PARTITION 처럼 데이터 보관 주기에 따라 삭제하는 기능은 제공되지 않는다
- HASH PARTITION
- HASH 조건에 따라 해시 알고리즘이 적용되어 테이블이 분리되면서 설계자는 테이블에 데이터가 정확하게 어떻게 들어가 있는지 알 수 없다
- 성능 향상을 위해 사용하고, 데이터 보관 주기에 따른 삭제 기능은 제공되지 않는다
4. 테이블 수평/수직 분할의 절차
- 수평/수직 분할 결정의 원칙
- 데이터 모델링을 완성한다
- 데이터베이스 용량산정(어느 테이블에 데이터 양이 대용량이 되는지 분석)을 한다
- 대량 데이터가 처리되는 테이블에 대해서 트랜잭션 처리 패턴을 분석(테이블을 1:1 형태로 분리할 수 있는지 검토)한다
- 집중화된 처리가 칼럼 단위로 발생하는지, 로우 단위로 발생하는지 분석하여 해당 단위로 테이블을 분리한다
- 칼럼의 수가 적지만 데이터 용량이 많아서 성능 저하가 예상되면, 테이블 파티셔닝 전략을 고려
출처 : https://blog.naver.com/handuelly/221709607292
728x90
300x250