문서 메뉴

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

유효성 검사

이 페이지의 내용

  • 정의
  • 구문
  • 명령 필드
  • 행동
  • 예제
  • 출력 유효성 검사
validate

validate 명령은 컬렉션의 데이터와 인덱스가 올바른지 확인하고 결과를 반환합니다.

mongosh 에서 이 명령은 validate() 헬퍼 메서드를 통해서도 실행할 수 있습니다.

헬퍼 메서드는 mongosh 사용자에게 편리하지만 데이터베이스 명령과 동일한 수준의 정보를 반환하지 않을 수 있습니다. 편의가 필요하지 않거나 추가 반환 필드가 필요한 경우 database 명령을 사용합니다.

버전 5.0에서 변경됨

버전 5 부터 시작됩니다.0, validate 명령은 컬렉션에서 불일치를 찾아 가능한 경우 수정할 수도 있습니다.

인덱스 불일치에는 다음이 포함됩니다.

  • 인덱스는 멀티키이지만 멀티키 필드는 없습니다.

  • 인덱스에는 멀티키가 아닌 필드를 포함하는 MultiKeyPath가 있습니다.

  • 인덱스에는 MultiKeyPath가 없지만 멀티키 문서가 있습니다. (3.4 이전에 빌드된 인덱스의 경우)

db.collection.validate() 명령으로 불일치가 감지되면 경고가 반환되고 인덱스의 복구 플래그가 true로 설정됩니다.

db.collection.validate()는 컬렉션의 스키마 유효성 검사 규칙을 위반하는 모든 문서의 유효성도 검사합니다.

참고

validate 명령은 뷰를 지원하지 않으며 뷰 에 대해 실행하면 오류가 발생합니다.

의 메서드는 db.collection.validate() mongosh validate주위에래퍼를 제공합니다.

버전 5.0에서 변경됨

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

db.runCommand(
{
validate: <string>, // Collection name
full: <boolean>, // Optional
repair: <boolean>, // Optional, added in MongoDB 5.0
metadata: <boolean> // Optional, added in MongoDB 5.0.4
}
)

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

필드
유형
설명
validate
문자열
유효성을 검사할 컬렉션의 이름입니다.
부울

선택 사항입니다. 명령이 더 느리지만 더 철저한 검사를 수행할지, 아니면 더 빠르지만 덜 철저한 검사를 수행할지를 정하는 플래그입니다.

  • true인 경우 다음 예외를 제외하고 보다 철저한 검사를 수행합니다.

    • WiredTiger의 oplog 에 대한 전체 유효성 검사는 보다 철저한 검사를 건너뜁니다. validate.warnings 에는 동작에 대한 알림이 포함되어 있습니다.

  • false인 경우 더 빠르지만 덜 철저한 검사를 위해 일부 검사를 생략합니다.

기본값은 false입니다.

MongoDB 3.6부터 WiredTiger 스토리지 엔진의 경우 full 유효성 검사 프로세스만 체크포인트를 강제 실행하고 디스크 내 데이터를 확인하기 전에 모든 인메모리 데이터를 디스크로 플러시합니다.

이전 버전에서는 WT 스토리지 엔진에 대한 데이터 유효성 검사 프로세스가 항상 체크포인트를 강제 실행합니다.

부울

선택 사항입니다. 명령이 복구를 수행할지 여부를 결정하는 플래그입니다.

  • true인 경우 복구가 수행됩니다.

  • false인 경우 복구가 수행되지 않습니다.

기본값은 false입니다.

복구는 독립형 노드에서만 실행할 수 있습니다.

수리를 통해 다음 문제가 해결됩니다.

  • 누락된 인덱스 항목이 발견되면 누락된 키가 인덱스에 삽입됩니다.

  • 추가 인덱스 항목이 발견되면 추가 키가 인덱스에서 제거됩니다.

  • 멀티 인덱스가 아닌 인덱스에 대한 멀티키 문서가 발견되면 인덱스는 멀티 인덱스로 변경됩니다.

  • 인덱스의 멀티키 경로에 지정되지 않은 멀티키 문서가 발견되면 인덱스의 멀티키 경로가 업데이트됩니다.

  • 잘못된 BSON 데이터가 포함된 손상된 문서가 발견되면 해당 문서가 제거됩니다.

다음도 참조하세요.

--repair 다음을 위한 옵션 mongod

버전 5.0에 추가.

부울

선택 사항입니다. 사용자가 모든 문서와 인덱스를 스캔하지 않고도 잘못된 인덱스 옵션을 감지하기 위해 빠른 유효성 검사를 수행할 수 있게 해주는 플래그입니다.

  • true면 메타데이터 유효성 검사가 수행됩니다.

  • false면 메타데이터 유효성 검사가 수행되지 않습니다.

