유효성 검사
정의
버전 6.2의 변경된 기능
validate
validate
명령은 컬렉션의 데이터와 인덱스가 올바른지 확인하고 결과를 반환합니다. 배경 에서 명령을 실행 하지 않으면 이 명령은 컬렉션 의 개수 및 데이터 크기의 불일치도 복구합니다.팁
mongosh
에서 이 명령은validate()
헬퍼 메서드를 통해서도 실행 수 있습니다.헬퍼 메서드는
mongosh
사용자에게 편리하지만 데이터베이스 명령과 동일한 수준의 정보를 반환하지 못할 수 있습니다. 편의가 필요하지 않거나 추가 리턴 필드가 필요한 경우 데이터베이스 명령을 사용합니다.버전 5.0에서 변경됨
버전 5.0부터
validate
명령은 컬렉션에서 불일치를 찾아서 가능한 경우 수정할 수도 있습니다.인덱스 불일치에는 다음이 포함됩니다.
인덱스는 멀티키이지만 멀티키 필드는 없습니다.
인덱스에는 멀티키가 아닌 필드를 포함하는 MultiKeyPath가 있습니다.
인덱스에는 MultiKeyPath가 없지만 멀티키 문서가 있습니다. (3.4 이전에 빌드된 인덱스의 경우)
db.collection.validate()
명령으로 불일치가 감지되면 경고가 반환되고 인덱스의 복구 플래그가true
로 설정됩니다.db.collection.validate()
는 컬렉션의 스키마 유효성 검사 규칙을 위반하는 모든 문서의 유효성도 검사합니다.mongosh
의db.collection.validate()
메서드는validate
주위에 래퍼(wrapper)를 제공합니다.
호환성
이 명령은 다음 환경에서 호스팅되는 배포에서 사용할 수 있습니다.
MongoDB Atlas: 클라우드에서의 MongoDB 배포를 위한 완전 관리형 서비스
중요
이 명령은 M0, M2 및 M5 클러스터 또는 서버리스 인스턴스에서 지원되지 않습니다. 자세한 내용은 지원되지 않는 명령을 참조하세요.
MongoDB Enterprise: MongoDB의 구독 기반 자체 관리 버전
MongoDB Community: MongoDB의 소스 사용 가능 무료 자체 관리 버전
구문
명령은 다음과 같은 구문을 가집니다:
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 checkBSONConformance: <boolean> // Optional, added in MongoDB 6.2 background: <boolean> // Optional } )
명령 필드
이 명령은 다음 필드를 사용합니다.
필드 | 유형 | 설명 | |
---|---|---|---|
validate | 문자열 | 유효성을 검사할 컬렉션의 이름입니다. | |
부울 | 선택 사항입니다. 명령이 더 느리지만 더 철저한 검사를 수행할지, 아니면 더 빠르지만 덜 철저한 검사를 수행할지를 정하는 플래그입니다.
기본값은 WiredTiger 스토리지 엔진 의 경우 | ||
부울 | 선택 사항입니다. 명령이 복구를 수행할지 여부를 결정하는 플래그입니다.
기본값은 복구는 독립형 노드에서만 실행할 수 있습니다. 수리를 통해 다음 문제가 해결됩니다.
자세한 내용은 의 옵션을 버전 5.0에 추가. | ||
부울 | 선택 사항입니다. 사용자가 모든 문서와 인덱스를 스캔하지 않고도 잘못된 인덱스 옵션을 감지하기 위해 빠른 유효성 검사를 수행할 수 있게 해주는 플래그입니다.
기본값은
유효하지 않은 인덱스가 감지되면 유효성 검사 명령은
버전 5.0.4에 새로 추가된 사항 | ||
부울 | 선택 사항입니다.
버전 6.2에 추가되었습니다. | ||
background | 부울 | 선택 사항. 기본값은 |
행동
성능
validate
명령은 특히 큰 데이터 세트에서 속도가 느려질 수 있습니다.
validate
명령은 컬렉션에 대한 배타적 잠금 W
를 가져옵니다. 이렇게 하면 작업이 완료될 때까지 컬렉션에 대한 모든 읽기 및 쓰기가 차단됩니다. 세컨더리에서 실행되는 validate
작업은 완료될 때까지 해당 세컨더리의 다른 모든 작업을 차단할 수 있습니다.
경고
유효성 검사가 성능에 미치는 영향이 있으므로 세컨더리 복제본 세트 노드에서만 validate
를 실행하는 것이 좋습니다. rs.stepDown()
을 사용하여 현재 프라이머리 노드가 세컨더리 노드가 되도록 지시함으로써 라이브 프라이머리 노드에 영향을 주지 않도록 할 수 있습니다.
데이터 처리량 지표
$currentOp
및 currentOp
명령에는 진행 중인 유효성 검증 작업에 대한 dataThroughputAverage
및 dataThroughputLastSecond
정보가 포함됩니다.
유효성 검사 작업에 대한 로그 메시지에는 dataThroughputAverage
및 dataThroughputLastSecond
정보가 포함됩니다.
컬렉션 유효성 검사 개선 사항
MongoDB 6.2 부터는 validate
명령과 db.collection.validate()
메서드가 사용됩니다.
컬렉션을 확인하여 BSON 문서가 BSON 사양을 준수하는지 확인하십시오.
time series 컬렉션에 내부 데이터 불일치가 있는지 확인합니다.
포괄적인 BSON 검사를 가능하게 하는 새 옵션
checkBSONConformance
이(가) 있습니다.
제한 사항
validate
명령은 더 이상 afterClusterTime을 지원하지 않습니다. 따라서 validate
인과적으로 일관된 세션과 연결될 수 없습니다.
인덱스 키 형식
MongoDB 6.0부터 validate
명령은 고유 인덱스에 호환되지 않는 키 형식이 있는 경우 메시지를 반환합니다. 이 메시지는 이전 형식이 사용되었음을 나타냅니다.
개수 및 데이터 크기 통계
validate
명령은 collStats
출력 에서 컬렉션의 개수 및 데이터 크기 통계를 올바른 값으로 업데이트합니다.
참고
비정상적으로 종료 되는 경우 개수 및 데이터 크기 통계가 부정확할 수 있습니다.
예시
기본 유효성 검사 설정(특히 전체: 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 } ) myCollection
에서 추가 BSON 적합성 검사를 수행하려면 checkBSONConformance: true를 지정합니다.db.runCommand( { validate: "myCollection", checkBSONConformance: true } )
출력 유효성 검사
참고
출력은 MongoDB 인스턴스의 버전 및 특정 구성에 따라 달라질 수 있습니다.
더 자세한 출력을 위해서는 full: true를 지정합니다.
validate.nInvalidDocuments
컬렉션 내의 유효하지 않은 문서 수입니다. 유효하지 않은 문서는 읽을 수 없는 문서로, BSON 문서가 손상되었거나 오류 또는 크기 불일치가 있음을 의미합니다.
validate.nNonCompliantDocuments
컬렉션의 스키마를 준수하지 않는 문서 수입니다. 스키마를 준수하지 않는 문서는
nInvalidDocuments
에서 무효로 계산되지 않습니다.MongoDB 6.2부터
nNonCompliantDocuments
에는 BSON 또는 시계열 컬렉션 요구 사항을 준수하지 않는 문서의 수도 포함됩니다.
validate.nrecords
컬렉션의 문서 수입니다.
validate.keysPerIndex
컬렉션의 각 인덱스에 대한 이름과 인덱스 항목 수가 포함된 문서입니다.
"keysPerIndex" : { "_id_" : <num>, "<index2_name>" : <num>, ... } keysPerIndex
는 이름만으로 인덱스를 식별합니다.
validate.indexDetails
각 인덱스에 대한 인덱스 유효성 검사 상태가 포함된 문서입니다.
"indexDetails" : { "_id_" : { "valid" : <boolean> }, "<index2_name>" : { "valid" : <boolean> }, ... } indexDetails
유효하지 않은 특정 인덱스(또는 여러 인덱스)를 식별합니다. 이전 버전의 MongoDB에서는 인덱스 중 하나라도 유효하지 않은 경우 모든 인덱스를 유효하지 않은 것으로 표시합니다.indexDetails
는 이름만으로 인덱스를 식별합니다. 이전 버전의 MongoDB에서는 인덱스의 전체 네임스페이스를 표시했습니다. (예:<db>.<collection>.$<index_name>
)
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
가 'false'인 경우) 이 필드에는 유효성 검사 오류를 설명하는 메시지가 포함됩니다.
validate.extraIndexEntries
컬렉션에 존재하지 않는 문서를 가리키는 각 인덱스 항목에 관한 정보가 포함된 배열입니다.
"extraIndexEntries" : [ { "indexName" : <string>, "recordId" : <NumberLong>, // for the non-existent document "indexKey" : { "<key1>" : <value>, ... } } ... ] 참고
extraIndexEntries
배열의 경우 모든indexKey
필드 크기의 합계는 1 MB로 제한되며 이 크기에는indexKey
의 키와 값이 모두 포함됩니다. 합계가 이 크기를 초과하면 경고 필드에 메시지가 표시됩니다.
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
필드 크기의 합은 1 MB로 제한되며 이 필드 크기에는idKey
및indexKey
의 키와 값이 모두 포함됩니다. 합계가 이 크기를 초과하면 경고 필드에 메시지가 표시됩니다.
validate.corruptRecords
데이터가 손상되었기 때문에 읽을 수 없는 문서에 대한
RecordId
값의 배열입니다. 이러한 문서는 유효성 검사 중에 손상된 것으로 보고됩니다.RecordId
는 컬렉션의 문서를 고유하게 식별하는 64비트 정수 내부 키입니다."corruptRecords" : [ NumberLong(1), // RecordId 1 NumberLong(2) // RecordId 2 ] 버전 5.0에 추가.
validate.ok
명령 성공 시 값이
1
인 정수입니다. 명령이 실패하면ok
필드의 값은0
입니다.