Назад | Перейти на главную страницу

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% памяти, и при запросе документов из проблемной коллекции нет скачков ЦП.

Что я делаю для извлечения вещей из коллекции:

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 до миграции составлял 30 ГБ, а теперь - 3 ГБ, но я читал, что это только потому, что mongo очищается при миграции.

Итак, у меня осталось общее замешательство и несколько вопросов:

Вот части статистики коллекции для справки:

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

Если вам нужна дополнительная информация, дайте мне знать. Заранее большое спасибо!