Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Menu Docs
Página inicial do Docs
/ /

Database Profiler

Aviso

O profiler de banco de dados pode degradar o desempenho do MongoDB . Antes de ativar o profiler de banco de dados, considere usar uma das seguintes alternativas:

Para saber mais sobre o impacto do desempenho do profiler de banco de dados, consulte Sobrecarga do profiler.

O profiler de banco de dados coleta informações detalhadas sobre Comandos de banco de dados executados em uma instância mongod, incluindo operações CRUD e comandos de administração.

O profiler grava dados na coleção system.profile, uma coleção limitada em cada banco de dados com perfil. Consulte Saídas do profiler de banco de dados para obter uma visão geral dos documentos criados pelo profiler.

O profiler é off por padrão. Você pode habilitá-lo por banco de dados ou por instância em um dos vários níveis de perfil. Quando ativado, o perfil afeta o desempenho do banco de dados e o uso do disco. Consulte Profiler de banco de dados sobrecarga.

Esta página documenta opções importantes de administração do profiler de banco de dados . Para obter informações adicionais, consulte:

Os seguintes níveis de analisador estão disponíveis:

0
O analisador está desligado e não coleta dados. Este é o nível do analisador padrão.
1

O profiler coleta dados para operações que excedem o limite de slowms ou correspondem a um filtro especificado.

Quando um filtro é definido:

  • As opções slowms e sampleRate não são usadas para análise.

  • O criador de perfil captura somente as operações que correspondem ao filtro.

2

O analisador coleta dados para todas as operações.

Ao definir para o nível 2, o profiler ignora os valores fornecidos pelo usuário para slowms e filter.

Você pode habilitar o perfil do banco de dados para instâncias do mongod.

Para habilitar a criação de perfil, use um dos seguintes métodos:

O MongoDB cria a coleção system.profile em um banco de dados depois que você habilita a criação de perfil para esse banco de dados. O profiler usa essa coleção para registrar dados.

Para habilitar a criação de perfil de uma instância mongod na inicialização, configure operationProfiling.mode no seu arquivo de configuração para o nível de log desejado.

Para habilitar a criação de perfil para todas as operações no banco de dados conectado no momento, execute em mongosh:

db.setProfilingLevel(2)

O shell retorna o nível de criação de perfil anterior em was e define o novo nível. "ok" : 1 indica sucesso:

{ "was" : 0, "slowms" : 100, "sampleRate" : 1.0, "ok" : 1 }

Para verificar a nova configuração, consulte a seção Verificar nível de perfil.

A partir do MongoDB 5.0, as alterações feitas no profiler do banco de dados level, slowms, sampleRate ou filter usando o comando profile ou db.setProfilingLevel() método wrapper são registradas no log file.

slowms e sampleRate são configurações globais que afetam todos os bancos de dados no processo.

Nível de perfilamento e filtro são configurações de nível de banco de dados quando configurados com profile ou db.setProfilingLevel(). Quando definidas como opções de linha de comando ou arquivo de configuração, elas afetam todo o processo.

Por padrão, o limite de operação lenta é de 100 milissegundos.

As operações lentas são registradas com base em workingMillis, que é a quantidade de tempo que o MongoDB gasta trabalhando nessa operação. Isso significa que fatores como a espera por bloqueios e o controle de fluxo não afetam o fato de uma operação exceder o limite de operação lenta.

Para alterar o limite de operação lenta, use uma das seguintes opções:

O exemplo a seguir define o nível de perfilamento do banco de dados conectado no momento como 1 e define o limite de operação lenta para a instância mongod como 20 milissegundos:

db.setProfilingLevel( 1, { slowms: 20 } )

Um nível de criação de perfil de 1 faz com que o perfil registre as operações mais lentamente do que o limite de slowms.

Importante

O limite de operação lento se aplica a todos os bancos de dados em uma instância do mongod. Ele é usado pelo profiler de banco de dados e pelo log de diagnóstico. Defina para o maior valor útil para evitar a degradação do desempenho.

Para mongos, utilize db.setProfilingLevel() para configurar slowms e sampleRate. Essas configurações afetam apenas o log de diagnóstico em mongos, não o profiler. A criação de perfil não está disponível em mongos. [1]

O exemplo a seguir define o limite de operação lenta de uma instância mongos para o registro de operações lentas em 20:

db.setProfilingLevel( 0, { slowms: 20 } )

