mongodb執行計劃解釋

kunlunzhiying發表於2018-08-30

====Mongodb 併發批次kill session =============


併發、批次kill session

1、將查詢時間超過1000s的所有session kill掉

db.currentOp().inprog.forEach(function(item){if(item.secs_running > 1000 && item.op == "query")db.killOp(item.opid)})


2、將所有包含集合jack.bear查詢kill掉

db.currentOp().inprog.forEach(function(item){if(item.ns == "jack.bear" && item.op == "query")db.killOp(item.opid)})


3、將滿足item.op=="query" && item.secs_running >60 && item.ns=="jack.bear"這3個條件的操作kill掉

db.currentOp().inprog.forEach(function(item){if(item.waitingForLock){var lock_info = item["opid"];if(item.op=="query" && item.secs_running >60 && item.ns=="cswuyg.cswuyg"){db.killOp(item.opid)}}})


4、將滿足item.op == "query" && item.secs_running > 1000這2個條件的操作kill掉

db.currentOp().inprog.forEach(function(item) {

 var lock_info = item["opid"];

 if (item.op == "query" && item.secs_running > 1000) {

  print("kill", item.opid);

  db.killOp(item.opid)

 }

})


################# MongoDB 執行計劃################

Stage 分類

COLLSCAN:掃描整個集合 IXSCAN:索引掃描 FETCH:根據索引去檢索選擇document

SHARD_MERGE:將各個分片返回資料進行merge

SORT:表明在記憶體中進行了排序(與老版本的scanAndOrder:true一致)

LIMIT:使用limit限制返回數

SKIP:使用skip進行跳過 IDHACK:針對_id進行查

SHARDING_FILTER:透過mongos對分片資料進行查詢

COUNT:利用db.coll.explain().count()之類進行count

COUNTSCAN:count不使用用Index進行count時的stage返回

COUNT_SCAN:count使用了Index進行count時的stage返回 SUBPLA:未使用到索引的$or查詢的stage返回

TEXT:使用全文索引進行查詢時候的stage返回 PROJECTION:限定返回欄位時候stage的返回


=========重建索引=======

重建索引:

db.tableName.dropIndex("indexName")

db.tableName.ensureIndex({ "key1" : 1 ,"key2":1},{ "name" : "indexName" },{background:true})


db.COLLECTION_NAME.ensureIndex({"uuid":-1},{background:true})

db.COLLECTION_NAME.getIndexes()

==檢視執行計劃===

db.collection_name.find({}).explain(true)

find{} 裡面要設定具體的查詢條件,才可以查到精確的執行計劃

MongoDB 檢視執行計劃時,最理想狀態:--20180604


nReturned=totalDocsExamined=totalKeysExamined


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28211342/viewspace-2213163/,如需轉載,請註明出處,否則將追究法律責任。

相關文章