我使用的MongoDB 3.2和具有90百萬的數據集的大小,其中該文件結構由以下組成:將要執行慢一系列基於查詢中的MongoDB
_id
eventReceivedDateTime(Date)
systemName(String)
triggerName(String)
eventStatus (Enum with 4 possible values)
查詢是:
1)範圍
db.event_record.find({
"eventStatus": "SENT",
"eventReceivedDateTime": {
"$gt": ISODate("2016-04-19T23:46:30.827Z"),
"$lt": ISODate("2016-04-21T14:18:30.827Z")
}
}).count();
2)涉及一系列基於查詢:涉及eventStatus
& eventReceivedDateTime
如基於查詢& eventReceivedDateTime
和_id
並涉及排序。 (對於分頁),如:
db.event_record.find({
"eventStatus": "SENT",
"eventReceivedDateTime": {
"$gt": ISODate("2016-04-19T23:46:30.827Z"),
"$lt": ISODate("2016-04-21T07:18:30.827Z")
},
"_id": {
"$gt": ObjectId("57173a67e4b09ca56feddddf")
}
}).sort({"_id":1}).limit(10);
3)一系列基於查詢涉及eventStatus
,eventReceivedDateTime
,systemName
和triggerName
等:
db.event_record.find({
"eventStatus":"SENT",
"eventReceivedDateTime": {
"$gt": ISODate("2016-04-19T23:46:30.827Z"),
"$lt": ISODate("2016-04-21T07:18:30.827Z")
},
"systemName": "OMS",
"triggerName": "COD_ORDER"
}).count();
4)一系列基於查詢涉及eventStatus
,eventReceivedDateTime
,systemName
,triggerName
和_id
並涉及排序。 (用於分頁),如:
db.event_record.find({
"eventStatus": "SENT",
"eventReceivedDateTime": {
"$gt": ISODate("2016-04-19T23:46:30.827Z"),
"$lt": ISODate("2016-04-21T07:18:30.827Z")
},
"systemName": "OMS",
"triggerName": "COD_ORDER",
"_id": {
"$gt":ObjectId("57173a67e4b09ca56feddcd6")
}
}).sort({"_id":1}).limit(10);
每天大約有300萬份文檔將被插入和刪除。
我已在由下列化合物索引:
{'eventStatus':1,'eventReceivedDateTime':1,'_id':1}
{'eventStatus':1,'systemName':1,'triggerName':1,'eventReceivedDateTime':1}
{'eventStatus':1,'systemName':1,'triggerName':1,'eventReceivedDateTime':1,'_id':1}
我使用同一臺機器上3個碎片實例與shardkey:
{'eventStatus':1,'eventReceivedDateTime':1}
利用這些構造,我正在緩慢結果用於上述查詢。請建議如何優化/改善查詢時間。
編輯:
碎片機規格:
Cores: 32
RAM: 128g
HD: 160G
存儲引擎是wiredTiger
解釋()的查詢可以在這個link找到。 「shard0000」, 「的connectionString」:
在這種情況下
1.你能告訴我們解釋執行統計轉儲'db.col.query。解釋(「executionStats」)'2.你有什麼樣的硬件/系統規格? 3.什麼存儲引擎正在使用? – profesor79
@ profesor79我已添加信息。 – user1691461
還有一個問題,處理器時鐘是什麼? – profesor79