MongoDB 查询计划缓存方法
一、db.collection.getPlanCache()
使用集合的getPlanCache对象允许您访问此方法。我们需要使用 db.collection.getPlanCache() 方法来检索计划缓存对象。该方法返回一个已经用于集合访问查询计划缓存的接口,并提供了查看和清除查询计划缓存的方法。
查询形状可以由具有多个可实施计划的查询优化器缓存。
通过接口可以使用以下方法:
PlanCache.help:此方法可通过指定集合的计划缓存对象访问,并显示可用于指定集合的查询计划缓存的方法,即db.collection.getPlanCache().help()。
PlanCache.listQueryShapes():该方法可通过指定集合的计划缓存对象访问,并显示缓存查询计划存在的查询形状,即db.collection.getPlanCache().listQueryShapes()。
PlanCache.getPlansByQuery():此方法可通过指定集合的计划缓存对象访问,并显示参数查询形状的缓存查询计划,即 db.collection.getPlanCache().getPlansByQuery()。
PlanCache.clearPlansByQuery():此方法可通过特定集合的计划缓存对象访问,并清除参数查询形状的缓存查询计划。即 db.collection.getPlanCache().clearPlansByQuery()
PlanCache.clear():该方法可通过特定集合的计划缓存对象访问,并清除集合的所有缓存查询计划。即 db.collection.getPlanCache().clear()
二、PlanCache.clear()
clear 方法只能从计划缓存的对象中删除指定集合的所有缓存查询计划。
例如:清除学生集合的缓存。
db.student.getPlanCache().clear()
三、PlanCache.clearPlansByQuery()
此方法清除指定查询形状的缓存查询计划,并可从特定集合的计划缓存对象中获得;
示例:
db.collection.getPlanCache().clearPlansByQuery( <query>, <projection>, <sort> )
参数说明:
- Query document: 该参数是查询形状的查询谓词。谓词的结构和字段名称对形状很重要,而查询谓词中的值无关紧要。
- Projection document: 可选参数,指定排序参数时需要。它可用于与查询形状关联的投影。
如果集合订单具有以下查询:
{
"query" : { "qty" : { "$gt" : 10 } },
"sort" : { "ord_date" : 1 },
"projection" : { },
"queryHash" : "9AAD95BE" // Available starting in MongoDB 4.2
}
以下操作删除为形状缓存的查询计划:
db.orders.getPlanCache().clearPlansByQuery(
{ "qty" : { "$gt" : 10 } },
{ },
{ "ord_date" : 1 }
)
输出结果为:
四、PlanCache.help()
显示可用于查看和修改集合的查询计划缓存的方法。该方法仅适用于特定集合的计划缓存对象;
db.collection.getPlanCache().help()
五、PlanCache.listQueryShapes()
该方法在 4.2 版中已弃用,用于显示存在缓存查询计划的查询形状。如果您使用的是旧版本的 MongoDB,则可以使用此方法。所有查询形状都与查询哈希相关联,以帮助识别具有相同查询形状的慢查询。
语法:
db.collection.getPlanCache().listQueryShapes()
示例:
db.orders.getPlanCache().listQueryShapes()
订单集合具有与查询形状相关联的兑现计划。该方法将返回当前位于缓存中的查询形状数组。
[
{
"query" : { "qty" : { "$gt" : 10 } },
"sort" : { "ord_date" : 1 },
"projection" : { },
"queryHash" : "9AAD95BE"
{
"query" : { "$or" :
[
{ "qty" : { "$gt" : 15 }, "item" : "xyz123" },
{ "status" : "A" }
]
},
"sort" : { },
"projection" : { },
"queryHash" : "0A087AD0"
},
{
"query" : { "$or" : [ { "qty" : { "$gt" : 15 } }, { "status" : "A" } ] },
"sort" : { },
"projection" : { },
"queryHash" : "DA43B020"
}
]
热门文章
优秀文章