Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ / / /

Database Profiler

Nesta página

  • Níveis de perfil
  • Habilitar e configurar o perfil do banco de dados
  • Ver dados do criador de perfil
  • Visão geral do analista

O analisador de profiler de banco de dados de dados coleta informações detalhadas sobre Comandos de banco de dados executados em uma instância mongod . Isso inclui operações CRUD, bem como comandos de configuração e administração. O profiler grava todos os dados que coleta em uma collection system.profile , uma collection limitada em cada banco de banco de dados analisado. Consulte Saídas do analisador de banco de dados para obter uma visão geral dos system.profile documentos criados pelo profiler.

O perfil é off por padrão. Você pode ativar o profiler por banco de dados ou por instância em um dos vários níveis de criação de perfil.

Quando ativado, o perfil tem um efeito no desempenho do banco de dados e no uso do disco. Consulte Sobrecarga do profiler do banco de dados para obter mais informações.

Este documento descreve uma série de opções de administrativas principais para o analisador de banco de dados. Para obter informações adicionais, consulte:

Aviso

Não tente criar uma coleção de séries temporais ou visualizar com o nome system.profile porque o servidor MongoDB falhará.

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.

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

Esta seção mostra como você usa o método auxiliar mongosh db.setProfilingLevel() para habilitar a criação de perfil. Para usar um método de driver em vez disso, consulte a documentação do driver.

Ao ativar a profiling para uma instância mongod , você define o nível de profiling para um valor maior que 0. O criador de profiler registra dados na coleção system.profile . O MongoDB cria a coleção system.profile em um banco de dados de dados depois que você habilita a criação de perfil para esse banco de dados de dados.

Para habilitar o perfil e definir o nível de perfil, passe o nível de perfil para o assistente db.setProfilingLevel() . Por exemplo, para habilitar a criação de perfil para todas as operações de banco de dados de dados, considere a seguinte operação em mongosh:

db.setProfilingLevel(2)

O shell retorna um documento mostrando o nível anterior de criação de perfil. O par de valores-chave "ok" : 1 indica que a operação foi bem-sucedida:

