Amazon DocumentDB 인덱스 관리 - Amazon DocumentDB

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Amazon DocumentDB 인덱스 관리

Amazon DocumentDB 인덱스 생성

Amazon DocumentDB에서 인덱스를 구축하려면 다음과 같이 다양한 결정을 내려야 합니다:

  • 얼마나 빨리 완료해야 할까요?

  • 빌드가 진행되는 동안 컬렉션에 액세스할 수 없나요?

  • 빌드에 할당할 수 있는 인스턴스 컴퓨팅 파워는 얼마나 됩니까?

  • 어떤 유형의 인덱스를 만들어야 하나요?

이 섹션에서는 이러한 질문에 답하는 데 도움이 되며, 인스턴스 기반 클러스터 컬렉션에서 Amazon DocumentDB 인덱스를 생성하는 데 필요한 명령과 모니터링 예제를 제공합니다.

지침

다음 지침에는 새 인덱스를 생성할 때의 기본 제한 및 구성 장단점이 포함되어 있습니다:

  • Amazon DocumentDB 버전 지원 - 모든 Amazon DocumentDB 버전에서 단일작업자 인덱싱이 지원되지만, 다중 작업자 인덱싱은 Amazon DocumentDB 버전 4.0 및 5.0에서만 지원됩니다.

  • 성능 트레이드오프 - 인덱스 생성 프로세스의 작업자 수를 늘리면 Amazon DocumentDB 데이터베이스의 기본 인스턴스에서 CPU 사용률과 읽기 IO가 증가합니다. 새 인덱스를 생성하는 데 필요한 리소스는 실행 중인 워크로드에 사용할 수 없습니다.

  • Elastic 클러스터 - Amazon DocumentDB 엘라스틱 클러스터에서는 병렬 인덱싱이 지원되지 않습니다.

  • 최대 작업자 - 구성할 수 있는 최대 작업자 수는 데이터베이스 클러스터의 기본 인스턴스 크기에 따라 다릅니다. 데이터베이스 클러스터의 기본 인스턴스에 있는 총 vCPU 수의 절반입니다. 예를 들어 vCPU가 64개 있는 db.r6g.16xlarge 인스턴스에서 최대 32개의 작업자를 실행할 수 있습니다.

    참고

    2xlarge 이하 인스턴스 클래스에서는 병렬 작업자가 지원되지 않습니다.

  • 최소 작업자 - 구성할 수 있는 최소 작업자 수는 1개입니다. 인스턴스 기반 클러스터의 인덱스 생성에 대한 기본 설정은 작업자 2명입니다. 하지만 “작업자 스레드” 옵션을 사용하면 작업자 수를 1개로 줄일 수 있습니다. 이렇게 하면 단일 작업자로 프로세스가 실행됩니다.

  • 인덱스 압축 - Amazon DocumentDB는 인덱스 압축을 지원하지 않습니다. 저장된 데이터 및 인덱스의 데이터 크기는 다른 옵션을 사용할 때보다 클 수 있습니다.

  • 여러 컬렉션 인덱싱 - 데이터베이스 클러스터의 기본 인스턴스에 있는 vCPU의 절반을 구성된 작업자가 여러 컬렉션에서 인덱스를 생성하는 데 사용할 수 있습니다.

  • 인덱스 유형 - Amazon DocumentDB에서 지원되는 인덱스 유형에 대한 전체 설명은 이 블로그 게시물을 참조하십시오.

시작하기

컬렉션에서 인덱스 생성을 시작하려면 명령을 사용합니다. createIndexes 기본적으로 명령어는 인덱스 생성 프로세스의 속도를 두 배 증가시키는 두 개의 병렬 작업자를 실행합니다.

예를 들어, 다음 명령 프로세스는 문서의 “user_name” 필드에 대한 색인을 만들고 색인 처리 속도를 작업자 4개로 늘리는 방법을 보여줍니다:

  1. 클러스터에서 두 개의 병렬 워커를 사용하여 인덱스를 생성합니다.

    db.runCommand({"createIndexes":"test","indexes":[{"key": {"user_name":1}, "name":"username_idx"}]})
  2. 인덱스 생성 프로세스의 속도를 최적화하려면 db.runCommand createIndexes 명령의 “worker threads” 옵션 ("workers":<number>) 을 사용하여 작업자 수를 지정할 수 있습니다.

    프로세스 속도를 병렬 작업자 4명으로 늘리십시오:

    db.runCommand({"createIndexes":"test","indexes":[{"key": {"user_name":1}, "name":"username_idx", "workers":4}]})
    참고

    작업자 수가 많을수록 인덱스 생성 진행 속도가 빨라집니다. 하지만 작업자 수가 늘어날수록 기본 인스턴스의 vCPU 및 읽기 IO에 가해지는 부하도 증가합니다. 다른 워크로드를 저하시키지 않으면서 증가된 부담을 감당할 수 있을 만큼 클러스터를 충분히 프로비저닝해야 합니다.

인덱싱 진행 상태

인덱스 생성 프로세스는 컬렉션을 초기화하고, 스캔하고, 키를 정렬하고, 마지막으로 인덱스 빌더를 통해 키를 삽입하는 방식으로 진행됩니다. 프로세스를 포그라운드에서 실행할 경우 최대 6단계, 백그라운드에서 실행할 경우 최대 9단계로 구성됩니다. 단계별로 완료율, 스캔된 저장 블록의 총 수, 정렬된 키 및 삽입된 키와 같은 상태 메트릭을 볼 수 있습니다.

