Saída do analisador de banco de dados
O analisador de banco de dados capta informações de dados sobre operações de leitura e gravação, operações do cursor e comandos do banco de dados. Para configurar o perfil do banco de dados e definir os limites para a captação de dados de perfil, consulte a seção Profiler de banco de dados.
O analisador de banco de dados grava dados na coleção system.profile
, que é uma coleção com limite. Para visualizar o resultado do perfil, use queries MongoDB normais na coleção system.profile
.
Observação
Como o perfil do banco de dados grava dados na coleção system.profile
em um banco de dados, o perfil cria perfis de alguma atividade de gravação, mesmo para bancos de dados que são somente leitura.
currentOp
e o analisador de banco de dados relatam as mesmas informações de diagnóstico básicas para operações CRUD, incluindo o seguinte:
getMore
(OP_GET_MORE ecommand
)
Essas operações também são incluídas no logging de queries lentas. Consulte slowOpThresholdMs
para obter mais informações sobre registro de queries lentas.
Ao usar a Queryable Encryption, as operações CRUD em coleções criptografadas são omitidas da coleção system.profile
. Para obter detalhes, consulte Redação.
Não é mais possível executar qualquer operação, inclusive leituras, na coleção system.profile
em uma transação.
Aviso
Não tente criar uma coleção de séries temporais ou visualizar com o nome system.profile
. MongoDB 6.3 e versões posteriores retornam um erro IllegalOperation
se você tentar fazê-lo. Versões anteriores do MongoDB falham.
Campos de Saída
Para qualquer operação individual, os documentos criados pelo analisador de banco de dados incluem um subconjunto dos seguintes campos. A seleção precisa de campos nesses documentos depende do tipo de operação.
Observação
Para a saída específica para a versão do seu MongoDB, consulte a versão apropriada do Manual MongoDB.
system.profile.op
O tipo de operação. Os valores possíveis são:
command
count
distinct
geoNear
getMore
group
insert
mapReduce
query
remove
update
system.profile.ns
O namespace que a operação visa. Os namespaces no MongoDB assumem a forma do database, seguido por um ponto (
.
), seguido pelo nome da coleção.
system.profile.command
Um documento contendo o objeto de comando completo associado a esta operação.
Por exemplo, a seguinte saída contém o objeto de comando para uma operação
find
em uma collection denominadaitems
em um banco de dados denominadotest
:"command" : { "find" : "items", "filter" : { "sku" : 1403978 }, ... "$db" : "test" } O seguinte exemplo de saída contém o objeto de comando para uma operação
getMore
gerada por um comando com ID de cursor19234103609
em uma collection denominadaitems
em um banco de dados denominadotest
:"command" : { "getMore" : NumberLong("19234103609"), "collection" : "items", "batchSize" : 10, ... "$db" : "test" }, Se o documento de comando exceder 50 kilobytes, o documento terá o seguinte formulário:
"command" : { "$truncated": <string>, "comment": <string> } O campo
$truncated
contém um resumo de strings do documento, excluindo o campocomment
do documento, se presente. Se, mesmo assim, o resumo exceder 50 kilobytes, ele será ainda mais truncado, indicado por uma reticência (...) no final da string.O campo
comment
está presente se algum comentário foi passado para a operação. Um comentário pode ser anexado a qualquer comando de banco de dados.
system.profile.originatingCommand
Para operações do
"getmore"
que recuperam o próximo lote de resultados de um cursor, o campooriginatingCommand
contém o objeto de comando completo (por exemplo,find
ouaggregate
) que originalmente criou esse cursor.
system.profile.keysExamined
O número de chaves de índice que o MongoDB verificou para realizar a operação.
Em geral, se
keysExamined
for muito maior do quenreturned
, o banco de dados está verificando muitas chaves de índice para localizar os documentos de resultado. Considere criar ou ajustar índices para melhorar o desempenho da query.keysExamined
está disponível para os seguintes comandos e operações:
system.profile.docsExamined
O número de documentos na coleção que o MongoDB digitalizou para realizar a operação.
docsExamined
está disponível para os seguintes comandos e operações:
system.profile.hasSortStage
hasSortStage
é um booleano que étrue
quando uma query não pode utilizar o pedido no índice para retornar os resultados ordenados solicitados; isto é, O MongoDB deve classificar os documentos depois de recebê-los de um cursor. O campo só aparece quando o valor étrue
.hasSortStage
está disponível para os seguintes comandos e operações:getMore
(OP_GET_MORE ecommand
)
system.profile.usedDisk
Um booleano que indica se algum estágio de agregação gravou dados em arquivos temporários devido a restrições de memória.
Aparece apenas se
usedDisk
for verdadeiro.
system.profile.nMatched
O número de documentos que correspondem à condição de querypara a operação de atualização.
system.profile.upsert
Um booleano que indica o valor da opção
upsert
da operação de atualização. Aparece apenas seupsert
for verdadeiro.
system.profile.fromMultiPlanner
Um booleano que indica se o planejador de queryavaliou vários planos antes de escolher o plano de execução vencedor para a query.
Somente presente quando o valor é
true
.
system.profile.replanned
Um booleano que indica se o query removeu um plano armazenado em cache e reavaliou todos os planos candidatos.
Somente presente quando o valor é
true
.
system.profile.replanReason
Uma string que indica o motivo específico pelo qual um plano em cache foi removido.
Somente presente quando o valor de
replanned
fortrue
.
system.profile.keysInserted
O número de chaves de índice inseridas para uma operação de gravação fornecida.
system.profile.writeConflicts
O número de conflitos encontrados durante a operação de gravação; por exemplo, uma operação de
update
tenta modificar o mesmo documento que outra operaçãoupdate
. Consulte também conflito de escrita.
system.profile.numYield
O número de vezes que a operação cedeu para permitir a conclusão de outras operações. Normalmente, as operações rendem quando precisam de acesso a dados que o MongoDB ainda não leu totalmente na memória. Isso permite que outras operações que tenham dados na memória sejam concluídas enquanto o MongoDB lê os dados da operação de produção. Para obter mais informações, consulte as perguntas frequentes sobre quando as operações resultam.
system.profile.queryHash
A partir do MongoDB 8.0, o campo
queryHash
pré-existente é renomeado paraplanCacheShapeHash
. Se você estiver usando uma versão anterior do MongoDB , veráqueryHash
em vez deplanCacheShapeHash
.
system.profile.queryShapeHash
Novidades na versão 8.0.
queryShapeHash
é uma string hexadecimal com o hash de uma forma de query. Para obter detalhes, consulte Formas de query.
system.profile.planCacheShapeHash
Uma string hexadecimal que representa um hash da forma da query em cache do plano e depende apenas da forma da query em cache do plano.
planCacheShapeHash
pode ajudar a identificar queries lentas, inclusive o filtro de query de operações de gravação, com a mesmo forma de query em cache do plano.Observação
Como acontece com qualquer função de hash, duas formas de query de cache de plano diferentes podem resultar no mesmo valor de hash. No entanto, a ocorrência de colisões de hash entre diferentes formas de query de cache de plano é improvável.
Para obter mais informações sobre
planCacheShapeHash
eplanCacheKey
, consulte planCacheShapeHash e planCacheKey.A partir do MongoDB 8.0, o campo
queryHash
pré-existente é renomeado paraplanCacheShapeHash
. Se você estiver usando uma versão anterior do MongoDB , veráqueryHash
em vez deplanCacheShapeHash
.
system.profile.planCacheKey
Um hash da chave para a entrada de cache do plano associada à query.
Ao contrário de
planCacheShapeHash
,planCacheKey
é uma função da forma de query em cache do plano e dos índices atualmente disponíveis para essa forma. Especificamente, se os índices compatíveis com a forma de query forem adicionados ou descartados, o valorplanCacheKey
poderá mudar, masplanCacheShapeHash
não mudará.Para obter mais informações sobre
planCacheShapeHash
eplanCacheKey
, consulte planCacheShapeHash e planCacheKey.A partir do MongoDB 8.0, o campo
queryHash
pré-existente é renomeado paraplanCacheShapeHash
. Se você estiver usando uma versão anterior do MongoDB , veráqueryHash
em vez deplanCacheShapeHash
.
system.profile.queryFramework
A estrutura de query utilizada para processar uma operação.
system.profile.locks
O
system.profile.locks
fornece informações para vários tipos de bloqueio e modos de bloqueio mantidos durante a operação.Os possíveis tipos de trava são:
Bloquear tipoDescriçãoParallelBatchWriterMode
Representa um bloqueio para o modo de escrita em lote paralelo.
Em versões anteriores, as informações do PBWM foram relatadas como parte das informações de bloqueio do
Global
.ReplicationStateTransition
Representa o bloqueio obtido para transições de estado membro do conjunto de réplicas.
Global
Representa bloqueio global.
Database
Representa bloqueio de banco de dados.
Collection
Representa bloqueio de coleção.
Mutex
Representa mutex.
Metadata
Representa bloqueio de metadados.
DDLDatabase
Representa um reconhecimento de data center DDL .
Novidade na versão 7.1.
DDLCollection
Representa um bloqueio de collection DDL .
Novidade na versão 7.1.
oplog
Representa bloqueio no oplog.
Os possíveis modos de bloqueio para os tipos de bloqueio são os seguintes:
Modo de bloqueioDescriçãoR
Representa bloqueio compartilhado (S).
W
Representa bloqueio exclusivo (X).
r
Representa bloqueio de Intent Shared (IS).
w
Representa bloqueio Intent Exclusive (IX).
As informações de bloqueio devolvidas para os vários tipos de bloqueio incluem:
system.profile.locks.acquireCount
Número de vezes que a operação adquiriu a trava no modo especificado.
system.profile.locks.acquireWaitCount
Número de vezes que a operação teve que esperar pelas aquisições de bloqueio
acquireCount
porque os bloqueios foram mantidos em modo conflitante.acquireWaitCount
é menor ou igual aacquireCount
.
system.profile.locks.timeAcquiringMicros
Tempo cumulativo em microssegundos que a operação teve que esperar para adquirir as travas.
timeAcquiringMicros
dividido poracquireWaitCount
fornece um tempo médio aproximado de espera para o modo de bloqueio específico.
system.profile.locks.deadlockCount
O número de vezes que a operação encontrou impasses enquanto aguardava aquisições de trava.
Para obter mais informações sobre lock modes, consulte Que tipo de locking o MongoDB usa?.
system.profile.authorization
Novidades na versão 5.0.0.
O número de vezes que o cache do usuário é acessado para cada operação. Essas métricas só são exibidas quando uma operação acessa o cache do usuário pelo menos uma vez.
Essas métricas só estão disponíveis quando o log de operação lenta ou a criação de perfil de banco de dados está habilitada.
system.profile.authorization
não está incluído na saídadb.currentOp()
.system.profile.authorization.startedUserCacheAcquisitionAttempts
O número de vezes que a operação tentou acessar o cache do usuário.
system.profile.storage
As informações do
system.profile.storage
fornecem métricas nos dados do mecanismo de armazenamento e tempo de espera para a operação.Métricas de armazenamento específicas são retornadas somente se os valores forem maiores que zero.
system.profile.storage.data.bytesRead
Número de bytes lidos pela operação do disco para o cache.
A leitura de dados do disco no cache inclui tudo o que é necessário para executar a query. Se os dados já estiverem no cache, o número de bytes lidos do disco poderá ser
0
.O número de bytes lidos do disco inclui mais do que os documentos consultados:
O WiredTiger lê em unidades de páginas e uma página pode conter um ou vários documentos. Se um documento estiver em uma página, todos os documentos nessa página serão lidos no cache e incluídos no valor
bytesRead
.Se o cache exigir gerenciamento de página (como remoção ou releituras), o valor
bytesRead
incluirá dados lidos do disco nessas operações.Se o índice não estiver no cache ou se o índice no cache estiver obsoleto, o WiredTiger lerá várias páginas internas e de folha do disco para reconstruir o índice no cache.
system.profile.storage.data.timeReadingMicros
Tempo em microssegundos que a operação tinha que gastar para ler a partir do disco.
system.profile.storage.data.bytesWritten
Número de bytes gravados pela operação do cache para o disco.
O WiredTiger normalmente não exige que a queryseja gravada no disco. Os dados modificados pela query são gravados em um cache na memória que o WiredTiger libera para o disco como parte de uma operação de remoção ou checkpoint. Nesses casos,
bytesWritten
mostra como 0.Se o thread que executa a query exigir gerenciamento de página forçado (como remoção), o WiredTiger gravará o conteúdo da página no disco. Essa liberação provavelmente inclui dados não relacionados às alterações feitas pela própria
bytesWritten
, o que pode fazer com que mostre um valor mais alto do que o esperado.
system.profile.storage.data.timeWritingMicros
Tempo em microssegundos que a operação teve que gastar para escrever no disco.
system.profile.storage.timeWaitingMicros.cache
Tempo em microssegundos que a operação teve que esperar por espaço no cache.
system.profile.responseLength
O comprimento em bytes do documento de resultado da operação. Um
responseLength
grande pode afetar o desempenho. Para limitar o tamanho do documento de resultado de uma operação de query, você pode usar qualquer um dos métodos abaixo:Observação
Quando o MongoDB grava informações de perfil de query no log, o valor
responseLength
está em um campo denominadoreslen
.
system.profile.cpuNanos
Novidades na versão 6.3.
O tempo total da CPU gasto por uma operação de queryem nanossegundos. Este campo está disponível apenas em sistemas Linux.
system.profile.protocol
O formato de mensagem de solicitação do MongoDB Wire Protocol.
system.profile.millis
O tempo em milésimos de segundo da perspectiva do
mongod
desde o início da operação até o final da operação.
planningTimeMicros
Novidades na versão 6.2.
O tempo, em microssegundos, que o comando
find
ouaggregate
passou no planejamento de query.
system.profile.execStats
Um documento que contém as estatísticas de execução da operação de query. Para outras operações, o valor é um documento vazio.
O
system.profile.execStats
apresenta as estatísticas como uma árvore; cada nó fornece as estatísticas para a operação executada durante esse estágio da operação de query.Observação
A lista de os campos a seguir para
execStats
não tem a intenção de ser exaustiva, pois os campos os campos retornados variam de acordo com o estágio.
system.profile.client
O endereço IP ou nome de host da conexão do cliente onde a operação se origina.
system.profile.appName
O identificador do aplicativo cliente que executou a operação. Use uma opção
appName
de connection string para definir um valor personalizado para o campoappName
.
system.profile.allUsers
Uma array de informações de usuário autenticadas (nome de usuário e banco de dados de dados) para a sessão. Consulte também Usuários em implementações autogerenciadas.
Documento system.profile
de exemplo
Os exemplos a seguir apresentam exemplos de documentos encontrados na coleção system.profile
para operações em um standalone:
O documento a seguir na collection system.profile
mostra métricas para uma operação de query de amostra na collection test.report
:
{ "op" : "query", "ns" : "test.report", "command" : { "find" : "report", "filter" : { "a" : { "$lte" : 500 } }, "lsid" : { "id" : UUID("5ccd5b81-b023-41f3-8959-bf99ed696ce9") }, "$db" : "test" }, "cursorid" : 33629063128, "keysExamined" : 101, "docsExamined" : 101, "fromMultiPlanner" : true, "numYield" : 2, "nreturned" : 101, "planCacheShapeHash" : "811451DD", "planCacheKey" : "759981BA", "queryFramework" : "classic", "locks" : { "Global" : { "acquireCount" : { "r" : NumberLong(3), "w" : NumberLong(3) } }, "Database" : { "acquireCount" : { "r" : NumberLong(3) }, "acquireWaitCount" : { "r" : NumberLong(1) }, "timeAcquiringMicros" : { "r" : NumberLong(69130694) } }, "Collection" : { "acquireCount" : { "r" : NumberLong(3) } } }, "storage" : { "data" : { "bytesRead" : NumberLong(14736), "timeReadingMicros" : NumberLong(17) } }, "responseLength" : 1305014, "protocol" : "op_msg", "millis" : 69132, "planningTimeMicros" : 129, "planSummary" : "IXSCAN { a: 1, _id: -1 }", "execStats" : { "stage" : "FETCH", "nReturned" : 101, "executionTimeMillisEstimate" : 0, "works" : 101, "advanced" : 101, "needTime" : 0, "needYield" : 0, "saveState" : 3, "restoreState" : 2, "isEOF" : 0, "docsExamined" : 101, "alreadyHasObj" : 0, "inputStage" : { ... } }, "ts" : ISODate("2019-01-14T16:57:33.450Z"), "client" : "127.0.0.1", "appName" : "MongoDB Shell", "allUsers" : [ { "user" : "someuser", "db" : "admin" } ], "user" : "someuser@admin" }
A coleção system.profile
inclui métricas para a operação getMore
. Neste exemplo, getMore
retorna documentos adicionais da coleção test.report
.
{ "op" : "getmore", "ns" : "test.report", "command" : { "getMore" : Long("33629063128"), "collection" : "report", "batchSize": 3, "lsid" : { "id": new UUID("3148c569-425c-4498-9168-5b7ee260bf27") }, "$db" : "test" }, originatingCommand: { "find: "report", "filter" : { "a" : { "$lte" : 500 } }, "lsid" : { "id" : UUID("5ccd5b81-b023-41f3-8959-bf99ed696ce9") }, "$db" : "test" }, "cursorid" : Long("33629063128"), "keysExamined" : 101, "docsExamined" : 101, "fromMultiPlanner" : true, "numYield" : 2, "nreturned" : 3, "planCacheShapeHash" : "811451DD", "planCacheKey" : "759981BA", "queryFramework": "classic" "locks" : { "Global" : { "acquireCount" : { "r" : NumberLong(3), "w" : NumberLong(3) } }, "Database" : { "acquireCount" : { "r" : NumberLong(3) }, "acquireWaitCount" : { "r" : NumberLong(1) }, "timeAcquiringMicros" : { "r" : NumberLong(69130694) } }, "Collection" : { "acquireCount" : { "r" : NumberLong(3) } } }, readConcern: {level: 'local', provenance: 'implicitDefault'}, "responseLength" : 1305014, "protocol" : "op_msg", "millis" : 69132, "planSummary" : "IXSCAN { a: 1, _id: -1 }", "execStats" : { "stage" : "FETCH", "filter" : { "a" : { "$lte" : 500 } }, "nReturned" : 101, "executionTimeMillisEstimate" : 0, "works" : 104, "advanced" : 104, "needTime" : 0, "needYield" : 0, "saveState" : 3, "restoreState" : 2, "isEOF" : 0, "direction": 'forward', "docsExamined" : 104 }, "ts" : ISODate("2019-01-14T16:57:33.450Z"), "client" : "127.0.0.1", "appName" : "MongoDB Shell", "allUsers" : [ { "user" : "someuser", "db" : "admin" } ], "user" : "someuser@admin" }
A partir do MongoDB 8.0, o campo queryHash
pré-existente é renomeado para planCacheShapeHash
. Se você estiver usando uma versão anterior do MongoDB , verá queryHash
em vez de planCacheShapeHash
.
A entrada de perfil para a operação update
(e delete
) contém o comando de atualização completo.
O documento a seguir na coleção system.profile
mostra métricas para uma operação de atualização de amostra na coleção test.report
:
{ "op" : "update", "ns" : "test.report", "command" : { "q" : { }, "u" : { "$rename" : { "a" : "b" } }, "multi" : true, "upsert" : false }, "keysExamined" : 0, "docsExamined" : 25000, "nMatched" : 25000, "nModified" : 25000, "keysInserted" : 25000, "keysDeleted" : 25000000, "numYield" : 6985, "locks" : { "Global" : { "acquireCount" : { "r" : NumberLong(6986), "w" : NumberLong(13972) } }, "Database" : { "acquireCount" : { "w" : NumberLong(6986) }, "acquireWaitCount" : { "w" : NumberLong(1) }, "timeAcquiringMicros" : { "w" : NumberLong(60899375) } }, "Collection" : { "acquireCount" : { "w" : NumberLong(6986) } }, "Mutex" : { "acquireCount" : { "r" : NumberLong(25000) } } }, "storage" : { "data" : { "bytesRead" : NumberLong(126344060), "bytesWritten" : NumberLong(281834762), "timeReadingMicros" : NumberLong(94549), "timeWritingMicros" : NumberLong(139361) } }, "millis" : 164687, "planningTimeMicros" : 129, "planSummary" : "COLLSCAN", "execStats" : { "stage" : "UPDATE", "nReturned" : 0, "executionTimeMillisEstimate" : 103771, "works" : 25003, "advanced" : 0, "needTime" : 25002, "needYield" : 0, "saveState" : 6985, "restoreState" : 6985, "isEOF" : 1, "nMatched" : 25000, "nWouldModify" : 25000, "wouldInsert" : false, "inputStage" : { "stage" : "COLLSCAN", "nReturned" : 25000, "executionTimeMillisEstimate" : 0, "works" : 25002, "advanced" : 25000, "needTime" : 1, "needYield" : 0, "saveState" : 31985, "restoreState" : 31985, "isEOF" : 1, "direction" : "forward", "docsExamined" : 25000 } }, "ts" : ISODate("2019-01-14T23:33:01.806Z"), "client" : "127.0.0.1", "appName" : "MongoDB Shell", "allUsers" : [ { "user" : "someuser", "db" : "admin" } ], "user" : "someuser@admin" }