목차
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. 테이블에 대한 수평분할/수직분할의 절차
- 데이터 모델링을 완성한다.
- 데이터베이스 용량산정을 한다.
- 대량 데이터가 처리되는 테이블에 대해서 트랜잭션 처리 패턴을 분석한다.
- 칼럼 단위로 집중화된 처리가 발생하는지, 로우단위로 집중화된 처리가 발생되는지 분석하여 집중화된 단위로 테이블을 분리하는 것을 검토한다.
문서에 대하여