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:
$queryStats(estágio de agregação )
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:
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.
1O profiler coleta dados para operações que excedem o limite de
slowmsou correspondem a um filtro especificado.Quando um filtro é definido:
As opções
slowmsesampleRatenão são usadas para análise.O criador de perfil captura somente as operações que correspondem ao filtro.
2O analisador coleta dados para todas as operações.
Ao definir para o nível
2, o profiler ignora os valores fornecidos pelo usuário paraslowmsefilter.
Habilitar e configurar o perfil do banco de dados
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:
Para habilitar a criação de perfil na inicialização, configure
operationProfiling.modeno seu arquivo de configuração.Para habilitar a criação de perfil durante o tempo de execução, use o método assistente
mongoshdb.setProfilingLevel().Para habilitar a criação de perfil com um driver, utilize um método de driver.
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.
Configurações de perfil global e por banco de dados
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.
Especifique o limite para operações lentas
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:
Defina o valor de
slowmsusando o comandoprofileou o ajudante de shelldb.setProfilingLevel().Configure o valor de
--slowmsa partir da linha de comando na inicialização.Defina o valor de
slowOpThresholdMsem um arquivo de configuração.
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:
planCacheShapeHashpara ajudar a identificar queries lentas com a mesma forma de query de cache de plano.A partir do MongoDB 8.0, o campo
queryHashexistente é duplicado em um novo campo chamadoplanCacheShapeHash. Se você estiver usando uma versão anterior do MongoDB , verá apenas o campoqueryHash. As futuras versões do MongoDB removerão o campoqueryHashobsoleto, e você precisará usar o campoplanCacheShapeHashem seu lugar.planCacheKeypara 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
REPLcom 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
Para criar o perfil de apenas um subconjunto amostrado aleatoriamente de operações lentas, defina sampleRate de uma das seguintes maneiras: [2]
Defina o valor de
sampleRateusando o comandoprofileou o ajudante de shelldb.setProfilingLevel().Configure o valor de
--slowOpSampleRateparamongodou--slowOpSampleRateparamongosa partir da linha de comando na inicialização.Defina o valor de
slowOpSampleRateem 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 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. |
Definir um filtro para determinar as operações perfiladas
Para controlar quais operações são perfiladas e registradas, defina um filtro de uma das seguintes maneiras:
profilecomando oudb.setProfilingLevel().
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 } } } )
Verificar nível de perfil
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.
Desativar criação de perfil
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.
Habilitar a criação de perfil para uma instância mongod inteira
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]
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, 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.
Ver dados do criador de perfil
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.
Exemplo de queries de dados do analista
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 } )
Mostrar os cinco eventos mais recentes
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
Visão geral do analista
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 Collection
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.
Alterar o tamanho da coleção system.profile no primário
Para alterar o tamanho da coleção system.profile no primário:
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 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)
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, 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:
|