$planCacheStats
Nesta página
Definição
$planCacheStats
Retorna informações de cache do plano para uma coleção. O estágio retorna um documento para cada entrada do cache do plano.
O estágio
$planCacheStats
deve ser o primeiro estágio no pipeline. O estágio usa um documento vazio como parâmetro e tem a seguinte sintaxe:{ $planCacheStats: { } }
Dica
Veja também:
Considerações
Pipeline
$planCacheStats
deve ser o primeiro estágio em um pipeline de agregação.
Restrições
Controle de acesso
Em sistemas executados com authorization
, o usuário deve ter o privilégio planCacheRead
para a collection.
Redação
Ao usar a Queryable Encryption, o estágio $planCacheStats
omite as operações em collections criptografadas, mesmo que as operações sejam armazenadas em cache normalmente.
readPreference
$planCacheStats
observa a preferência de leitura ao selecionar o(s) host(s) do qual retornar as informações do cache do plano.
Os aplicativos podem ter como alvo diferentes nós de um conjunto de réplicas. Dessa forma, cada membro do conjunto de réplicas pode receber comandos de leitura diferentes e ter informações de cache do plano diferentes de outros membros. No entanto, executar o $planCacheStats
em um conjunto de réplica ou um cluster fragmentado obedece as regras normais de preferência de leitura. Ou seja, em um conjunto de réplicas, a operação coleta informações de cache do plano de apenas um membro do conjunto de réplicas e, em um cluster fragmentado, a operação coleta informações de cache do plano de apenas um membro de cada conjunto de réplicas de shard.
Saída
Alterado na versão 7.0.
O resultado de $planCacheStats
depende do mecanismo de query utilizado para completar a query. O valor do campo version
do $planCacheStats
indica qual mecanismo de query foi usado:
1
indica que o mecanismo clássico foi usado.2
indica que o mecanismo de execução de query baseado em slot foi usado.
Exemplos
Os exemplos nesta seção usam a seguinte coleção orders
:
db.orders.insertMany( [ { "_id" : 1, "item" : "abc", "price" : NumberDecimal("12"), "quantity" : 2, "type": "apparel" }, { "_id" : 2, "item" : "jkl", "price" : NumberDecimal("20"), "quantity" : 1, "type": "electronics" }, { "_id" : 3, "item" : "abc", "price" : NumberDecimal("10"), "quantity" : 5, "type": "apparel" }, { "_id" : 4, "item" : "abc", "price" : NumberDecimal("8"), "quantity" : 10, "type": "apparel" }, { "_id" : 5, "item" : "jkl", "price" : NumberDecimal("15"), "quantity" : 15, "type": "electronics" } ] )
Crie os seguintes índices na coleção:
db.orders.createIndex( { item: 1 } ); db.orders.createIndex( { item: 1, quantity: 1 } ); db.orders.createIndex( { quantity: 1 } ); db.orders.createIndex( { quantity: 1, type: 1 } ); db.orders.createIndex( { item: 1, price: 1 }, { partialFilterExpression: { price: { $gte: NumberDecimal("10")} } } );
Observação
O índice { item: 1, price: 1 }
é um índice parcial e indexa apenas documentos com o campo price
maior ou igual a NumberDecimal("10")
.
Execute algumas consultas em relação à coleção:
db.orders.find( { item: "abc", price: { $gte: NumberDecimal("10") } } ) db.orders.find( { item: "abc", price: { $gte: NumberDecimal("5") } } ) db.orders.find( { quantity: { $gte: 20 } } ) db.orders.find( { quantity: { $gte: 5 }, type: "apparel" } )
As queries anteriores são concluídas usando o mecanismo de execução de query baseado em slot.
Retornar informações para todas as entradas no cache de query
O seguinte pipeline de agregação utiliza o $planCacheStats
para retornar informações sobre as entradas de cache do plano para a coleção:
db.orders.aggregate( [ { $planCacheStats: { } } ] )
Saída:
[ { // Plan Cache Entry 1 version: '2', queryHash: '478AD696', planCacheKey: '21AE23AD', isActive: true, works: Long("7"), timeOfCreation: ISODate("2023-05-22T20:33:49.031Z"), cachedPlan: { ... }, indexFilterSet: false, isPinned: false, estimatedSizeBytes: Long("8194"), host: 'mongodb1.example.net:27018' }, { // Plan Cache Entry 2 version: '2', queryHash: '3D8AFDC6', planCacheKey: '1C2C4360', isActive: true, works: Long("6"), timeOfCreation: ISODate("2023-05-22T20:33:50.584Z"), cachedPlan: { ... }, indexFilterSet: false, isPinned: false, estimatedSizeBytes: Long("11547"), host: 'mongodb1.example.net:27018' }, { // Plan Cache Entry 3 version: '2', queryHash: '27285F9B', planCacheKey: '20BB9404', isActive: true, works: Long("1"), timeOfCreation: ISODate("2023-05-22T20:33:49.051Z"), cachedPlan: { ... }, indexFilterSet: false, isPinned: false, estimatedSizeBytes: Long("7406"), host: 'mongodb1.example.net:27018' }, { // Plan Cache Entry 4 version: '2', queryHash: '478AD696', planCacheKey: 'B1435201', isActive: true, works: Long("5"), timeOfCreation: ISODate("2023-05-22T20:33:49.009Z"), cachedPlan: { ... }, indexFilterSet: false, isPinned: false, estimatedSizeBytes: Long("7415"), host: 'mongodb1.example.net:27018' } ],
Consulte também planCacheKey
.
Encontrar detalhes de entrada de cache para um hash de query
Para retornar informações do cache do plano para um hash de query específico, o estágio $planCacheStats
pode ser seguido por um $match
no campo planCacheKey
.
O pipeline de agregação a seguir usa $planCacheStats
seguido de um estágio $match
para retornar informações específicas para um hash de query específico:
db.orders.aggregate( [ { $planCacheStats: { } }, { $match: { planCacheKey: "B1435201"} } ] )
Saída:
[ { version: '2', queryHash: '478AD696', planCacheKey: 'B1435201', isActive: true, works: Long("5"), timeOfCreation: ISODate("2023-05-22T20:33:49.009Z"), cachedPlan: { slots: '$$RESULT=s11 env: { s3 = 1684787629009 (NOW), s6 = Nothing, s5 = Nothing, s1 = TimeZoneDatabase(Asia/Kuwait...Etc/UCT) (timeZoneDB), s10 = {"item" : 1, "price" : 1}, s2 = Nothing (SEARCH_META) }', stages: '[2] nlj inner [] [s4, s7, s8, s9, s10] \n' + ' left \n' + ' [1] cfilter {(exists(s5) && exists(s6))} \n' + ' [1] ixseek s5 s6 s9 s4 s7 s8 [] @"358822b7-c129-47b7-ad7f-40017a51b03c" @"item_1_price_1" true \n' + ' right \n' + ' [2] limit 1 \n' + ' [2] seek s4 s11 s12 s7 s8 s9 s10 none none [] @"358822b7-c129-47b7-ad7f-40017a51b03c" true false \n' }, indexFilterSet: false, isPinned: false, estimatedSizeBytes: Long("7415"), host: 'mongodb1.example.net:27018' } ]
Consulte também planCacheKey
e queryHash
.