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

db.setProfilingLevel()

Nesta página

  • Definição
  • Compatibilidade
  • Sintaxe
  • Parâmetros
  • Devoluções
  • Comportamento
  • Exemplos
  • Habilite o profiler e defina o limite de operação lenta e a taxa de amostragem
  • Desative o profiler e defina o limite de operação lenta e a taxa de amostragem
  • Definir um filtro para determinar as operações perfiladas
  • Redefinir um filtro
db.setProfilingLevel(level, options)

Alterado na versão 5.0.

Para uma instância mongod, o método habilita, desabilita ou configura o Profiler de banco de dados. O profiler capta e registra dados sobre o desempenho de operações de gravação, cursores e comandos de banco de dados em uma instância mongod em execução. Se o profiler estiver desabilitado, o método configurará como as operações lentas serão registradas no log de diagnóstico.

Observação

As alterações feitas no nível de profiling com db.setProfilingLevel() não persistem. Quando o servidor é reiniciado, ele reverte para 0 (o padrão) ou o valor definido pela configuração operationProfiling.mode ou pela opção de linha de comando --profile.

Se o nível do profiler de banco de dados do for 1 ou 2 (especificamente, o profiler de banco de dados estiver ativado), o slowms e o sampleRate afetarão o comportamento do profiler e do diagnostic log.

Se o nível do profiler de banco de dados for 0 (especificamente, o profiler de banco de dados estiver desabilitado), os slowms e sampleRate afetarão somente o log de diagnóstico.

Com instâncias mongos , o método define os ajustes de configuração slowms, sampleRate e filter, que definem como as operações são gravadas no registro de diagnóstico. Não é possível ativar o profiler de banco de dados em uma instância mongos porque mongos não possui nenhuma coleção nas quais o profiler possa gravar. O nível profile deve ser 0 para uma instância mongos .

Você pode especificar um filtro nas instâncias mongod e mongos para controlar quais operações são registradas pelo profiler. Quando você especifica um filter para o profiler, as opções slowms e sampleRate não são usadas para perfilar e linhas de log de query lenta.

db.setProfilingLevel() fornece um encapsulador em torno do comando profile.

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

Esse método 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

Este comando não é suportado em clusters M0, M2 e M5 . 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

O método db.setProfilingLevel() tem o seguinte formato:

db.setProfilingLevel(<level>, <options>)
Parâmetro
Tipo
Descrição

inteiro

Configura o nível do perfil do banco de dados. 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.

Como a criação de perfil não está disponível em mongos, db.setProfilingLevel() não pode ser usado para definir o nível de criação de perfil como um valor diferente de 0 em uma mongos instância.

documento ou valor inteiro

Opcional. Aceita um valor inteiro ou um documento de opções. Se um valor inteiro for fornecido como options argumento em vez de um documento, o valor será atribuído a slowms. As seguintes opções estão disponíveis:

Default: 100
Type: integer

O limite do tempo de operação lenta, em milissegundos. As operações executadas por mais tempo que esse limite são consideradas lentas.

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.

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.

Para instâncias mongod, a configuração afeta o registro de diagnóstico e, se ativado, o criador de perfil.

Para instâncias mongos, a configuração afeta somente o registro de diagnóstico e não o profiler porque o profiling não está disponível emmongos.

Esse argumento afeta a mesma configuração da opção slowOpThresholdMs do arquivo de configuração.

Default: 1.0
Type: double

A fração de operações lentas que devem ser analisadas ou registradas. sampleRate aceita valores entre 0 e 1, inclusive.

Para instâncias mongod, a configuração afeta o registro de diagnóstico e, se ativado, o criador de perfil.

Para instâncias mongos, a configuração afeta somente o registro de diagnóstico e não o profiler porque o profiling não está disponível emmongos.

Este argumento afeta a mesma configuração que a opção de configuração slowOpSampleRate.

Tipo: objeto

Uma expressão de filtro que controla quais operações são perfiladas e registradas. O campo na expressão de filtro pode ser qualquer campo na saída do profiler.

Para instâncias mongod, a configuração afeta o registro de diagnóstico e, se ativado, o criador de perfil.