As entradas do criador de perfil e as mensagens de log de diagnóstico (ou seja, mensagens de log mongod/mongos) para operações de leitura/gravação incluem:

  • planCacheShapeHash para ajudar a identificar queries lentas com a mesma forma de query de cache de plano.

    A partir do MongoDB 8.0, o campo queryHash existente é duplicado em um novo campo chamado planCacheShapeHash. Se você estiver usando uma versão anterior do MongoDB , verá apenas o campo queryHash. As futuras versões do MongoDB removerão o campo queryHash obsoleto, e você precisará usar o campo planCacheShapeHash em seu lugar.

  • planCacheKey para fornecer mais informações sobre o cache do plano de consulta para queries lentas.

Os membros secundários de um conjunto de réplicas agora registram entradas de oplog que demoram mais do que o limite de operação lenta para serem aplicadas. Essas mensagens de atraso no oplog:

  • São registradas para os secundários no diagnostic log.

  • São registradas sob o componente REPL com o texto applied op: <oplog entry> took <num>ms.

  • Não dependem dos níveis de registro (seja no nível do sistema ou do componente)

  • Não dependem do nível de perfil.

  • São afetados por slowOpSampleRate.

O perfilador não captura entradas de oplog lentas.

Para criar o perfil de apenas um subconjunto amostrado aleatoriamente de operações lentas, defina sampleRate de uma das seguintes maneiras: [2]

Por padrão, o sampleRate é configurado para 1.0, significando que todas as operações lentas são perfiladas. Quando sampleRate é definido entre 0 e 1, os bancos de dados com um nível de perfilamento 1 apenas perfilam uma amostragem aleatória de apenas uma porcentagem das operações lentas com base em sampleRate.

O exemplo a seguir define o nível de criação de perfil como 1 e define os perfis para amostrar 42% das operações lentas:

db.setProfilingLevel( 1, { sampleRate: 0.42 } )

O valor da taxa de amostragem modificado também se aplica ao log do sistema.

Para mongos, slowms e sampleRate afetam apenas o log de diagnóstico, não o profiler. [1] Para definir a taxa de amostragem para o registro mongos:

db.setProfilingLevel( 0, { sampleRate: 0.42 } )

Importante

Quando logLevel é definido como 0, o MongoDB registra operações lentas no log de diagnóstico a uma taxa determinada por slowOpSampleRate.

Em configurações logLevel mais altas, todas as operações aparecem no log de diagnóstico, independentemente da latência, com a seguinte exceção: o log de mensagens de entrada lentas do oplog pelos secundários. Os secundários registram apenas as entradas lentas do oplog. Aumentar logLevel não registra todas as entradas do oplog.

[1](1, 2) Consulte Criação de perfil e fragmentação de banco de dados.

Para controlar quais operações são perfiladas e registradas, defina um filtro de uma das seguintes maneiras:

Para mongod, filter afeta o log de diagnóstico e o profiler, se habilitados. Para mongos, filter afeta somente o log de diagnóstico.

Observação

Quando um perfil filter é definido, as opções lentidão e sampleRate não afetam o registro de diagnóstico ou o perfil.

O exemplo a seguir define o nível de criação de perfil 1 com um filtro que registra apenas query operações que demoram mais de 2 segundos:

db.setProfilingLevel( 1, { filter: { op: "query", millis: { $gt: 2000 } } } )

Para visualizar o nível de perfilamento, execute em mongosh:

db.getProfilingStatus()

A concha retorna um documento semelhante ao seguinte:

{ "was" : 0, "slowms" : 100, "sampleRate" : 1.0, "ok" : 1 }

O documento devolvido contém:

  • was: nível de perfil atual.

  • slowms: operation time threshold in milissegundos.

  • sampleRate: porcentagem de operações lentas que estão sendo analisadas.

Para desativar o perfilamento, execute em mongosh:

db.setProfilingLevel(0)

Observação

A desativação do perfilamento pode melhorar o desempenho do banco de dados e reduzir o uso do disco. Para obter mais informações, consulte Sobrecarga do profiler de banco de dados.

Para ambientes de desenvolvimento e teste, você pode habilitar a criação de perfil para uma instância mongod inteira. O nível de perfil se aplica a todos os bancos de dados nesta instância.

Passe as seguintes opções para mongod na inicialização:

mongod --profile 1 --slowms 15 --slowOpSampleRate 0.5

Alternativamente, especifique operationProfiling no arquivo de configuração.

