목차

1. 대량 데이터발생에 따른 테이블 분할 개요
2. 한 테이블에 많은 수의 칼럼을 가지고 있는 경우
3. 대량 데이터 저장 및 처리로 인해 성능
4. 테이블에 대한 수평분할/수직분할의 절차

1. 대량 데이터발생에 따른 테이블 분할 개요

  • 잘 설계되어 있는 데이터 모델이라고 할지라도, 대량의 데이터가 하나의 테이블에 집약되어 있고, 하나의 하드웨어 공간에 저장되어 있으면 성능저하가 발생함
  • 또한 하나의 테이블에 매우 많은 컬럼이 존재하여 디스크의 많은 블록을 점유하는 경우에도 성능이 저하될 수 있음
  • 대량의 데이터가 저장된 테이블의 인덱스의 경우에도 인덱스의 트리구조가 너무 커져 DML처리를 할 때 성능이 저하되는 경우가 발생함(인덱스 뎁스가 깊어지면 조회시에도 성능저하가 발생할 수 있음)

로우체이닝(Row Chaining)

  • 로우체이닝(Row Chaining) : 로우 길이가 너무 길어서 데이터 블록 하나에 데이터가 모두 저장되지 않고 두 개 이상의 블록에 걸쳐 하나의 로우가 저장되어 있는 형태
  • 로우마이그레이션(Row Migration) : 데이터 블록에서 수정이 발생하면 수정된 데이터를 해당 데이터 블록에서 저장하지 못하고 다른 블록의 빈 공간을 찾아 저장하는 방식

위와 같은 로우체이닝, 로우마이그레이션이 많이 발생하면 I/O가 증가하여 성능이 저하됨

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

  • 1개의 테이블에 매우 많은 컬럼을 가지고 있는 경우(위의 그림에서는 도서정보라고 하는 테이블에 컬럼의 수가 200개라고 가정하였음) 1개의 레코드는 여러 블록에 저장될 것임
  • 이렇게 많은 컬럼을 가지고 있는 테이블은 트랜잭션을 분석하여 자주 이용되는 컬럼을 별도의 테이블로 쪼개줌으로써 성능을 개선할 수 있음

  • 위의 그림에서는 전자출판유형 및 대체제품에 대한 트랜잭션이 많이 발생하여 별도의 테이블로 분할한 경우임

  • 위 그림은 분리된 테이블에서 1개의 레코드가 1개의 블럭에 모두 저장 돼, 로우체이닝 및 로우마이그레이션이 줄어들고 I/O성능도 개선된 형태임

3. 대량 데이터 저장 및 처리로 인해 성능

  • 대량의 데이터가 1개의 테이블에 저장될 경우 파티셔닝을 적용하여 성능향상을 도모할 수 있음
  • 파티셔닝 방법으로 LIST PARTITION(특정값 지정), RANGE PARTITION(범위), HASH PARTITION(해쉬적용), COMPOSITE PARTITION(범위와 해쉬가 복합) 등이 가능

가. RANGE PARTITION 적용

  • 위 그림은 요금테이블에 PK가 요금일자+요금번호로 구성되어 있고 데이터건수가 1억2천만 건인 대용량 테이블을 가정한 경우(PK인 요금일자의 년+월을 이용하여 12개의 파티션 테이블을 만듬)
  • SQL문장을 처리할 때는 DBMS 내부적으로는 SQL WHERE 절에 비교된 요금일자에 의해 각 파티션에 있는 정보를 찾아가므로 평균 1,000만 건의 데이터가 있는 곳을 찾아도 되어 성능이 개선될 수 있음
  • 가장 많이 사용되는 파티셔닝 방법 (보관주기에 따른 테이블관리가 용이)

나. LIST PARTITION 적용

  • 위 그림은 지점, 사업소, 사업장, 핵심적인 코드값 등으로 PK가 구성된 대용량 테이블을 가정한 경우

다. HASH PARTITION 적용

  • 지정된 해쉬 알고리즘을 적용하여 테이블을 분리함
  • 설계자는 어떤 파티션에 데이터가 저장되는 지 알기 어려움

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

  1. 데이터 모델링을 완성한다.
  2. 데이터베이스 용량산정을 한다.
  3. 대량 데이터가 처리되는 테이블에 대해서 트랜잭션 처리 패턴을 분석한다.
  4. 칼럼 단위로 집중화된 처리가 발생하는지, 로우단위로 집중화된 처리가 발생되는지 분석하여 집중화된 단위로 테이블을 분리하는 것을 검토한다.

문서에 대하여