본문 바로가기
데이터베이스

대량 데이터에 따른 성능 관리

by dongR 2021. 3. 22.

성능 저하가 일어나는 경우)

 

1. 한 테이블에 데이터가 대량으로 집중되어 있는 경우 

- 한 테이블에 대량의 데이터가 있을 때 인덱스를 사용해도 성능이 개선되지 않을 경우

 

해결방법) 

- 사용자에겐 하나의 테이블로 보이지만 물리적으로 여러 개의 테이블 스페이스에 쪼개어 저장되는 파티셔닝을 적용 

 

파티션 종류)

1. Range Partition 

ex) 요금 테이블에서 많은 데이터가 존재함으로 인해 성능이 저하되는 경우 

- 요금의 특성상 월단위로 데이터 처리를 하는 경우가 많으므로 월별로 쪼개서 12개의 파티션 테이블을 만듦 

 

- 하나의 테이블에서 관리하면 12억건의 데이터를 관리하는데 Range Partition을 적용하면 월별로 파티션이 쪼개지므로 평균 1억 건의 관리함으로써 성능이 개선됨 

 

- 데이터 보관주기에 따라 테이블에 데이터를 쉽게 삭제할 수 있음(월별로 나눠진 파티션 테이블 중에서 필요 없는 파티션만 지우면 됨) 

 

2. List Partition

 

 

 

2. 하나의 테이블에 여러 개의 칼럼이 존재하여 디스크에 많은 블록을 점유하는 경우 

- 컬럼(속성)이 많아지게 되면 물리적인 디스크의 여러 블록에 데이터가 저장되는데 데이터를 처리할 때 여러 블록에서 데이터를 I/O해야 하는 경우 성능이 저하될 수 있다. 

 

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

 

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

 

--> 로우체이닝과 로우 마이그레이션이 발생하여 많은 블록에 데이터가 저장되면 데이터베이스 메모리에서 디스크와 I/O(입력/출력)이 발생할 때 불필요한 I/O 많이 발생하여 성능이 저하됨 

 

해결방법)

- 테이블을 쪼개어서 컬럼들을 분리시킨다. 

 

 

조회 조건에 따른 인덱스를 적절하게 이용하면 해당 테이블에 데이터가 많아도 원하는 데이터만 인덱스를 통해서 접근을 하기 때문에 I/O량이 크게 증가하지 않을 수도 있다고 생각할 수 있지만, 대량의 데이터가 하나의 테이블에 존재하게 되면 인덱스를 생성할 때 인덱스의 크기가 커지게 됨으로써 인덱스를 찾아가는 단계가 오래 걸리게 되어서 조회 시 성능에도 영향을 미칠 수 있다. 데이터를 입력/수정/삭제하는 경우에는 조회 시보다 성능이 더 저하됨 

'데이터베이스' 카테고리의 다른 글

M:M(다대다) 관계  (0) 2021.06.21
식별자의 정의와 키의 종류  (0) 2021.06.21
정규화  (0) 2021.03.22
트랜잭션  (0) 2021.03.19
스토어드 프로그램이란?  (0) 2020.12.23