Database Profiler
Nesta página
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.
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.
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
.
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 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.
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, especifique o valor de limite exigido 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.
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 paraplanCacheShapeHash
. Se você estiver usando uma versão anterior do MongoDB , veráqueryHash
em vez deplanCacheShapeHash
.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
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]
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 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. |
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 método de 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.
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çõ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 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.
Desativar criação de 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.
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 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]
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.
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.
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 } )
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 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.
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:
|