문서 메뉴

문서 홈애플리케이션 개발MongoDB 매뉴얼

복제본 세트에 대한 롤링 인덱스 빌드

이 페이지의 내용

  • 고려 사항
  • 전제 조건
  • 절차

인덱스 빌드는 복제본 세트 성능에 영향을 미칠 수 있습니다. 기본적으로 MongoDB는 모든 데이터 보유 복제본 세트 멤버에서 동시에 인덱스를 빌드합니다. 인덱스 빌드로 인한 성능 저하를 견딜 수 없는 워크로드의 경우, 다음 절차를 사용하여 롤링 방식으로 인덱스를 빌드하는 것이 좋습니다.

롤링 인덱스 빌드는 한 번에 하나의 복제본 세트 노드만 중단시키며, 보조 노드부터 시작하여 해당 노드에서 독립적으로 인덱스를 빌드합니다. 롤링 인덱스 빌드에는 하나 이상의 복제본 선정이 필요합니다.

다음 절차를 사용하여 고유 인덱스를 만들려면 이 절차 중에 컬렉션에 대한 모든 쓰기를 중지해야 합니다.

이 절차가 진행되는 동안 컬렉션의 모든 쓰기 작업을 중단할 수 없는 경우, 해당 페이지에 이 절차를 수행하지 않습니다. 대신 복제본 세트의 프라이머리에 db.collection.createIndex()를 발행하여 컬렉션에 고유한 인덱스를 빌드합니다.

너무 뒤쳐져 뒤쳐지지 않으면서 인덱싱 또는 재인덱싱 작업을 완료할 수 있을 만큼 Oplog가 충분히 커야 합니다. 자세한 내용은 Oplog 크기 조정 문서를 참조하세요.

고유 인덱스 구축용

다음 절차를 사용하여 고유 인덱스를 만들려면 인덱스 빌드 중에 컬렉션에 대한 모든 쓰기를 중지해야 합니다. 그렇지 않으면 복제본 세트 구성원 간에 데이터가 일관되지 않을 수 있습니다.

경고

컬렉션에 대한 모든 쓰기를 중지할 수 없는 경우 다음 절차를 사용하여 고유 인덱스를 생성하지 마십시오.

중요

순차적으로 인덱스를 빌드하는 다음 절차는 복제본 세트 배포서버에 적용되며 샤드 클러스터에는 적용되지 않습니다. 샤드 클러스터의 절차에 대해서는 샤드 클러스터의 롤링 인덱스 빌드를 참조하세요.

세컨더리와 관련된 mongod 프로세스를 중지합니다. 다음 구성을 업데이트한 후 다시 시작합니다.

[1](1, 2) 다른 포트에서 mongod 실행하면 인덱스를 구축하는 동안 복제본 세트의 다른 구성원과 모든 클라이언트가 해당 구성원과 접촉하지 않도록 합니다.

새 포트에서 독립 실행형으로 실행 중인 mongod 인스턴스에 직접 연결하고 이 인스턴스에 대한 새 인덱스를 만듭니다.

예를 들어 mongosh 를 인스턴스에 연결하고 createIndex() 를 사용하여 records 컬렉션의 username 필드에 오름차순 인덱스를 만듭니다.

db.records.createIndex( { username: 1 } )

인덱스 빌드가 완료되면 mongod 인스턴스를 종료합니다. 독립형으로 시작할 때 구성 변경을 취소하여 원래 구성으로 되돌리고 복제본 세트의 구성원으로 다시 시작합니다.

중요

반드시 disableLogicalSessionCacheRefresh 매개 변수를 제거합니다.

예를 들어 복제본 세트 구성원을 다시 시작하려면 다음을 수행합니다.

복제가 이 멤버를 따라잡을 수 있도록 허용합니다.

구성원이 세트의 다른 구성원을 따라잡으면 나머지 세컨더리 구성원에 대해 한 번에 한 구성원씩 절차를 반복합니다.

  1. A. 세컨더리 하나를 중지하고 독립형으로 다시 시작

  2. B. 색인 빌드

  3. C. 복제본 세트 구성원으로 프로그램 mongod 다시 시작

모든 세컨더리에 새 인덱스가 있으면 프라이머리를 강등하고 위에서 설명한 절차에 따라 독립형으로 다시 시작한 다음 이전 프라이머리에 인덱스를 빌드합니다.

  1. rs.stepDown() mongosh 의 메서드를 사용하여 프라이머리를 단계적으로 낮춥니다. 단계적 하향에 성공하면 현재 프라이머리가 세컨더리가 되고 복제본 세트 멤버는 새 프라이머리를 선택합니다.

  2. A. 세컨더리 하나를 중지하고 독립형으로 다시 시작

  3. B. 색인 빌드

  4. C. 복제본 세트 구성원으로 프로그램 mongod 다시 시작

← 채워진 컬렉션을 기반으로 하는 인덱스 빌드

이 페이지의 내용