메뉴 건너뛰기

bysql.net

제4절_대량_데이터에_따른_성능

2012.03.07 11:46

오예스 조회 수:7091

제4절_대량_데이터에_따른_성능

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

     - 대랑의 데이터가 하나의 테이블에 집약되어 병목현상이 발생할때 컬럼단위 또는 로우단위로 로 테이블을 분할하여 트랜잭션의 분할 처리 가능하게 처리.

     

      - 대용량 테이블의 문제점

         1) 대량의 데이터가 존재하는 경우에는 인덱스의 Tree구조가 너무 커져 효율성이 떨어져 데이터를 (입력, 수정, 삭제, 조회) 할때 많은 디스크 I/O를 유발되어 성능저하 발생.

        2) 대용량 테이블의 인덱스 크기(용량)가 커지게 되면 인덱스를 찾아가는 단계가 깊어지게 되어 조회의 성능에도 영향을 미침.

            인덱스 크기가 커질 경우 조회의 성능에는 영향을 미치는 정도가 작지만 데이터를 입력/수정/삭제하는 트랜잭션의 경우 인덱스의 특성상 일량이 증가하여 성능저하 발생. 또한 데이터에 대한 범위 조회시 더 많은 I/O 유발할 수 있게 되어 성능저하를 유발.

        3) 컬럼이 많아지게 되면 물리적인 디스크에 여러 블록에 데이터가 저장됨. 따라서 데이터를 처리할때 여러블록에서 데이터를 I/O 해야 하는 즉 SQL문장의 성능이 저하될 수 있는 특징을 가지게 된다.

       4) 많은 컬럼(300개 이상)은 로우체이닝과 로우 마이그레이션이 발생하여 DB  메모리에서 디스크와 I/O(입력/출력)가 발생할때 불필요한 I/O가 발생하여 성능 저하발생.

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

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

        

 

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

  예) 도서정보 테이블 컬럼수 200개
      하나의 로우길이 :10kb
      한개 블록사이즈 :2kb
      하나의 로우길이/한개 블록사이즈 = 5 (로우체이닝 발생)
      
  위의 상황에서 도서정보 테이블의 일부컬럼만 조회하였을때 1개의 블록에서 읽어오지 못하고 다수의 블록을 참조해야 할수 있음.
  해결방법 : 독립적인 트랜잭션이 발생하는 경우가 많이 있어 1:1 관계로 분리.

   - 컬럼수가 많은 테이블에서 데이터 처리하게 되면 디스크 I/O양이 증가하여 성능이 저하됨.
   - 컬럼수가 적은 테이블에서 데이터 처리하게 되면  디스크 I/O양이 감소하여 성능이 저하됨.

 

 

3. 대량 데이터 저장 및 처리로 인한 성능
  데이터량이 몇 천만건 넘어서면 하드웨어가 아무리 받춰줘도 감당이 안됨. 이 때는 논리적으로 하나의 테이블로 보이지만 물리적으로 여러 개의테이블스페이스에 쪼개어 저장될 수 있는 구조의 파티셔닝을 적용.

 

  가.range parition 적용
   예) 1억2천만건의 요금테이블
   PK는 요금일자 + 요금번호
   PK인 요금일자의 년+월을 이용하여 12개의 파티션 테이블을 생성. 하나의 파티션 테이블에는 평균 1,000만건 데이터가 존재한다고 가정.

   위의 상황에서 sql을 날리는 사람은 하나의 테이블로 보지만, dbms 내부적으로 sql where 절에 비교된 요금일자에 각 파티션 정보를 찾아
가므로 평균 1,000만건의 데이터가 있는 곳만 검색.


   특징 :  가장 많이 사용하는 파티셔닝으로 데이터 보관주기에 따라 테이블에 데이터를 쉽게 지우는 것이 가능하므로 (파티션 테이블을 drop) 데이터보관주기에 따른 테이블 관리가 용이.

 

 나. list partition 적용
   예) 1억건의 데이터가 들어 있는 고객테이블
       PK는 지점, 사업소 사업장, 핵심적인 코드값

       사업소코드별로 LIST PARTITION을 적용한 예
       LIST PARTITION은 대용량 데이터를 특정값에 따라 분리 저장할 수는 있으나 range parition 과 같이 데이터 보관주기에 따라 쉽게 삭제하는 기능은 제공될 수 없다.

 

 다. HASH PARTITION 적용
  HASH PARTITION은 지정된 hash 조건에 다라 해쉬 알고리즘이 적용되어 테이블이 분리되면 설계자는 데이터가 정확하게 어떻게 들어갔는지 알 수 없다.  역시 성능향상을 위해 사용하며 데이터 보관주기에 다라 쉽세 삭제하는 기능은 제공될수 없다.


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

   테이블에 대한 수평분할/수직분할에 대한 결정은 다음의 4가지 원칙을 적용.

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