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 profiler de banco 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 criador de perfil grava todos os dados coletados em uma collection system.profile, uma capped collection em cada banco de dados perfilado. Consulte Saída do analisador de banco de dados para obter uma visão geral dos documentos system.profile criados por ele.

O perfil é off por padrão. Você pode ativar o criador de perfil por banco de dados ou por instância em um dos váriosní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.

Esta página mostra opções de administração importantes para o analisador de banco de dadoss. 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. MongoDB 6.3 e versões posteriores retornam um erro IllegalOperation se você tentar fazê-lo. Versões anteriores do MongoDB falham.

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.

Para habilitar a criação de perfil para uma instância do mongod, defina o nível de criação de perfil para um valor maior que 0. O profiler registra dados na coleção system.profile. 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.

Para habilitar o perfil e definir o nível de perfil, passe o nível de perfil para o auxiliar db.setProfilingLevel(). Por exemplo, para ativar a criação de perfil para todas as operações do banco de dados conectado no momento, execute esta operação em mongosh:

db.setProfilingLevel(2)

O shell retorna o nível de perfilamento anterior no campo was e define o novo nível. Na saída a seguir, 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 definido por meio do comando profile ou método db.setProfilingLevel() do assistente de shell, o nível de perfilamento e configurações de filtro são definidos 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 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, especifique o valor de limite exigido de uma das seguintes maneiras:

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. É 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.

Você pode usar db.setProfilingLevel() para configurar slowms e sampleRate para mongos. Para mongos, as definições de configuração slowms e sampleRate afetam apenas o registro de diagnóstico e não o criador de perfil, pois 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 pré-existente é renomeado para planCacheShapeHash. Se você estiver usando uma versão anterior do MongoDB , verá queryHash em vez de planCacheShapeHash.

  • 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 perfilar apenas de um subconjunto de amostra aleatória 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 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 para o banco de dados conectado no momento como 1 e define o analisador para obter uma amostra de 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.

Você pode usar db.setProfilingLevel() para configurar slowms e sampleRate para mongos. Para mongos, as definições de configuração slowms e sampleRate afetam apenas o registro de diagnóstico e não o analisador, pois a criação de perfil não está disponível em 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.

O exemplo db.setProfilingLevel() a seguir define o nível de perfilamento para o banco de dados conectado no momento:

  • 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 criação de perfil, execute o seguinte exemplo em 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 o perfilamento, execute o seguinte exemplo 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 de banco de dados para uma instância mongod inteira. O nível de criação de perfil se aplica a todos os bancos de dados fornecidos pela instância 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]

O slowms e o slowOpSampleRate também afetam as operações que são registradas no registro de diagnóstico quando logLevel está 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.

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.

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 que levem mais de 5 milissegundos para serem concluídas, execute:

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

Para retornar operações para um intervalo de tempo específico, execute:

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 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 tem um efeito no desempenho do banco 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.

A criação de perfil também usa espaço em disco, porque a criação de perfil grava registros na collection 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. 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

Interpretar os resultados