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"  
  }  
] 

热门文章

优秀文章