Amazon DynamoDB 테이블에 대한 글로벌 보조 인덱스를 빠르게 생성하려면 어떻게 해야 하나요?

최종 업데이트 날짜: 2022년 8월 19일

Amazon DynamoDB 테이블에 대해 글로벌 보조 인덱스(GSI)를 생성하려고 하는데 시간이 오래 걸립니다.

간략한 설명

기존 테이블에 새 글로벌 보조 인덱스를 추가하면 IndexStatus가 CREATING으로 설정되고 Backfilling은 true로 설정됩니다. 채우기(Backfilling)는 테이블에서 항목을 읽고 인덱스에 추가할 수 있는지 확인하는 과정입니다. 인덱스가 채워질 때 DynamoDB는 내부 시스템 용량을 사용하여 테이블에서 항목을 읽어 인덱스 생성의 영향을 최소화하고 테이블의 읽기 용량이 부족하지 않도록 합니다.

글로벌 보조 인덱스 구축에 필요한 시간은 다음을 비롯한 여러 가지 요소에 따라 달라집니다.

  • 기본 테이블 크기
  • 테이블에서 인덱스에 포함 가능한 항목 수
  • 인덱스로 투사되는 속성 수
  • 인덱스에 프로비저닝된 쓰기 용량
  • 인덱스 생성 시 기본 테이블에서의 쓰기 작업
  • 인덱스 파티션 간의 데이터 분산

생성 프로세스의 속도를 향상하려면 인덱스에서 쓰기 용량 단위(WCU)의 수를 늘립니다.

글로벌 보조 인덱스는 기본 테이블에서 읽기 또는 쓰기 용량 모드를 이어받습니다. 테이블이 온디맨드 모드인 경우 인덱스도 온디맨드 모드로 생성됩니다. 이 경우 온디맨드 DynamoDB 테이블은 수신 트래픽에 따라 더 큰 용량을 위해 자체적으로 확장되므로 인덱스의 용량을 늘릴 수 없습니다.

해결 방법

OnlineIndexPercentageProgress Amazon CloudWatch 지표를 사용하여 인덱스 생성 프로세스를 모니터링합니다.

  1. DynamoDB 콘솔을 엽니다.
  2. 탐색 창에서 [테이블]을 선택한 다음, 목록에서 테이블을 선택합니다.
  3. [지표] 탭을 선택합니다.
  4. [모든 CloudWatch 지표 보기]를 선택합니다.
  5. 검색 상자에 OnlineIndexPercentageProgress를 입력합니다.
    참고: 검색에서 결과를 반환하지 않으면 지표가 채워질 때까지 1분 정도 기다립니다. 그리고 다시 시도합니다.
  6. 진행 상황을 보려는 인덱스 이름을 선택합니다.

테이블 용량(KB)을 원하는 채우기 시간으로 나누어 추가로 필요한 WCU 수를 결정합니다.

예시 1: 1GiB(1,074,000KB) 테이블이 있다고 가정합니다. 채우기 프로세스를 10분(600초) 내에 완료하려고 합니다. 다음과 같이 대략적으로 WCU 수를 계산할 수 있습니다.

1,074,000/600 = 1,790 WCU

예시 2: 인덱스 크기를 2GB로 만들고 1시간 내에 인덱스 생성을 완료한다고 가정합니다. 다음과 같이 대략적으로 WCU 수를 계산할 수 있습니다.

(2GB*1024*1024)KB/60분/60초 = ~583 WCU

필요한 WCU 수는 인덱스 크기 및 예상 시간에 따라 다릅니다.

참고: 이는 추정치에 불과합니다. 생성 시간은 파티션 사이에 키를 분산하는 방식, 항목의 용량, 테이블에서 인덱스로 투사되는 속성 수 등에 따라 달라집니다.

추가 쓰기 용량을 프로비저닝하려면 다음을 수행합니다.

  1. DynamoDB 콘솔을 엽니다.
  2. 탐색 창에서 [테이블]을 선택한 다음, 목록에서 테이블을 선택합니다.
  3. [용량] 탭을 선택합니다.
  4. 인덱스의 쓰기 용량을 늘린 다음, [저장]을 선택합니다.
  5. 약 1분 후 OnlineIndexPercentageProgress 지표의 생성 속도가 개선되었는지 확인합니다.