기본값은 false입니다.

{ metadata: true } 과 함께 유효성 검사 명령을 실행하는 것은 다른 validate 옵션에서는 지원되지 않습니다.

metadata 유효성 검사 옵션:

  • 컬렉션 메타데이터만 스캔하여 잘못된 인덱스를 식별하는 더 빠른 방법을 제공합니다.

  • collMod 명령과 함께 사용할 때 여러 개의 유효하지 않은 인덱스를 삭제하고 다시 생성하는 대안을 제공합니다.

metadata 유효성 검사 옵션은 잘못된 인덱스를 더 빨리 찾기 위해 컬렉션 메타데이터만 스캔합니다.

유효하지 않은 인덱스가 감지되면 유효성 검사 명령은 collMod 명령을 사용하여 유효하지 않은 인덱스를 제거하라는 메시지를 표시합니다.

db.runCommand( { collMod: <collectionName> } )

버전 5.0.4에 새로 추가된 사항

validate 명령은 특히 대규모 데이터 세트에서 속도가 느려질 수 있습니다.

validate 명령은 컬렉션에 대한 배타 락 W 을 얻습니다. 이렇게 하면 작업이 완료될 때까지 컬렉션에 대한 모든 읽기 및 쓰기가 차단됩니다. 세컨더리에서 실행되는 validate 작업은 완료될 때까지 해당 세컨더리의 다른 모든 작업을 차단할 수 있습니다.

경고

유효성 검사가 성능에 미치는 영향이 validate 있으므로 세컨더리 복제본 세트 노드에서만 를 실행하는 것이 좋습니다. 를 사용하여 rs.stepDown() 현재 프라이머리 노드가 세컨더리가 되도록 지시하여 라이브 프라이머리 노드에 영향을 주지 않도록 할 수 있습니다.

$currentOpcurrentOp 명령에는 진행 중인 유효성 검증 작업에 대한 dataThroughputAveragedataThroughputLastSecond 정보가 포함됩니다.

유효성 검사 작업에 대한 로그 메시지에는 dataThroughputAveragedataThroughputLastSecond 정보가 포함됩니다.

MongoDB 드라이버는 인과적으로 일관적인 세션 과 관련된 작업에 afterClusterTime 을 자동으로 설정합니다. MongoDB 4 부터 시작.2, validate 명령은 더 이상 afterClusterTime 을 지원하지 않습니다. 따라서 validate인과적으로 일관적인 세션과 연결될 수 없습니다.

MongoDB 6.0부터 validate 명령은 고유 인덱스에 호환되지 않는 키 형식이 있는 경우 메시지를 반환합니다. 이 메시지는 이전 형식이 사용되었음을 나타냅니다.

  • 기본 유효성 검사 설정(특히 full: false)을 사용하여 myCollection 컬렉션의 유효성을 검사하려면 다음을 수행합니다.

    db.runCommand( { validate: "myCollection" } )
  • 컬렉션 myCollection 의 전체 유효성 검사를 수행하려면 full: true를 지정합니다.

    db.runCommand( { validate: "myCollection", full: true } )
  • myCollection 컬렉션을 복구하려면 repair : true를 지정합니다.

    db.runCommand( { validate: "myCollection", repair: true } )
  • myCollection 컬렉션의 메타데이터 유효성을 검사하려면 metadata: true를 지정합니다.

    db.runCommand( { validate: "myCollection", metadata: true } )

참고

출력은 MongoDB 인스턴스의 버전 및 특정 구성에 따라 달라질 수 있습니다.

더 자세한 출력을 위해 full: true 를 지정합니다.

validate.nInvalidDocuments

컬렉션 내의 유효하지 않은 문서 수입니다. 유효하지 않은 문서는 읽을 수 없는 문서로, BSON 문서가 손상되었거나 오류 또는 크기 불일치가 있음을 의미합니다.

validate.nNonCompliantDocuments

컬렉션의 스키마를 준수하지 않는 문서 수입니다. 정책을 준수하지 않는 문서는 nInvalidDocuments 에서 유효하지 않은 것으로 계산되지 않습니다.

validate.nrecords

컬렉션의 문서 수입니다.

validate.nIndexes

컬렉션에서 유효성이 검사된 인덱스 수입니다.

validate.keysPerIndex

컬렉션의 각 인덱스에 대한 이름과 인덱스 항목 수가 포함된 문서입니다.

