본문 바로가기

자격증/SQLD

SQLD 1과목 2-4장. 대량 데이터에 따른 성능

[ 목차 ]

1. 대량 데이터 발생에 따른 문제

2. 대량 데이터 발생에 따른 문제 해결책

3. 한 테이블에 많은 수의 칼럼을 가지고 있는 경우

4. 대량 데이터 저장 및 처리로 인한 성능 향상법

5. 테이블에 대한 수평/수직 분할의 절차

 

1. 대량 데이터 발생에 따른 문제

1) 설계가 잘 되어있는 데이터 모델도 많은 데이터가 하나의 테이블, 하나의 하드웨어에 저장되어 있으면 성능 저하 발생

2) 중요한 업무에 해당하는 데이터가 특정 테이블에 있는 경우 일의 처리되는 양이 한군데에 몰리는 현상 발생

3) 한 테이블에 많은 데이터의 존재는 인덱스의 Tree구조가 커져 효율성이 떨어져 데이터를 처리할 때 I/O을 많이 유발

4) 한 테이블에 많은 칼럼의 존재는 데이터가 디스크의 여러 블록에 존재, 디스크에서 데이터를 읽는 I/O을 많이 유발

5) SQL문장에서 데이터를 처리하기 위한 I/O의 양이 증가하면 테이블의 성능이 저하

6) 많은 데이터가 하나의 테이블에 존재하면 인덱스를 생성할 때 인덱스의 크기가 커지고 인덱스를 찾아가는 단계가 깊

    어져 조회의 성능에도 영향. 이는 데이터를 입력/수정/삭제하는 트랜잭션의 경우 인덱스 특성상 일량이 증가하여 더

    많은 성능의 저하를 유발하고 데이터에 대한 범위 조회시 더 많은 I/O를 유발하여 성능 저하

 

2. 대량 데이터 발생에 따른 문제 해결책

1) 트랜잭션이 분산 처리될 수 있도록 테이블 단위에서 분할의 방법을 적용하여 해결

2) 칼럼 단위로 분할하는 수평분할로우 단위로 분할하는 수직분할이 존재

 

3. 한 테이블에 많은 수의 칼럼을 가지고 있는 경우

1) 칼럼이 많아지면 물리적 디스크에 여러 블록의 데이터가 저장되기 때문에 데이터를 처리할 때 여러 블록에서 데이터

    를 I/O 해야 하는 즉, SQL 문자의 성능이 저하가 발생할 수 있음

2) 칼럼이 많아지면 로우체이닝로우마이그레이션이 많아져 성능이 저하

3) 이로 인해 데이터베이스 메모리에서 디스크와 I/O가 발생할 때 불필요하게 I/O가 많이 발생하여 성능이 저하

4) 트랜잭션이 발생될 때 어떤 칼럼에 집중적으로 발생하는지 분석하여 테이블을 쪼개어 주면 디스크 I/O가 감소하여 성

    능이 개선, 즉 적절하게 1:1 관계로 분리함으로써 성능향상이 가능

로우체이닝 : 로우 길이가 너무 길어서 데이터 블록 하나에 데이터가 모두 저장되지 않고 두 개 이상의 블록에 걸
                     쳐 하나의 로우가 저장되어 있는 형태

로우마이그레이션 : 데이터 블록에서 수정이 발생하면 수정된 데이터를 해당 데이터 블록에서 저장하지 못하고
                              다른 블록의 빈 공간을 찾아 저장하는 방식

 

4. 대량 데이터 저장 및 처리로 인한 성능 향상법

1) 많은 양의 데이터가 예상될 경우 파티셔닝을 적용하거나 PK에 의해 테이블을 분할하는 방법을 적용

2) 데이터가 대량 발생하면 서버사양이 좋고 인덱스를 잘 생성해도 SQL문자의 성능이 나타나지 않기 때문에 논리적으로

    하나의 테이블로 보이지만 물리적으로 여러 개의 테이블스페이스에 쪼개어 저장할 수 있는 구조의 파티셔닝을 적용

3) RANGE PARTITION

  1] 가장 많이 사용하는 파티셔닝으로, 하나의 테이블로는 너무 많은 데이터가 존재하여 성능이 느린 경우에 해당

  2]  테이블이 날짜 또는 숫자값으로 분리가 가능하고 각 영역별로 트랜잭션이 분리된다면 적용

  3] 테이터 보관주기에 따라 테이블에 데이터를 쉽게 지우는 것이 가능해 테이블관리가 용이

4) LIST PARTITION

  1] 대용량 데이터를 특정 값에 따라 분리 저장할 수 있으나 RANGE PARTITION과 같이 데이터 보관주기에 따라 쉽게

      삭제하는 기능은 없음

5) HASH PARTITION

  1] 지정된 HASH 조건에 따라 해쉬 알고리즘이 적용되어 테이블이 분리되며 설계자는 테이블에 데이터가 정확하게 어

      떻게 들어갔는지 알 수 없음

  2] 데이터 보관주기에 따라 쉽게 삭제하는 기능은 없음

 

5. 테이블에 대한 수평/수직 분할의 절차

1) 데이터 모델링을 완성

2) 데이터베이스 용량 산정

3) 대량 데이터가 처리되는 테이블에 대해서 트랜잭션 처리 패턴을 분석

4) 칼럼 단위로, 혹은 로우 단위로 집중화된 처리가 발생하는지 분석하여 집중화된 단위로 테이블을 분리하는 것을 검토

용량산정

1) 어느 테이블에 데이터의 양이 대용량이 되는지 분석하는 것
2) 대용량일 경우 칼럼의 수가 많은지 확인
3) 칼럼의 수가 많다면 트랜잭션의 특성에 따라 테이블을 1:1 형태로 분리할 수 있는지 검증
4) 칼럼의 수가 적지만 데이터 용량이 많을 경우 테이블에 대해 파티셔닝 전략을 고려
5) 임의로 파티셔닝을 할 것인지 데이터가 발생되는 시간에 따라 할 것인지 설명된 기준에 따라 적용