Para instâncias mongos, a configuração afeta somente o registro de diagnóstico e não o profiler porque o profiling não está disponível emmongos.

A partir do MongoDB 8.0, você pode especificar workingMillis como um parâmetro de filtro para registrar operações com base no tempo que o MongoDB passa trabalhando nessa operação.

Para obter um exemplo de um filtro usado para controlar operações registradas, consulte Definir um filtro para determinar operações com perfil.

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

O método retorna um documento que contém os valores anteriores das configurações.

{
"was" : 2,
"slowms" : 100,
"sampleRate" : 1,
"filter" : {
"$and" : [
{
"op" : {
"$eq" : "query"
}
},
{
"millis" : {
"$gt" : 20000
}
}
]
},
"note" : "When a filter expression is set, slowms and sampleRate are not used for profiling and slow-query log lines.",
"ok" : 1
}
{
"was" : 0,
"slowms" : 100,
"sampleRate" : 1,
"filter" : {
"$and" : [
{
"op" : {
"$eq" : "query"
}
},
{
"millis" : {
"$gte" : 2000
}
}
]
},
"note" : "When a filter expression is set, slowms and sampleRate are not used for profiling and slow-query log lines.",
"ok" : 1,
"$clusterTime" : {
"clusterTime" : Timestamp(1572991238, 1),
"signature" : {
"hash" : BinData(0,"hg6GnlrVhV9MAhwWdeHmHQ4T4qU="),
"keyId" : NumberLong("6755945537557495811")
}
},
"operationTime" : Timestamp(1572991238, 1)
}
{
"was" : 0,
"slowms" : 100,
"sampleRate" : 1,
"filter" : {
"$and" : [
{
"op" : {
"$eq" : "query"
}
},
{
"millis" : {
"$gte" : 2000
}
}
]
},
"note" : "When a filter expression is set, slowms and sampleRate are not used for profiling and slow-query log lines.",
"ok" : 1,
"operationTime" : Timestamp(1572991499, 2),
"$clusterTime" : {
"clusterTime" : Timestamp(1572991499, 2),
"signature" : {
"hash" : BinData(0,"nhCquIxUw7thlrBudXe3PnsnvP0="),
"keyId" : NumberLong("6755946491040235540")
}
}
}

Onde:

  • was é a configuração deanterior de nível.

  • slowms é a configuração de anterior de slowms.

  • sampleRate é a configuração anterior de sampleRate.

  • filter é a configuração anterior de filtro.

  • note é uma string explicando o comportamento de filter. Este campo aparece somente no resultado quando filter também está presente.

Observação

Os campos filter e note só aparecem na saída se estiverem presentes na configuração de nível anterior.

Para visualizar o nível do profiling atual, consulte db.getProfilingStatus().

Aviso

A análise pode degradar o desempenho e expor dados de query não criptografados no registro do sistema. Considere cuidadosamente quaisquer implicações de desempenho e segurança antes de configurar e habilitar o analisador em um sistema de produção.

Consulte Sobrecarga do criador de perfil para obter mais informações sobre a possível degradação do desempenho.

Os seguintes conjuntos de exemplo para uma instância do mongod:

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

A operação retorna um documento com os valores anteriores para as configurações.

Para visualizar o nível do profiling atual, consulte db.getProfilingStatus().

O exemplo seguinte define a instância mongod ou mongos:

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

A operação retorna um documento com os valores anteriores para as configurações.

Para visualizar o nível do profiling atual, consulte db.getProfilingStatus().

Os seguintes conjuntos de exemplo para uma instância do mongod:

  • o nível de perfil para 1,

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

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

A operação retorna um documento com os valores anteriores para as configurações.

Para visualizar o nível do profiling atual, consulte db.getProfilingStatus().

Para limpar um filtro de perfil, execute db.setProfilingLevel() com a opção filter: "unset".

db.setProfilingLevel( 1, { filter: "unset" } )

A operação retorna um documento com os valores anteriores para as configurações.

Para visualizar o nível do profiling atual, consulte db.getProfilingStatus().

Voltar

db.setLogLevel