As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Consultas de longa duração
Visão geral do
Long-running as consultas podem se transformar em problemas de desempenho em todo o cluster. Essas consultas podem interferir no processo de coleta de lixo do Amazon DocumentDB Multi-Version Concurrency Control (MVCC), levando ao acúmulo de documentos com versões antigas e à degradação do desempenho em todo o cluster. O Amazon DocumentDB implementa um tempo limite de 2 horas no servidor como um mecanismo de segurança para impedir que consultas descontroladas consumam recursos indefinidamente.
O que são consultas de longa duração:
-
Consultas que são executadas por longos períodos (normalmente > 30 minutos)
-
Cursores abertos que permanecem ativos por horas (o tempo limite de 2 horas não será aplicável se o cursor estiver ativo)
Impacto no cluster
Consultas de longa duração podem interferir no processo de coleta de lixo
-
Versões antigas se acumulam: o coletor de lixo não pode recuperar versões antigas do documento
-
Inchaço da coleção e do índice: as entradas da coleção e do índice se acumulam com o tempo, o inchaço aumenta e isso pode resultar em mais custos de armazenamento.
-
Pressão da CPU e da memória: a pressão da CPU e da memória aumenta devido ao processamento ineficiente do maior número de versões de documentos antigos, entradas de índice e IDs de transações.
Consulta de longa duração → Bloqueia GC → Crescimento do armazenamento → Pressão da CPU e da memória → Mais consultas longas
Monitore e detecte
1. Para encontrar consultas de longa duração, use o comando CurrentOp.
// To find a query running for more than 30 mins db.adminCommand({ aggregate: 1, pipeline: [ {$currentOp: {}}, {$match: {$or: [{secs_running: {$gt: 1800}}, {WaitState: {$exists: true}}]}}], cursor: {} });
2. Para encontrar cursores ativos por mais de 30 minutos
// To find cursor which is running more than 30 mins db.adminCommand({ "currentOp": true, "active": true, "$all": true }).inprog.filter(function(op) { return op.desc == "Cursor" && op.secs_running > 1800 && op.active == true; }).sort((a, b) => b.microsecs_running - a.microsecs_running)
3. Monitorando o progresso do coletor de lixo por meio de CloudWatch
LongestRunningGCProcess— Duração em segundos do processo de coleta de lixo ativo mais longo. Atualiza a cada minuto e rastreia somente as operações ativas, excluindo os processos concluídos dentro da janela de um minuto.
AvailableMVCCIds-Um contador que mostra o número de operações de gravação restantes disponíveis antes de chegar a zero. Quando esse contador chega a zero, seu cluster entra no modo somente de leitura até que os IDs sejam recuperados e reciclados. O contador diminui a cada operação de gravação e aumenta à medida que a coleta de resíduos recicla IDs de MVCC antigos.
nota
IDs de MVCC mais baixos e maior duração da coleta de lixo não são atribuídos exclusivamente a consultas de longa duração. Write-intensive cargas de trabalho em instâncias com recursos limitados também podem resultar na redução da disponibilidade do MVCC ID e em ciclos prolongados de coleta de lixo.
Estratégias de remediação
-
Implemente tempos limite de consulta no aplicativo
-
Não mantenha os cursores ativos por períodos mais longos
-
Otimize as consultas para obter um melhor desempenho.
-
Prefira o agrupamento em lotes de operações de gravação