AI 에이전트의 경우: 문서 인덱스는 https://www.mongodb.com/ko-kr/docs/llms.txt에서 사용할 수 있으며, 모든 페이지의 마크다운 버전은 어떤 URL 경로에 .md를 추가하여 사용할 수 있습니다.
Docs Menu

rewriteCollection (데이터베이스 명령)

rewriteCollection

동일한 샤드 키 사용하여 샤딩된 컬렉션 디스크에 다시 씁니다.

샤드를 추가 또는 제거할 때 데이터를 재배포하거나 디스크 공간을 확보하려면 이 명령을 사용합니다.

진행 중인 컬렉션 다시 쓰기를 중지하려면 abortRewriteCollection 명령을 사용합니다.

버전 8.3에 추가 되었습니다.

이 명령은 다음 환경에서 호스팅되는 배포에서 사용할 수 있습니다.

  • MongoDB Atlas: The fully managed service for MongoDB deployments in the cloud

참고

This command is supported in all MongoDB Atlas clusters. For information on Atlas support for all commands, see Unsupported Commands.

명령은 다음과 같은 구문을 가집니다:

db.adminCommand( {
rewriteCollection: "<database>.<collection>",
numInitialChunks: <int>,
zones: <zones>
} )

이 명령은 다음 필드를 사용합니다.

필드
유형
설명

rewriteCollection

문자열

필수입니다. 다시 쓸 데이터베이스 및 컬렉션 의 이름입니다.

numInitialChunks

integer

선택 사항. 컬렉션 을 리샤딩하는 데 사용할 초기 청크의 개수입니다. 기본값은 90입니다.

zones

배열

선택 사항. 샤드 키 의 구역을 지정하는 문서입니다.

컬렉션 다시 작성을 시작하기 전에 다음 요구 사항을 충족하는지 확인하세요.

  • 애플리케이션 은 영향을 받는 컬렉션 이 쓰기를 차단하는 2초의 기간을 허용할 수 있습니다. 쓰기가 차단되는 기간 동안 애플리케이션 의 지연 시간 이 증가합니다.

    워크로드가 이러한 요구 사항을 수용할 수 없는 경우에는 대신 샤드 키를 개선하는 것이 좋습니다.

  • 데이터베이스는 다음과 같은 리소스 요구 사항을 충족합니다.

    • 각 수신자 샤드 의 사용 가능한 저장 공간이 다시 쓰려는 컬렉션 의 저장 크기에 총 인덱스 크기를 더한 값을 샤드 수로 나눈 값의 두 배 이상이어야 합니다.

      ( ( collection_storage_size + index_size ) * 2 ) / shard_count = storage_req

      예시 를 들어, 저장 크기가 2 TB 데이터이고 인덱스 400 GB 인 컬렉션 생각해 보겠습니다. 4개의 샤드에 분산하려면 다음이 필요합니다.

      ( ( 2 TB collection + 0.4 TB index ) * 2 ) / 4 shards = 1.2 TB storage

      이 컬렉션 다시 작성하려면 각 샤드 1.2 이(가) 필요합니다. TB의 사용 가능한 저장.

      MongoDB Atlas 에서는 다시 쓰기 작업을 위해 다음 저장 계층 으로 업그레이드 해야 할 수 있습니다. 작업이 완료되면 다운그레이드할 수 있습니다.

    • I/O 용량 이 50% 미만인지 확인합니다.

    • CPU 로드가 80% 미만인지 확인합니다.

    중요

    이러한 요구 사항은 데이터베이스에 의해 적용되지 않습니다. 충분한 리소스를 할당하지 못하면 다음과 같은 결과가 발생할 수 있습니다.

    • 데이터베이스 공간이 부족하여 종료되는 경우

    • 성능 저하

    • 작업이 예상보다 오래 걸리는 경우

    애플리케이션 에 트래픽이 적은 기간이 있는 경우 가능하면 해당 기간 동안 컬렉션 에 대해 이 작업을 수행합니다.

  • 리샤딩하기 전에 새 샤드 키 에 인덱스 생성할 필요가 없습니다. 리샤딩 작업은 인덱스 단계에서 필요한 인덱스를 자동으로 빌드합니다.

  • 진행 중인 인덱스 빌드가 없습니다. 실행 인덱스 빌드를 확인하려면 $currentOp을 사용합니다.

    db.getSiblingDB("admin").aggregate( [
    { $currentOp : { idleConnections: true } },
    { $match: {
    $or: [
    { "op": "command", "command.createIndexes": { $exists: true } },
    { "op": "none", "msg": /^Index Build/ }
    ]
    }
    }
    ] )

    결과 문서에서 inprog 필드 값이 빈 배열이면 진행 중인 인덱스 빌드는 없습니다.

    {
    inprog: [],
    ok: 1,
    '$clusterTime': { ... },
    operationTime: <timestamp>
    }

참고

다시 쓰기 작업은 쓰기 집약적인 프로세스 로, oplog 비율을 높일 수 있습니다. 다음을 수행할 수 있습니다.

  • 고정된 oplog 크기를 설정하여 무한한 oplog 증가를 방지합니다.

  • 하나 이상의 세컨더리 노드가 오래된 상태가 될 가능성을 최소화하기 위해 oplog 크기를 늘립니다.

자세한 내용은 복제본 세트 Oplog 문서를 참조하세요.

  • If the collection uses Atlas Search, the search index becomes unavailable after the operation completes. To restore it, manually rebuild the search index.

  • Queryable Encryption 사용하는 컬렉션은 지원되지 않습니다.

rewriteCollection 명령에는 클러스터 또는 다시 작성하려는 데이터베이스 및 컬렉션에 대한 rewriteCollection 권한 조치 필요합니다.

이 권한 조치 다음 역할을 가진 사용자도 사용할 수 있습니다.

컬렉션 다시 작성하려면 다음 명령을 실행 .

db.adminCommand( {
rewriteCollection: "sales.orders"
} )