Mongodb 在更强大的服务器上速度较慢。这是怎么回事?

Mongodb 在更强大的服务器上速度较慢。这是怎么回事?

我今天想迁移我们的服务器,但我无法迁移,因为在新的(更大的)服务器上,MongoDB 对于特定集合的运行速度非常慢。首先,以下是规格。

旧服务器:

Digital Ocean 80$ Instance
RAM: 4GB
vCPUs: 4 (I can't find the GHZ)

新服务器:

Switch Engines c1.large Instance
RAM: 8GB
vCPUs: 8 (again, I can't find the GHZ)

两台服务器都有足够的 SSD 空间。

在新服务器上我得到: 在此处输入图片描述

当我从这个特定集合中检索文档时。之后,mongodb 仍然占用 43% 的内存。在旧服务器上,mongo 始终使用大约 8% 的内存,当我从有问题的集合中请求文档时,没有出现 CPU 峰值。

我正在做的事情是从集合中检索东西:

Iterator<CompilerCacheEntry> found = ds()
        .find(CompilerCacheEntry.class).filter("hash", hash)

while (found.hasNext()) {...

ds源自哪里org.mongodb.morphia.Datastore;,过滤器的实现如下:

public Query<T> filter(String condition, Object value) {
    String[] parts = condition.trim().split(" ");
    if(parts.length >= 1 && parts.length <= 6) {
        String prop = parts[0].trim();
        FilterOperator op = parts.length == 2?this.translate(parts[1]):FilterOperator.EQUAL;
        this.add(new Criteria[]{new FieldCriteria(this, prop, op, value, this.validateName, this.validateType)});
        return this;
    } else {
        throw new IllegalArgumentException("\'" + condition + "\' is not a legal filter condition");
    }
}

同样令人好奇的是,迁移之前的 mongodb 是 30GB,现在只有 3GB,但据我了解,这只是因为 mongo 在迁移时进行了清理。

所以我留下了普遍的困惑和一些疑问:

  • 为什么在更强大的机器上 mongo 反而更慢呢?
  • 为什么mongo占用了43%的内存?
  • 看起来 mongo 只使用了一个 CPU,这可能是问题所在吗?
  • 这个问题与内存有关还是与 CPU 有关,或者都与这些无关?
  • mongo 和我的程序分别存在什么问题?为什么 mongo 检索此对象如此困难?
  • 我的收藏是不是太大了,超出了我的内存?

以下是部分收藏统计数据,供参考:

>db.compilercache.stats()
{
    "ns" : "taskbase.compilercache",
    "count" : 21191,
    "size" : 4592895563,
    "avgObjSize" : 216738,
    "storageSize" : 1814052864,
    "capped" : false,

如果您需要更多信息,请告诉我。提前谢谢!

相关内容