Isso define o nível de criação de perfil 1, define operações lentas como aquelas que duram mais de 15 milésimos de segundo e perfila 50% das operações lentas. [2]

slowms e slowOpSampleRate também afetam as operações registradas no log de diagnóstico quando logLevel está 0. Ambas as configurações também configuram o registro de diagnóstico para mongos. [2]

Dica

Você não pode habilitar o perfil em uma instância do mongos. Para habilitar o perfil em um cluster fragmentado, habilite-o em cada instância mongod no cluster.

Você pode definir --slowms e slowOpSampleRate em mongos para configurar o log de diagnóstico para operações lentas.

O profiler registra operações do banco de dados na coleção system.profile. Query essa coleção para visualizar os dados de criação de perfil. Para queries de exemplo, consulte Exemplo de queries de dados do profiler. Para obter detalhes de saída, consulte Saída do profiler de banco de dados.

Não é possível realizar nenhuma operação, incluindo leituras, na system.profile coleção a partir de uma transação.

Esta seção mostra exemplos de queries na collection system.profile. Para obter detalhes de saída da query, consulte Saída do analisador de banco de dados.

Retornar as 10 entradas de log mais recentes:

db.system.profile.find().limit(10).sort( { ts : -1 } ).pretty()

Retornar todas as operações exceto operações de comando ($cmd):

db.system.profile.find( { op: { $ne : 'command' } } ).pretty()

Operações de retorno para uma coleção específica (este exemplo utiliza mydb.test):

db.system.profile.find( { ns : 'mydb.test' } ).pretty()

Operações de retorno com mais de 5 milissegundos:

db.system.profile.find( { millis : { $gt : 5 } } ).pretty()

Retornar operações em uma faixa de tempo específica:

db.system.profile.find( {
ts : {
$gt: new ISODate("2012-12-09T03:00:00Z"),
$lt: new ISODate("2012-12-09T03:40:00Z")
}
} ).pretty()

Operações de retorno em um intervalo de tempo, exclua o campo user e classifique por duração:

db.system.profile.find( {
ts : {
$gt: new ISODate("2011-07-12T03:00:00Z"),
$lt: new ISODate("2011-07-12T03:40:00Z")
}
}, { user: 0 } ).sort( { millis: -1 } )

Em um banco de dados com a criação de perfil ativada, o assistente show profile em mongosh exibe as 5 operações mais recentes que levaram pelo menos 1 milésimo de segundo para serem executadas. Execute show profile de mongosh:

show profile

Quando ativado, o perfil afeta o desempenho do banco de dados, especialmente no nível de perfil 2 ou ao usar um limite baixo de lentidão com o nível 1. A criação de perfil também usa espaço em disco, pois grava na coleção system.profile e no MongoDB logfile.

Aviso

Considere as implicações de desempenho e armazenamento antes de habilitar o perfilamento em um sistema de produção.

A system.profile é uma coleção limitada com um tamanho padrão de 1 megabyte, que normalmente pode armazenar vários milhares de documentos de perfil. Se precisar alterar o tamanho, siga as etapas abaixo.

Para alterar o tamanho da coleção system.profile no primário:

  1. Desative a criação de perfil.

  2. Solte a coleção system.profile.

  3. Crie uma nova coleção system.profile.

  4. Reativar perfil.

Por exemplo, para criar uma nova system.profile coleção de 4000000 bytes (4 MB) em mongosh:

db.setProfilingLevel(0)
db.system.profile.drop()
db.createCollection( "system.profile", { capped: true, size:4000000 } )
db.setProfilingLevel(1)

Para alterar o tamanho da coleção system.profile em um secundário, interrompa o secundário, execute-o como autônomo e execute as etapas acima. Em seguida, reinicie-o como um membro do conjunto de réplicas. Para obter mais informações, consulte Executar manutenção de membros autogerenciados do conjunto de réplicas.

[2](1, 2, 3) Os membros secundários de um conjunto de réplicas agora registram oplog que demoram mais do que o limite de operação lenta para serem aplicadas. Essas mensagens de atraso no oplog:
  • São registradas para os secundários no diagnostic log.
  • São registradas sob o componente REPL com o texto applied op: <oplog entry> took <num>ms.
  • Não dependem dos níveis de registro (seja no nível do sistema ou do componente)
  • Não dependem do nível de perfil.
  • São afetados por slowOpSampleRate.
O perfilador não captura entradas de oplog lentas.

Voltar

Explicar queries lentas

Nesta página