{ "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.

As configurações de criação de perfil slowms e sampleRate são globais. Quando definidas, essas configurações afetam todos os bancos de dados do seu processo.

Quando definidas por meio do profile ou do db.setProfilingLevel() ajudante de shell, as configurações de nível de criação de perfil e de filtro são definidas no nível do banco de dados. Ao definir como opções de linha de comando ou arquivo de configuração, o nível de criação de perfil e as configurações de filter afetam todo o processo.

Por padrão, o limite de operação lento é de 100 milésimos de segundo. Para alterar o limite de operação lenta, especifique o valor limite desejado de uma das seguintes maneiras:

Por exemplo, o seguinte código define o nível de perfil para a instância mongod atual como 1 e define o limite de operação lento para a instância mongod como 20 milésimos de segundo:

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

O nível de criação de perfil 1 criará o perfil de operações mais lentas do que o limite.

Importante

O limite de operação lento se aplica a todos os bancos de dados em uma instância do mongod. É usado pelo analisador de banco de dados e pelo registro de diagnóstico e deve ser definido com o maior valor útil para evitar a degradação do desempenho.

Iniciando no MongoDB 4.0, você pode utilizar o db.setProfilingLevel() para configurar o slowms e sampleRate para mongos. Para o mongos, as definições de configuração do slowms e sampleRate afetam somente o registro de diagnóstico e não o perfil, pois o perfil não está disponível no mongos. [1]

Por exemplo, o seguinte define um limite de operação lento de uma instância do mongos para registrar operações lentas:

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:

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.

Novidade na versão 3.6.

Para criar o perfil de apenas um subconjunto amostrado aleatoriamente de todas as operações lentas, especifique a taxa de amostragem desejada 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 nível de perfilamento 1 irão perfilar apenas uma porcentagem aleatória de operações lentas de acordo com sampleRate.

Por exemplo, o método a seguir define o nível de criação de perfil de mongod a 1 e define o criador de perfil para amostrar 42% de todas as operações lentas:

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

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

Iniciando no MongoDB 4.0, você pode utilizar o db.setProfilingLevel() para configurar o slowms e sampleRate para mongos. Para o mongos, as definições de configuração do slowms e sampleRate afetam somente o registro de diagnóstico e não o perfil, pois o perfil não está disponível no mongos. [1]

Por exemplo, o seguinte define a taxa de amostragem de uma instância do mongos para registrar operações lentas:

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.

Você pode definir um filtro para controlar quais operações são criadas e registradas. Você pode definir o filtro de perfil de uma das seguintes maneiras:

Para instâncias do mongod, o filter afeta o registro de diagnóstico e, se habilitado, o perfil.

Para instâncias do mongos, o filter afeta somente o registro de diagnóstico e não o perfil, pois o perfil não está disponível em mongos.

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.

Por exemplo, os seguintes conjuntos de métodos para uma ocorrência:

  • o nível de perfil para 2,

  • o filtro de { op: "query", millis: { $gt: 2000 } }, que faz com que o criador de perfil registre apenas as operações query que demoraram mais de 2 segundos.

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

Para visualizar o nível de perfilamento, emita o seguinte de mongosh:

db.getProfilingStatus()

A concha retorna um documento semelhante ao seguinte:

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

O campo was indica o nível de perfil atual.

O campo slowms indica o limite de tempo da operação, em milésimos de segundo, além de quais operações são consideradas lentas.

O campo sampleRate indica a porcentagem de operações lentas que devem ser definidas como perfil.

Para desativar a criação de perfil, use o seguinte assistente em mongosh:

db.setProfilingLevel(0)

Para fins de desenvolvimento em ambientes de teste, você pode ativar a criação de perfil de banco de dados para uma instância mongod inteira. O nível de perfil se aplica a todos os bancos de dados fornecidos pela instância do mongod.

Para ativar a criação de perfil em uma instância mongod, passe as seguintes opções para mongod na inicialização.

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

Alternativamente, você pode especificar operationProfiling no arquivo de configuração.

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

slowms e slowOpSampleRate também afetam quais operações são gravadas no registro de diagnóstico quando logLevel é definido como 0. O slowms e slowOpSampleRate também estão disponíveis para configurar o registro de diagnóstico para mongos. [2]

Dica

Veja também:

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

No entanto, é possível definir --slowms e slowOpSampleRate em mongos para configurar o log de diagnóstico para operações lentas.

O perfil do banco de dados registra informações sobre operações do banco de dados na coleção system.profile.

Para visualizar informações de criação de perfil, faça uma query da coleção system.profile. Para visualizar queries de exemplo, consulte Exemplo de queries de dados de perfil. Para uma explicação dos dados de saída, consulte Saída do analista do Banco de Dados.

Não é mais possível executar qualquer operação, inclusive leituras, na coleção system.profile em uma transação.

Dica

Você pode usar $comment para adicionar dados ao predicado da query para facilitar a análise dos dados do analista.

Esta seção exibe queries de exemplo para a coleção system.profile. Para uma explicação da saída da query, consulte Saída do analista do Banco de Dados.

Para retornar as 10 entradas de registro mais recentes na collection system.profile, execute uma query semelhante a:

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

Para retornar todas as operações exceto operações de comando ($cmd), execute uma query semelhante ao seguinte:

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

Para retornar operações para uma coleção específica, execute uma query semelhante à seguinte. Este exemplo retorna operações mydb na test coleção do banco de dados :

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

Para retornar operações mais lentas que 5 milésimos de segundo, execute uma query semelhante ao seguinte:

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

Para retornar informações de um determinado intervalo de tempo, execute uma query semelhante ao seguinte:

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

O exemplo a seguir examina o intervalo de tempo, suprime o campo user da saída para facilitar a leitura e classifica os resultados por quanto tempo cada operação levou para ser executada:

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 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 milissegundos para serem executadas. A emissão show profile de mongosh, da seguinte forma:

show profile

Quando ativado, o perfil tem um efeito no desempenho do banco de dados de dados, especialmente quando configurado com um nível de perfil de 2 ou ao usar um valor baixo de limite com um nível de perfil de 1. O perfil também consome espaço em disco, pois registra tanto a coleção system.profile quanto o MongoDB logfile. Considere cuidadosamente quaisquer implicações de desempenho e segurança antes de configurar e habilitar o profiler em uma implantação de produção.

A system.profile é uma coleção limitada com um tamanho padrão de 1 megabyte. Uma coleção desse tamanho normalmente pode armazenar vários milhares de documentos de perfil, mas alguns aplicativos podem usar mais ou menos dados de perfil por operação. Se você precisar alterar o tamanho da coleção system.profile, siga as etapas abaixo.

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

  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 coleção de system.profile que é 4000000 de bytes (4 MB), use a seguinte sequência de operações 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, você deve parar o secundário, executá-lo como um independente e então executar as etapas acima. Quando terminar, reinicie o autônomo como membro do conjunto de réplicas. Para obter mais informações, consulte Executar manutenção em membros do conjunto de réplicas autogerenciadas.

[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

Explicação de resultados