validar
Definição
Alterado na versão 6.2.
validate
O comando
validate
verifica a exatidão dos dados e índices de uma collection e gera os resultados. Se você não executar o comando em segundo plano, o comando também corrige quaisquer inconsistências na contagem e no tamanho dos dados de uma collection.Dica
Em
mongosh
, esse comando também pode ser executado por meio do método assistentevalidate()
.Os métodos auxiliares são práticos para os usuários
mongosh
, mas podem não retornar o mesmo nível de informações que os comandos do banco de dados. Nos casos em que a praticidade não for necessária ou os campos de retorno adicionais forem necessários, use o comando de banco de dados.Alterado na versão 5.0.
A partir da versão 5.0, o comando
validate
também pode encontrar inconsistências na coleção e corrigi-las, se possível.As inconsistências de índice incluem:
Um índice é multikey, mas não há campos multikey.
Um índice tem multikeyPaths cobrindo campos que não são multikey.
Um índice não tem multikeyPaths, mas existem documentos multikey (para índices construídos antes da versão 3.4).
Se quaisquer inconsistências forem detectadas pelo comando
db.collection.validate()
, um aviso será retornado e o sinalizador de reparo no índice será configurado paratrue
.db.collection.validate()
também valida quaisquer documentos que violem as regras de validação do esquemada coleção.Observação
O comando
validate
não oferece suporte a visualizações e gera um erro quando executado em uma visualização.O método
db.collection.validate()
emmongosh
fornece um encapsulador em torno devalidate
.
Compatibilidade
Esse comando está disponível em implantações hospedadas nos seguintes ambientes:
MongoDB Atlas: o serviço totalmente gerenciado para implantações do MongoDB na nuvem
Importante
Esse comando não é aceito em clusters M0, M2 e M5 ou em instâncias sem servidor. Para obter mais informações, consulte Comandos não suportados.
MongoDB Enterprise: a versão autogerenciada e baseada em assinatura do MongoDB
MongoDB Community: uma versão com código disponível, de uso gratuito e autogerenciada do MongoDB
Sintaxe
O comando tem a seguinte sintaxe:
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 } )
Campos de comando
O comando utiliza os seguintes campos:
Campo | Tipo | Descrição | |
---|---|---|---|
validate | string | O nome da coleção para validar. | |
booleano | Opcional. Um sinalizador que determina se o comando executa uma verificação mais lenta, porém mais completa, ou uma verificação mais rápida, porém menos completa.
O padrão é Para o mecanismo de armazenamento WiredTiger, somente o processo de validação | ||
booleano | Opcional. Um sinalizador que determina se o comando executa um reparo.
O padrão é Só é possível executar um reparo em um nó standalone. O reparo corrige estes problemas:
Para obter mais informações, consulte a opção Novidades na versão 5.0. | ||
booleano | Opcional. Um sinalizador que permite que os usuários realizem uma validação rápida para detectar opções de índice inválidas sem digitalizar todos os documentos e índices.
O padrão é A execução do comando validate com A opção de validação do
A opção de validação Se for detectado um índice inválido, o comando validate solicitará que você use o comando
Novidades na versão 5.0.4. | ||
booleano | Opcional. Se
Novidades na versão 6.2. | ||
background | booleano | Opcional. Se O padrão é |
Comportamento
Desempenho
O comando validate
pode ser lento, particularmente em conjuntos de dados maiores.
O comando validate
obtém um bloqueio exclusivo W
na coleção. Isso bloqueará todas as leituras e gravações na coleção até que a operação seja concluída. Quando executada em um secundário, a operação validate
pode bloquear todas as outras operações nesse secundário até que ela seja concluída.
Aviso
Devido ao impacto da validação no desempenho, considere a execução de validate
somente nos nós do conjunto de réplicas secundário. Você pode usar rs.stepDown()
para instruir o nó primário atual a se tornar um secundário para evitar o impacto em um nó primário ativo.
Métricas de taxa de transferência de dados
Os comandos $currentOp
e currentOp
incluem informações dataThroughputAverage
e dataThroughputLastSecond
para validar operações em andamento.
As mensagens de registro para validar operações incluem informações dataThroughputAverage
e dataThroughputLastSecond
.
Melhorias na validação de collections
A partir do MongoDB 6.2, o comando validate
e o método db.collection.validate()
:
Verifique as collections para garantir que os documentos BSON estejam em conformidade com as especificações BSON.
Marque coleções de séries temporais para inconsistências de dados internos.
Tenha uma nova opção
checkBSONConformance
que habilita verificações BSON abrangentes.
Restrições
O comando validate
não mais compatível com afterClusterTime. Então, validate
não pode ser associada a sessões causalmente consistentes.
Formato da chave do índice
Iniciando no MongoDB 6.0, o comando validate
retorna uma mensagem se um índice único tiver um formato de chave incompatível. A mensagem indica que um formato antigo está sendo usado.
Estatísticas de contagem e tamanho dos dados
O comando validate
atualiza as estatísticas de contagem e tamanho de dados da collection na collStats
saída com seus valores corretos.
Observação
No caso de um desligamento impróprio, as estatísticas de contagem e tamanho dos dados podem ser imprecisas.
Exemplos
Para validar uma coleção
myCollection
usando a configuração de validação padrão (especificamente, full: false):db.runCommand( { validate: "myCollection" } ) Para executar uma validação completa da coleção
myCollection
, especifique full: true:db.runCommand( { validate: "myCollection", full: true } ) Para reparar a coleção
myCollection
, especifique repair: true:db.runCommand( { validate: "myCollection", repair: true } ) Para validar os metadados na coleção
myCollection
, especifique metadados: true:db.runCommand( { validate: "myCollection", metadata: true } ) Para executar verificações adicionais de conformidade com BSON em
myCollection
, especifique checkBSONConformance: true:db.runCommand( { validate: "myCollection", checkBSONConformance: true } )
Validar saída
Observação
O resultado pode variar dependendo da versão e configuração específica da sua instância MongoDB.
Especifique completo: true para obter resultados mais detalhados.
validate.nInvalidDocuments
O número de documentos inválidos na coleção. Documentos inválidos são aqueles que não podem ser lidos, o que significa que o documento BSON está corrompido e tem um erro ou uma incompatibilidade de tamanho.
validate.nNonCompliantDocuments
O número de documentos que não estão em conformidade com o esquema da coleção. Os documentos fora de conformidade não são considerados inválidos em
nInvalidDocuments
.Iniciando no MongoDB 6.2, o
nNonCompliantDocuments
também inclui o número de documentos que não estão em conformidade com os requisitos de BSON ou coleta de séries temporais.
validate.nrecords
O número de documentos na coleção.
validate.keysPerIndex
Um documento que contém o nome e a contagem de entrada do índice para cada índice na coleção.
"keysPerIndex" : { "_id_" : <num>, "<index2_name>" : <num>, ... } keysPerIndex
identifica o índice somente por seu nome.
validate.indexDetails
Um documento que contém o status da validação do índice para cada índice.
"indexDetails" : { "_id_" : { "valid" : <boolean> }, "<index2_name>" : { "valid" : <boolean> }, ... } indexDetails
identifica o índice específico (ou índices) que é inválido. Versões anteriores do MongoDB marcariam todos os índices como inválidos, se algum dos índices fosse inválido.indexDetails
identifica o índice somente por seu nome. Versões anteriores do MongoDB exibiram o namespace completo do índice; isto é,<db>.<collection>.$<index_name>
.
validate.ns
O namespace completo da coleção. Os namespaces incluem o nome do banco de dados e o nome da coleção no formulário
database.collection
.
validate.valid
Um booleano que é
true
sevalidate
determinar que todos os aspectos da coleção são válidos. Quandofalse
, consulte o campoerrors
para mais informações.
validate.repaired
Um booleano que é
true
sevalidate
reparou a coleção.
validate.warnings
Uma array que contém mensagens de aviso, se houver, relacionadas à própria operação de validação. As mensagens de aviso não indicam que a coleção é inválida. Por exemplo:
"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
Se a coleção não for válida (isto é,
valid
é falso), este campo conterá uma mensagem descrevendo o erro de validação.
validate.extraIndexEntries
Uma array que contém informações para cada entrada de índice que aponta para um documento que não existe na coleção.
"extraIndexEntries" : [ { "indexName" : <string>, "recordId" : <NumberLong>, // for the non-existent document "indexKey" : { "<key1>" : <value>, ... } } ... ] Observação
Para a array
extraIndexEntries
, a soma de todos os tamanhos de campoindexKey
tem um limite de 1MB, em que os tamanhos incluem as chaves e os valores paraindexKey
. Se a soma exceder esse tamanho, o campo de aviso exibirá uma mensagem.
validate.missingIndexEntries
Uma array que contém informações para cada documento que está faltando a entrada de índice correspondente.
"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>, ... } } ... ] Observação
Para a array
missingIndexEntries
, a soma do tamanho do campoidKey
e de todos os seus tamanhos de campoindexKey
tem um limite de 1 MB, em que os tamanhos de campo incluem as chaves e valores paraidKey
eindexKey
. Se a soma exceder esse tamanho, o campo de aviso exibirá uma mensagem.
validate.corruptRecords
Uma array de
RecordId
valores para documentos ilegíveis, possivelmente porque os dados estão danificados. Esses documentos são relatados como corrompidos durante a validação. UmRecordId
é uma chave interna do número inteiro de 64 bits que identifica exclusivamente um documento em uma coleção."corruptRecords" : [ NumberLong(1), // RecordId 1 NumberLong(2) // RecordId 2 ] Novidades na versão 5.0.
validate.ok
Um número inteiro com o valor
1
quando o comando for bem-sucedido. Se o comando falhar, o campook
terá um valor de0
.