我们遇到聚合查询运行很长时间(几分钟)的问题.
我们收集了2.5亿份文档,每个文档大约有20个字段,集合的总大小为110GB.
我们有"our_id"和dtKey字段的索引.
24GB RAM(6*4GB DIMMS 1333 Mhz)
磁盘:Lvm 11TB由4个3TB磁盘盘构成:
600MB/s的最大瞬时数据传输.
7200 RPM主轴.平均延迟= 4.16ms
2*E5-2420 0 @ 1.90GHz共12个内核,24个线程.戴尔R420.
问题:我们正在尝试进行以下聚合查询:
db.our_collection.aggregate(
[
{
"$match":
{
"$and":
[
{"dtKey":{"$gte":20140916}},
{"dtKey":{"$lt":20141217}},
{"our_id":"111111111"}
]
}
},
{
"$project":
{
"field1":1,
"date":1
}
},
{
"$group":
{
"_id":
{
"day":{"$dayOfYear":"$date"},
"year":{"$year":"$date"}
},
"field1":{"$sum":"$field1"}
}
}
]
);
Run Code Online (Sandbox Code Playgroud)
此查询需要几分钟才能运行,当它运行时我们可以看到以下内容:
完成此查询后,它似乎在缓存中,这可以在瞬间完成,
在为3-4个用户运行它之后,似乎第一个已经从缓存中换出,并且查询需要很长时间.
我们测试了匹配部分的计数,看到我们有50K文档的用户以及500K文档的用户,
我们试图只获得匹配的部分:
db.pub_stats.aggregate(
[
{
"$match":
{
"$and":
[
{"dtKey":{"$gte":20140916}},
{"dtKey":{"$lt":20141217}},
{" our_id ":"112162107"}
]
} …Run Code Online (Sandbox Code Playgroud)