Производительность монго

Наш тестовый инструмент создает n потоков и выполняет m итераций внутри каждого потока. Рассчитываем минимальное, среднее и максимальное время работы. Итак, мы видим, что время от времени монго выполняет запрос очень медленно - до нескольких секунд. Также каждый раз, когда первая операция самая медленная, мы даже намеренно исключаем ее из статистики, и все равно разница между avg и max огромна. Это нормально? Могу ли я устранить эти медленные операции? Почему монго выполняет некоторые запросы очень медленно?

Ниже приведены результаты для режима одиночных операций и режима смешанного режима, когда мы одновременно запускаем тесты для вставки/получения/удаления/обновления. В смешанном режиме thread=1 означает, что мы создали 4 потока, по одному для каждого типа теста Тест производительности Mongo

Мы использовали значение по умолчанию — 100 подключений на хост.

Источник

public void storeMt(MyTestObject myTestObject) {
    mongoTemplate.insert(myTestObject );
  }

  public MyTestObject getMt(long id) {
    MyTestObject result = mongoTemplate.findById(id, MyTestObject.class);
    return result;
  }


@Document
public class MyTestObject implements Serializable {

  private static final long serialVersionUID = 1L;
  @Id
  private long id;
//class contains 20+ fields
.......

person Diyko    schedule 25.12.2013    source источник
comment
Вы написали точно такой же тест, на который ссылались? Их код выполняет большие пакетные вставки, которые должны работать очень хорошо. Что еще более важно, каков ваш вопрос?   -  person WiredPrairie    schedule 25.12.2013
comment
Вообще-то, нет. Мой код написан на java, я создал много потоков и вставлял документы один за другим. Но все же думаю производительность должна быть намного лучше и без задержек до 10 секунд на какую-то случайную операцию. Это нормально или нет? возможно, мне нужно правильно настроить mongodb   -  person Diyko    schedule 25.12.2013
comment
Если вы собираетесь сравнивать производительность, вам нужно будет выполнять одни и те же операции. Без более подробной информации о конфигурации, оборудовании, сети и т. д. трудно сказать, имеет ли смысл получать #s.   -  person WiredPrairie    schedule 26.12.2013
comment
Хорошо, ты прав. Забудьте о сравнении. Я только что сделал тест и вижу, что некоторые операции были очень медленными. Это нормально? Я только что установил mongodb без какой-либо конкретной конфигурации   -  person Diyko    schedule 26.12.2013
comment
Там не так много для конфигурации. Это все задокументировано. Вам нужно поставить его на быстрые диски, дать ему достаточно памяти для вашего рабочего набора, настроить сеть и т.д.   -  person WiredPrairie    schedule 26.12.2013
comment
Хорошо, спасибо. Мы проверим производительность на тестовой версии с 32Gb RAM.   -  person Diyko    schedule 26.12.2013
comment
Вам нужно прочитать это: docs.mongodb.org/manual/core/write -performance (и страницы, на которые он ссылается), если вы еще этого не сделали.   -  person WiredPrairie    schedule 26.12.2013
comment
хорошо, но как насчет выбора? у него такая же проблема   -  person Diyko    schedule 16.01.2014


Ответы (2)


Я вижу несколько причин, почему это может происходить.

  1. Это не из-за mongoDB, это может быть из-за процесса java. Вначале требуется время для запуска и загрузки (выделения памяти) соответствующих переменных в памяти.
  2. Используйте MMS, инструмент мониторинга для MongoDB, чтобы увидеть, не является ли база данных узким местом. Вы можете проверить блокировки базы данных, использование сети, использование памяти.
  3. MongoDB получает блокировку на уровне базы данных для текущей версии. И поэтому, если ваш запрос обращается к одной и той же базе данных (другой или той же коллекции одной базы данных), это может замедлить работу.
  4. Кроме того, добавление большего количества потоков не обязательно увеличивает производительность. Это может снизить производительность из-за дополнительной нагрузки на ЦП, память (ОЗУ) и т. д. Поэтому я предлагаю увеличить количество потоков после частого интервала, а затем посмотреть, когда производительность перестанет улучшаться.

Я уверен, что если вы сделаете это, вы узнаете точную причину, почему он замедляется.

Ваше здоровье!

person Kaushal    schedule 09.03.2015

Я думаю, что это ожидаемое поведение: всякий раз, когда выполняется запрос, (выигрышный) план запроса кэшируется для дальнейшего поиска.

Этот кеш запросов также сбрасывается снова и снова, поэтому иногда это занимает больше времени.

В вашем случае какой-то запрос кажется дорогостоящим, я думаю, вам нужно идентифицировать эти запросы и принять меры для повышения производительности. Если это запрос на чтение, возможно, потребуется (составной) индекс.

Если это запрос на запись, потребуется дальнейший анализ, что это за коллекция? какие у него индексы и сколько документов?

Подробнее об кешировании планов запросов

person Rahul Kumar    schedule 20.09.2016