Database Profiler
Nesta página
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á.
Níveis de perfil
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
esampleRate
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.
Habilitar e configurar o perfil do banco de dados
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
.
Configurações de perfil global e por banco de dados
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.
Especifique o limite para operações lentas
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:
Defina o valor de
slowms
usando o comandoprofile
ou o ajudante de shelldb.setProfilingLevel()
.Configure o valor de
--slowms
a partir da linha de comando na inicialização.Defina o valor de
slowOpThresholdMs
em um arquivo de configuração.
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:
queryHash
para ajudar a identificar queries lentas com a mesma forma de query.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 textoapplied 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.
Crie um perfil de uma amostra aleatória de operações 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]
Defina o valor de
sampleRate
usando o comandoprofile
ou o ajudante de shelldb.setProfilingLevel()
.Configure o valor de
--slowOpSampleRate
paramongod
ou--slowOpSampleRate
paramongos
a partir da linha de comando na inicialização.Defina o valor de
slowOpSampleRate
em um arquivo de configuração.
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. |
Definir um filtro para determinar as operações perfiladas
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:
Defina o valor de
filter
usando o comandoprofile
ou o ajudante de shelldb.setProfilingLevel()
.Defina o valor de
filter
em um arquivo de configuração.
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çõesquery
que demoraram mais de 2 segundos.
db.setProfilingLevel( 2, { filter: { op: "query", millis: { $gt: 2000 } } } )
Verificar nível de perfil
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.
Desativar criação de perfil
Para desativar a criação de perfil, use o seguinte assistente em mongosh
:
db.setProfilingLevel(0)
Habilitar a criação de perfil para uma instância mongod
inteira
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]
Perfil e fragmentação de banco de dados
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.
Ver dados do criador de perfil
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.
Exemplo de queries de 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 } )
Mostrar os cinco eventos mais recentes
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
Visão geral do analista
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.
Coleção system.profile
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.
Alterar o tamanho da coleção system.profile
no primário
Para alterar o tamanho da coleção system.profile
no primário, você deve:
Desative a criação de perfil.
Solte a coleção
system.profile
.Crie uma nova coleção
system.profile
.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)
Alterar o tamanho da coleção system.profile
em um secundário
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:
|