Skip to end of metadata
Go to start of metadata

개요


인덱스는 데이타를 읽어 정렬하고 저정하는 과정을 가집니다. 

그래서 인덱스를 병렬로 동작시키는건 과도한 디스크 IO나 버퍼미스 를 발생시켜 오히려 성능이 떨어집니다.

아래와 같이 프로퍼티를 설정해서 IO 와 버퍼 미스를  줄이고 정렬과정을 최적화 해서 대용량 디스크 인덱스 빌드 시간을 단축시킬수 있습니다. 

해결책


버전 6.5.1~7.1.0 


1.BUFFER_AREA_SIZE(단위 bytes) = (클수록 좋습니다.)
2.SORT_AREA_SIZE(단위 bytes) = (장비 물리코어 수 * 20MB)
3.DISK_INDEX_BUILD_MERGE_PAGE_COUNT(단위 page수) = (BUFFER_AREA_SIZE의 1% 추천하지만 DISK_INDEX_BUILD_MERGE_PAGE_COUNT(아래 고려사항3번)을 고려해야 합니다.)
4.INDEX_BUILD_THREAD_COUNT(core수) = (장비 물리코어 수)

고려사항



1.BUFFER_AREA_SIZE

  • 값이 클수록 STARTUP 시간이 더 걸립니다.

 
2.SORT_AREA_SIZE

  •   인덱스 1개 빌드시 최소 SORT_AREA_SIZE 크기이상의 메모리를 사용합니다. 만약, 병렬로 2개를 빌드하면 SORT_AREA_SIZE * 2배의 메모리량이 사용됩니다.
      SORT_AREA_SIZE는 디스크 템프테이블에서도 공유하는 프로퍼티로, 변경 시 디스크 템프테이블의 동작에 영향이 있습니다.

 
3.DISK_INDEX_BUILD_MERGE_PAGE_COUNT

  • 프로퍼티의 단위는 페이지 수이고, BUFFER_AREA_SIZE 프로퍼티 단위는 bytes 입니다.
  • 프로퍼티의 값이 크고 인덱스 크기가 작을경우, 오히려 성능이 떨어지는 현상이 있을수 있습니다.
    -  아래의 조건을 만족하는 경우 인덱스 빌드 성능이 떨어질수 있습니다.
       DISK_INDEX_BUILD_MERGE_PAGE_COUNT  >  ( 인덱스키길이 * RECORD수 ) / SORT_AREA_SIZE 

 

버전 7.3.0 ~


1.BUFFER_AREA_SIZE(단위 bytes) = (클수록 좋습니다.)
2.DISK_INDEX_BUILD_SORT_AREA_SIZE(단위 bytes) = (장비물리코어수 * 20MB)
3.DISK_INDEX_BUILD_MERGE_PAGE_COUNT(단위 page수) = (BUFFER_AREA_SIZE의 1%)
4.INDEX_BUILD_THREAD_COUNT(core수) = (장비 물리코어수)

고려사항



1.BUFFER_AREA_SIZE

  •   값이 클수록 STARTUP 시간이 더 걸립니다.


2.DISK_INDEX_BUILD_SORT_AREA_SIZE

  •   인덱스 1개 빌드시 최소 DISK_INDEX_BUILD_SORT_AREA_SIZE 크기이상의 메모리를 사용합니다. 만약, 병렬로 2개를 빌드하면 DISK_INDEX_BUILD_SORT_AREA_SIZE * 2배의 메모리량이 사용됩니다.
     (SORT_AREA_SIZE를 사용하지 않습니다)

 
3.DISK_INDEX_BUILD_MERGE_PAGE_COUNT

  • 프로퍼티의 단위는 페이지 수이고, BUFFER_AREA_SIZE 프로퍼티 단위는 bytes 입니다.
  • 아래 문제는 7.3.0 이상 에서는 발생하지 않습니다. 
    • 프로퍼티의 값이 크고 인덱스 크기가 작을경우, 오히려 성능이 떨어지는 현상이 있을수 있습니다.
      -  아래의 조건을 만족하는 경우 인덱스 빌드 성능이 떨어질수 있습니다.
         DISK_INDEX_BUILD_MERGE_PAGE_COUNT  >  ( 인덱스키길이 * RECORD수 ) / SORT_AREA_SIZE 

  • No labels