Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Menu Docs
Página inicial do Docs
/
Manual do banco de dados
/ / / / /

Encontrar queries lentas

O MongoDB inclui o Database Profiler, que pode identificar queries lentas e ajudar você a determinar como melhorar o desempenho da query.

Esta tarefa utiliza o profiler de banco de dados para identificar queries lentas em uma instância do mongod em execução. Quando ativado, o profiler de banco de dados pode afetar o desempenho e o uso do disco e expor dados de query não criptografados.

Aviso

Considere as implicações de desempenho, armazenamento e segurança antes de usar o profiler de banco de dados em um sistema de produção.

Os Atlas users podem aproveitar o Atlas Query Profiler para identificar queries lentas com a conveniência da visualização por meio de um gráfico de dispersão.

Para mais informações, consulte Monitorar o Desempenho da Query com o Analisador de Query.

Uma query lenta é aquela que leva mais tempo do que um período especificado para ser executada. Para esta tarefa, o limite de query lenta é definido para 100 milissegundos.

Em alguns casos de uso, você pode exigir que as queries sejam executadas mais rapidamente. Em outros, talvez seja necessário aumentar o limite para se concentrar apenas nas queries que são as mais lentas.

Escolha um limite de query lento que reflita suas necessidades específicas de aplicação e banco de dados .

Quando ativado, o profiler de banco de dados monitora as queries somente no nível do banco de dados. Se você precisar que o profiler monitore queries lentas em vários bancos de dados, execute o método db.setProfilingLevel() em cada banco de dados.

O profiler de banco de dados não está disponível por meio de mongos.

1

Para habilitar o profiler de banco de dados para monitorar queries lentas, utilize o método db.setProfilingLevel():

db.setProfilingLevel(1, 100)
{ was: 0, slowms: 1, sampleRate: 1, ok: 1}

Isso define o nível de perfil como 1, que monitora queries lentas, e define uma query como lenta se levar mais de 100 milésimos de segundo para ser executada.

2

Para listar quaisquer queries lentas encontradas pelo profiler de banco de dados, consulte a coleção system.profile para obter dados relevantes:

db.system.profile.find( { },
{
command: 1,
millis: 1,
docsExamined: 1,
keysExamined: 1,
nreturned: 1
}
).sort( { ts: -1 } )
[
{
command: {
find: 'people',
filter: { age: { '$gt': 35 } },
lsid: { id: UUID('ae3e9932-0a78-47ab-b741-01dd3bfb3563') },
'$db': 'contacts'
},
keysExamined: 0,
docsExamined: 100000,
nreturned: 40,
millis: 143
}
]

O comando fornece uma lista de queries lentas observadas pelo profiler de banco de dados.

A projeção filtra os documentos de retorno para incluir informações que você pode considerar úteis para determinar o que causou a lentidão da query.

  • Se keysExamined for 0, indica que um índice não foi utilizado pela query. Para resolver isso, crie um índice na coleção.

  • Se um índice foi utilizado e docsExamined for muito maior que nreturned, isso indica um índice ineficaz. Talvez seja necessário atualizar o índice ou criar um novo em um campo ou campos usados pelo filtro de consulta.

  • Se keysExamined for alto e docsExamined for baixo, isso indica o uso efetivo do índice.

3

Para garantir que o profiler de banco de dados não interrompa ainda mais o desempenho, desative-o quando não for mais necessário:

db.setProfilingLevel(0)
{ was: 1, slowms: 1, sampleRate: 1, ok: 1}

Para avaliar o desempenho em uma coleção com um índice, você pode configurar a consulta para ignorar índices utilizando o método hint( { $natural: 1 } ).

db.listingsAndReviews.find( {
$or: [
{ "address.market": "Berlin" },
{ "review_scores.review_scores_cleanliness": { $lt: 5 } }
],
$where: function () {
return this.amenities && this.amenities.length > 15;
}
} ).sort( { description: 1 } ).hint( { $natural: 1 } );

Você pode achar isso útil nos casos em que deseja comparar o desempenho das queries com uma verificação de collection com o de uma varredura de índice.

Voltar

Saída

Nesta página