"keysPerIndex" : {
"_id_" : <num>,
"<index2_name>" : <num>,
...
}

MongoDB 4 부터 시작.2 (및 4.0.10+ 및 3.6.13+), keysPerIndex 는 이름만으로 인덱스를 식별합니다. 이전 버전의 MongoDB는 인덱스의 전체 네임스페이스를 표시했습니다. 즉, <db>.<collection>.$<index_name>

validate.indexDetails

각 인덱스에 대한 인덱스 유효성 검사 상태가 포함된 문서입니다.

"indexDetails" : {
"_id_" : {
"valid" : <boolean>
},
"<index2_name>" : {
"valid" : <boolean>
},
...
}

MongoDB 4.2(및 4.0.10+ 및 3.6.13+)부터

  • indexDetails 유효하지 않은 특정 인덱스(또는 여러 인덱스)를 식별합니다. 이전 버전의 MongoDB에서는 인덱스 중 하나라도 유효하지 않은 경우 모든 인덱스를 유효하지 않은 것으로 표시합니다.

  • indexDetails 는 이름으로만 인덱스를 식별합니다. 이전 버전의 MongoDB는 인덱스의 전체 네임스페이스를 표시했습니다. 즉, <db>.<collection>.$<index_name> 입니다.

validate.ns

컬렉션의 전체 네임스페이스 이름입니다. 네임스페이스에는 database.collection 형식의 데이터베이스 이름과 컬렉션 이름이 포함됩니다.

validate.valid

validate 가 컬렉션의 모든 측면이 유효하다고 판단하는 경우 true 인 부울입니다. false 인 경우, 자세한 내용은 errors 필드를 참조하세요.

validate.repaired

validate 가 컬렉션을 복구한 경우 true 인 부울입니다.

validate.warnings

유효성 검사 작업 자체에 관한 경고 메시지가 포함된 배열입니다. 경고 메시지는 컬렉션 자체가 유효하지 않다는 것을 나타내지 않습니다. 예를 들면 다음과 같습니다.

"warnings" : [
"Could not complete validation of table:collection-28-6471619540207520785. This is a transient issue as the collection was actively in use by other operations."
],
validate.errors

컬렉션이 유효하지 않은 경우(즉, valid 이 거짓인 경우) 이 필드에는 유효성 검사 오류를 설명하는 메시지가 포함됩니다.

validate.extraIndexEntries

컬렉션에 존재하지 않는 문서를 가리키는 각 인덱스 항목에 관한 정보가 포함된 배열입니다.

"extraIndexEntries" : [
{
"indexName" : <string>,
"recordId" : <NumberLong>, // for the non-existent document
"indexKey" : {
"<key1>" : <value>,
...
}
}
...
]

참고

extraIndexEntries 배열의 경우, 모든 indexKey 필드 크기의 합계는 1MB로 제한되며, 이 크기에는 indexKey 의 키와 값이 모두 포함됩니다. 합계가 이 크기를 초과하면 경고 필드에 메시지가 표시됩니다.

MongoDB 4.2(및 4.0.10+ 및 3.6.13+)부터 사용 가능

validate.missingIndexEntries

해당 인덱스 항목이 누락된 각 문서에 관한 정보가 포함된 배열입니다.

"missingIndexEntries" : [
{
"indexName" : <string>,
"recordId" : <NumberLong>,
"idKey" : <_id key value>, // The _id value of the document. Only present if an ``_id`` index exists.
"indexKey" : { // The missing index entry
"<key1>" : <value>,
...
}
}
...
]

참고

missingIndexEntries 배열의 경우 idKey 필드 크기와 모든 indexKey 필드 크기의 합계는 1MB로 제한되며, 여기서 필드 크기에는 idKey 및 의 키와 값이 모두 포함됩니다. indexKey. 합계가 이 크기를 초과하면 경고 필드에 메시지가 표시됩니다.

MongoDB 4.2(및 4.0.10+ 및 3.6.13+)부터 사용 가능

validate.corruptRecords

데이터가 손상되었기 때문에 읽을 수 없는 문서에 대한 RecordId 값의 배열입니다. 이러한 문서는 유효성 검사 중에 손상된 것으로 보고됩니다. RecordId는 컬렉션의 문서를 고유하게 식별하는 64비트 정수 내부 키입니다.

"corruptRecords" : [
NumberLong(1), // RecordId 1
NumberLong(2) // RecordId 2
]

버전 5.0에 추가.

validate.ok

명령이 성공하면 1 값을 갖는 정수입니다. 명령이 실패하면 ok 필드의 값은 0 입니다.

← 상단