慢一系列基于查询中的MongoDB
问题描述:
我使用的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”:
在这种情况下
答
为你一个系统
“shardName” 上运行的所有碎片 “本地主机:27012”,
“shardName”:“shard0001 ”, “的connectionString”: “本地主机:27013”,
“shardName”: “shard0002”, “的connectionString”: “本地主机:27014”,
它会更好避免使用分片,因为他们正在争夺系统资源。
1.你能告诉我们解释执行统计转储'db.col.query。解释(“executionStats”)'2.你有什么样的硬件/系统规格? 3.什么存储引擎正在使用? – profesor79
@ profesor79我已添加信息。 – user1691461
还有一个问题,处理器时钟是什么? – profesor79