Как найти статистику индекса MongoDB

8

Можно ли как-то выяснить, какие все индексы кэшируются в ОЗУ? Я хочу знать статистику по отдельным страницам (количество попаданий и промахов)

Вишаха дипак
источник

Ответы:

9

Вы можете получить информацию об общем попадании (в пределах экземпляра) из db.serverStatus()команды, в частности:

http://docs.mongodb.org/manual/reference/command/serverStatus/#serverStatus.indexCounters.hits http://docs.mongodb.org/manual/reference/command/serverStatus/#serverStatus.indexCounters.misses

Эти цифры являются итоговыми значениями, наблюдаемыми за время существования процесса, поэтому, если вы хотите получить показатель или увидеть тренд с течением времени, вам нужно будет периодически их записывать и соответствующим образом изменять значения. К счастью, если вы установите MMS-мониторинг , он сделает это за вас и отобразит результаты.

Однако в настоящее время нет статистики по индексу. Соответствующий запрос функции можно найти здесь для отслеживания и голосования:

https://jira.mongodb.org/browse/SERVER-2227

Обновление: январь 2016

Статистика, указанная выше, была удалена из выходных данных команды состояния сервера, поэтому больше не доступна. Однако ссылочный запрос функции теперь завершен и доступен в версии 3.2 в форме $indexStatsоператора агрегирования (связанные документы также содержат пример выходных данных). Для полноты вот пример, который я собрал:

До любых запросов у меня есть только 2 индекса, по умолчанию _idи indexmeоба с 0 ops:

> db.foo.aggregate( [ { $indexStats: { } } ] ).pretty()
{
    "name" : "indexme_1",
    "key" : {
        "indexme" : 1
    },
    "host" : "localhost:27017",
    "accesses" : {
        "ops" : NumberLong(0),
        "since" : ISODate("2016-01-12T19:03:01.358Z")
    }
}
{
    "name" : "_id_",
    "key" : {
        "_id" : 1
    },
    "host" : "localhost:27017",
    "accesses" : {
        "ops" : NumberLong(0),
        "since" : ISODate("2016-01-12T18:59:24.292Z")
    }
}

Затем запустите пару находок, чтобы активировать операции indexmeи проверьте еще раз:

> db.timecheck.find({indexme: 33})
> db.timecheck.find({indexme: 55})

> db.timecheck.aggregate( [ { $indexStats: { } } ] ).pretty()
{
    "name" : "indexme_1",
    "key" : {
        "indexme" : 1
    },
    "host" : "localhost:27017",
    "accesses" : {
        "ops" : NumberLong(2),
        "since" : ISODate("2016-01-12T19:03:01.358Z")
    }
}
{
    "name" : "_id_",
    "key" : {
        "_id" : 1
    },
    "host" : "localhost:27017",
    "accesses" : {
        "ops" : NumberLong(0),
        "since" : ISODate("2016-01-12T18:59:24.292Z")
    }
}
Адам С
источник
из документов: «Изменено в версии 3.0: вывод состояния сервера больше не включает разделы workingSet, indexCounters и recordStats». Есть еще идеи?
Серв-ин