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á.
Planejador de consultas v3
A versão 3 do Planner no Amazon DocumentDB 8.0 suporta 21 estágios de agregação, incluindo 6 novos estágios. O Planner V3 vem com suporte embutido para comandos distintos. Ele oferece uma melhoria de desempenho geral de até duas vezes em relação ao Planner v2 no Amazon DocumentDB 5.0. Todos os novos recursos e operadores do Amazon DocumentDB 8.0 são compatíveis com o Planner v3. Os novos estágios de agregação no Amazon DocumentDB 8.0 compatíveis com o Planner v3 incluem $replaceWith, $vectorSearch, $merge, $set, $unset, $bucket. O Planner v3 também oferece suporte a novos recursos e operadores no Amazon DocumentDB 8.0, incluindo Collation, Views, $merge, $pow, $rand, $dateTrunc, $date, $date. ToParts FromParts
Tópicos
Pré-requisitos
Os seguintes pré-requisitos se aplicam ao planejador versão 3.0:
A versão 3.0 do Planner está disponível em todas as áreas em Regiões da AWS que a versão 8.0 do motor está disponível.
O Planner versão 3.0 é o planejador de consultas padrão quando a versão 8.0 do mecanismo é selecionada.
Selecionar o planejador versão 3.0 como o planejador de consultas padrão
Se você alterou seu planejador de consultas padrão no Amazon DocumentDB 8.0 e precisa reverter para o planejador v3, você pode fazer isso a partir do console ou da CLI:
Siga as etapas em Modificando os parâmetros de cluster do Amazon DocumentDB para modificar o grupo de parâmetros do seu cluster.
Para o parâmetro intitulado 'PlannerVersion', altere o valor para 3.0, indicando a versão 3.0 do planejador.
Selecione Aplicar imediatamente (selecionar Aplicar na reinicialização tornará a seleção ineficaz até a próxima reinicialização do cluster).
Práticas recomendadas
Para obter os resultados esperados, use as seguintes práticas recomendadas ao aplicar o planejador versão 3.0:
Em um cluster global, selecione o mesmo
plannerVersionvalor (1,0, 2,0 ou 3,0) nos grupos de parâmetros do cluster para ambas as regiões. Observe que selecionar diferentes versões do planejador nas regiões primária e secundária pode causar comportamento e desempenho inconsistentes da consulta.A atualização para a versão 3.0 do planejador durante uma janela de manutenção programada ou durante períodos de tráfego reduzido será a menos disruptiva, pois pode haver um aumento nas taxas de erro se a versão do planejador for alterada quando as cargas de trabalho estiverem em execução ativa.
Limitações
As seguintes limitações se aplicam ao planejador versão 3.0:
A versão 3.0 do Planner não é suportada em clusters elásticos, que retornarão à versão 1.0 do planejador.
Enquanto o Planner v1 permite o uso do 'PlanHint' para garantir que um plano de consulta específico seja selecionado pelo otimizador de consultas, o Planner v3 não permite o uso do 'PlanHint' e depende de otimizações internas para escolher o melhor plano para a consulta em questão.
Melhorias em operadores agregados e distintos
A versão 3.0 do Planner introduz melhorias nos estágios $aggregate e no comando $distinct. A seguir estão algumas das melhorias mais notáveis..
O planejador move os estágios $match mais cedo no pipeline quando possível, reduzindo o número de documentos processados pelos estágios subsequentes.
//Planner v1 db.orders.aggregate([ { $project: { customerId: 1, orderDate: 1, totalAmount: 1 } }, { $match: { customerId: { $gt: 1000 } } } ]) // Planner v3 pulls up the match since customerId exists in original documents // Optimized internally as: db.orders.aggregate([ { $match: { customerId: { $gt: 1000 } } }, // Pulled up before project { $project: { customerId: 1, orderDate: 1, totalAmount: 1 } } ])O planejador combina automaticamente os estágios $lookup e $unwind quando eles operam no mesmo campo, reduzindo o processamento intermediário de dados e melhorando o desempenho.
Example query: //Planner v1 db.orders.aggregate([ { $lookup: { from: "products", localField: "productId", foreignField: "_id", as: "productInfo" } }, { $unwind: "$productInfo" }, { $project: { orderDate: 1, "productInfo.name": 1, "productInfo.price": 1 } } ]) // Planner version 3.0 optimizes this internally by coalescing the $lookup and $unwind stagesA versão 3.0 do Planner apresenta uma nova estratégia de execução do Distinct Scan que melhora significativamente o desempenho de operações distintas em índices de baixa cardinalidade.
Example query: //// If there is a low cardinality index on "category", you may see a query plan like below db.explain().products.distinct("category") "queryPlanner" : { "plannerVersion" : 3, "namespace" : "db.products", "winningPlan" : { "stage" : "AGGREGATE", "inputStage" : { "stage" : "DISTINCT_SCAN", "inputStage" : { "stage" : "IXONLYSCAN", "indexName" : "category_1", "direction" : "forward" } } } }
Planejar filtros de cache
A versão 3.0 do Planner suporta filtros de cache de plano, também chamados de filtros de índice, que permitem restringir o conjunto de índices que o planejador considera para uma forma de consulta específica. Os filtros são definidos com um comando de banco de dados e aplicados no servidor. Portanto, se você tiver uma regressão de consulta, poderá atenuá-la sem modificar o código do aplicativo.
A versão 3.0 do Planner aplica filtros de cache do plano a mais comandos do que a versão 2.0 do planejador:
O
distinctcomando requer a versão 3.0 do planejador.O
aggregatecomando exige a versão 3.0 do planejador e o Amazon DocumentDB 8.0.2. Um filtro se aplica quando o pipeline lê a coleção em um$matchestágio inicial.Um filtro definido na coleção externa de um
$graphLookupestágio$lookupou conduz o índice usado para escanear essa coleção externa. Isso também requer a versão 3.0 do planejador e o Amazon DocumentDB 8.0.2.
Para obter mais informações sobre a referência do comando, formas de consulta suportadas, exemplos resolvidos e como os filtros interagem com as dicas, consultePlanejar filtros de cache.
Possíveis diferenças de comportamento entre o planejador versão 1.0, 3.0 e o MongoDB
Em alguns casos extremos, é possível que a versão 3.0 do planejador produza resultados ligeiramente diferentes da versão 1.0 do planejador. Esta seção mostra alguns exemplos dessas possibilidades.