mongo 쉘의 db.currentOp() 명령을 사용하여 인덱싱 프로세스의 진행 상황을 모니터링할 수 있습니다. 마지막 단계를 100% 완료하면 모든 색인이 성공적으로 생성되었음을 알 수 있습니다.

db.currentOp({"command.createIndexes": { $exists : true } })

인덱스 빌드 유형

인덱스 빌드의 네 가지 유형은 다음과 같습니다.

  • 포그라운드 - 포그라운드 인덱스 빌드는 인덱스가 생성될 때까지 다른 모든 데이터베이스 작업을 차단합니다. Amazon DocumentDB 포그라운드 빌드는 5단계로 구성되어 있습니다.

  • 포그라운드 (고유) - 단일 문서 (고유) 포그라운드 인덱스 빌드는 일반 포그라운드 빌드와 같은 다른 데이터베이스 작업을 차단합니다. 기본 포그라운드 빌드와 달리 고유 빌드는 추가 단계 (정렬 키 2) 를 사용하여 중복 키를 찾습니다. 포그라운드 (고유) 빌드는 6단계로 구성되어 있습니다.

  • 백그라운드 - 백그라운드 인덱스 빌드를 사용하면 인덱스를 만드는 동안 다른 데이터베이스 작업을 포그라운드에서 실행할 수 있습니다. Amazon DocumentDB 백그라운드 빌드는 8단계로 구성되어 있습니다.

  • 백그라운드 (고유) - 단일 문서 (고유) 배경 인덱스 빌드를 사용하면 인덱스가 생성되는 동안 다른 데이터베이스 작업을 포그라운드에서 실행할 수 있습니다. 기본 백그라운드 빌드와 달리 고유 빌드는 추가 단계 (정렬 키 2) 를 사용하여 중복 키를 찾습니다. 백그라운드 (고유) 빌드는 9단계로 구성되어 있습니다.

인덱스 빌드 단계

단계 포그라운드 포그라운드 (고유) 배경 배경 (고유)

초기화 중

1

1

1

1

빌딩 인덱스: 초기화 중

2

2

2

2

빌딩 인덱스: 컬렉션 스캔

3

3

3

3

빌딩 인덱스: 정렬 키 1

4

4

4

4

빌딩 인덱스: 정렬 키 2

5

5

빌딩 인덱스: 키 삽입

5

6

5

6

검증: 인덱스 스캔

6

7

검증: 튜플 정렬

7

8

검증: 컬렉션 스캔

8

9

  • 초기화 중 - createIndex가 인덱스 빌더를 준비하고 있습니다. 이 단계는 매우 간단해야 합니다.

  • 인덱스 작성: 초기화 중 - 인덱스 빌더가 인덱스 생성을 준비 중입니다. 이 단계는 매우 간단해야 합니다.

  • 인덱스 작성: 컬렉션 스캔 - 인덱스 빌더가 인덱스 키를 수집하기 위해 컬렉션 스캔을 수행합니다. 측정 단위는 “블록”입니다.

    참고

    인덱스 빌드에 대해 둘 이상의 작업자가 구성된 경우 이 단계에 표시됩니다. 인덱스 빌드 프로세스 중에 여러 작업자를 사용하는 단계는 “스캐닝 컬렉션” 단계뿐입니다. 다른 모든 단계에는 작업자 한 명만 표시됩니다.

  • 인덱스 작성: 정렬 키 1 - 인덱스 빌더가 수집된 인덱스 키를 정렬합니다. 측정 단위는 “키”입니다.

  • 인덱스 작성: 정렬 키 2 - 인덱스 작성기가 죽은 튜플에 해당하는 수집된 인덱스 키를 정렬하고 있습니다. 이 단계는 고유한 인덱스 구축에만 존재합니다. 측정 단위는 “키”입니다.

  • 인덱스 작성: 키 삽입 - 인덱스 빌더가 새 인덱스에 인덱스 키를 삽입합니다. 측정 단위는 “키”입니다.

  • 유효성 검증: 인덱스 스캔 - createIndex는 인덱스를 스캔하여 검증이 필요한 키를 찾는 것입니다. 측정 단위는 “블록”입니다.

  • 유효성 검증: 튜플 정렬 - createIndex는 인덱스 스캔 단계의 출력을 정렬합니다.

  • 유효성 검증: 컬렉션 스캔 - createIndex는 컬렉션을 스캔하여 이전 두 단계에서 찾은 인덱스 키의 유효성을 검사합니다. 측정 단위는 “블록”입니다.

인덱스 빌드 출력 예제

아래 출력 예제 (포그라운드 인덱스 빌드) 에는 인덱스 생성 상태가 표시됩니다. “msg” 필드는 빌드의 단계와 완료율을 표시하여 빌드 진행 상황을 요약합니다. “작업자” 필드는 인덱스 빌드의 해당 단계에서 사용된 작업자 수를 나타냅니다. “progress” 필드에는 완료율을 계산하는 데 사용된 실제 수치가 표시됩니다.

참고

Amazon DocumentDB 버전 4.0에서는 “currentIndexBuild이름”, “메시지” 및 “진행 상황” 필드가 지원되지 않습니다.

{ "inprog" : [{ … "command": { "createIndexes": "test", "indexes": [{ "v": 2, "key": { "user_name": 1 }, "name": "user_name_1" }], "lsid": { "id": UUID(“094d0fba-8f41-4373-82c3-7c4c7b5ff13b”) }, "$db": "test" }, "currentIndexBuildName": user_name_1, "msg": "Index Build: building index number_1, stage 6/6 building index: 656860/1003520 (keys) 65%", "workers": 1, "progress": { "done": 656861, "total": 1003520 }, … ], "ok" : 1 }