Search

대량 데이터에 따른 성능

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

① 대량의 데이터가 존재하는 테이블에 많은 트랜잭션이 발생하여 성능이 저하되는 테이블 구조에 대해 수평/수직 분할 설계를 통해 성능 저하를 예방할 수 있음
테이블의 데이터는 Block 단위로 디스크에 저장된다
블록 장치는 개별 바이트 단위가 아닌 일정 크기(block) 단위로 접근하는 장치를 말하는 것으로 간단히 말하면 하드 디스크와 같은 대용량 저장 장치를 말한다
칼럼이 많아지게 되면 하나의 로우를 저장 시 물리적인 디스크 내 여러 블록에 데이터가 저장될 가능성이 높아짐
하나의 행을 읽더라도 여러 개의 블록을 읽어야함
자연스레 해당 SQL문의 Block I/O가 많아짐
대용량 테이블에서 발생할 수 있는 현상
로우 체이닝(Row Chaining) : 로우 길이가 너무 길어서 데이터 블록 하나에 데이터가 모두 저장되지 않고 두 개 이상의 블록에 걸쳐 하나의 로우가 저장되어 있는 형태
로우 마이그레이션 (Row Migration) : 데이터 블록에서 수정이 발생하면 수정된 데이터를 해당 데이터 블록에서 저장하지 못하고 다른 블록의 빈 공간을 찾아 저장하는 방식
로우 체이닝과 로우 마이그레이션이 발생하여 많은 블록에 데이터가 저장되면 데이터 조회 시 절대적인 Block I/O의 횟수가 많아지게 된다.
SQL   메모리(block)   disk
I/O는 입력(Input)/출력(Output)의 약자로, 컴퓨터 및 주변장치에 대하여 데이터를 전송하는 프로그램, 운영 혹은 장치를 일컫는 말, 프로세서와 메모리, 확장 슬롯, 마더보드에서 일어나는 데이터 전송도 I/O 라고 일컬어집니다.
Block I/O의 횟수가 많아지면 Disk I/O를 할 가능성도 높아진다.
Disk I/O를 하게 되는 경우 성능이 급격히 저하 된다.

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

칼럼수가 많은 테이블은 SELECT시 Block I/O의 수가 많아짐
Block I/O가 많아지면 자연스레 Disk I/O의 양이 증가될 가능성이 높아짐
Disk I/O가 많아지면 성능이 저하됨
이럴 경우 지나치게 많은 칼럼이 존재하는 테이블을 수직분할하면 성능이 향상될 수 있음
SELECT 발행기관명 , 수량 , 공고일 , 발행일 FROM 도서정보 WHERE 초판년 = '2002' ;
SQL
복사

한 테이블에 많은 수의 칼럼을 가지고 있는 경우 - 수직 분할

SELECT 발행기관명 , 수량 , 공고일 , 발행일 FROM 도서정보 WHERE 초판년 = '2002' ;
SQL
복사
전자출판유형에 대한 트랜잭션이 독립적으로 발생이 되는 경우가 많아 1:1 관계로 수직분할
대체제품에 대한 유형의 트랜잭션이 독립적으로 발생되는 경우가 많이 있어 1:1 관계로 수직분할
분리된 테이블은 칼럼의 수가 적으므로 로우마이그레이션과 로우체이닝이 많이 줄어들 수 있다
도서정보 테이블 조회시에도 디스크 I/O가 줄어들어 성능이 좋아짐
O(M^N)

대용량 테이블 성능 향상 방안 - 수평분할

RANGE PARTITION 적용
요금테이블에 PK가 요금일자+요금번호로 구성되어 있고 데이터건수가 1억2천만 건인 대용량 테이블의 경우
하나의 테이블로는 너무 많은 데이터가 존재하므로 인해 성능이 느린 경우에 해당
요금의 특성상 항상 월 단위로 데이터 처리를 하는 경우가 많으므로 PK인 요금일자의 년+월을 이용하여 12개의 파티션 테이블을 생성
데이터보관주기에 따라 테이블에 데이터를 쉽게 지우는 것이 가능하므로(파티션 테이블을 DROP하면 되므로) 데이터 보관주기에 따른 테이블 관리가 용이
LIST PARTITION 적용
고객 테이블에 데이터가 1억 건이 있는데 하나의 테이블에서 데이터를 처리하기에는 SQL문장의 성능이 저하되어 지역을 나타내는 사업소코드별로 LIST PARTITION을 적용
LIST PARTITION은 대용량 데이터를 특정 값에 따라 분리 저장할 수는 있으나 RANGE PARTITION과 같이 데이터 보관 주기에 따라 쉽게 삭제하는 기능은 제공될 수 없음
HASH PARTITION 적용
hash 구조 ⇒ 칼럼 (숫자값) → function()→ 특정값 → 매핑 → 칼럼 → 값
HASH PARTITION은 지정된 HASH 조건에 따라 해싱 알고리즘이 적용되어 테이블이 분리
(가운데에서 hash function이 분산 처리해줌)
설계자는 테이블에 데이터가 정확하게 어떻게 들어갔는지 알 수 없음
성능 향상을 위해 사용하며 데이터 보관 주기에 따라 쉽게 삭제하는 기능은 제공될 수 없다.
테이블에 대한 수평 분할/수직 분할의 절차
① 데이터 모델링을 완성한다. ② 데이터베이스 용량 산정을 한다. ③ 대량 데이터가 처리되는 테이블에 대해서 트랜잭션 처리 패턴을 분석한다. ④ 칼럼 단위로 집중화된 처리가 발생하는지,
로우 단위로 집중화된 처리가 발생되는지 분석하여 집중화된 단위로 테이블을 분리하는 것을 검토한다.