Задать вопрос
@Quieteroks
php программист

MongoDB длительное время не отвечает на запрос. В чем может быть причина?

Добрый день.
Длительное время сражаемся с монгой и не можем найти причину возникновения такого поведения.
У нас имеется коллекция (более 16млн записей), большая часть из них привязана к одному клиенту. В определенные дни (не знаю от чего зависит, магнитные бури может) при запросе к данной коллекции и выборке данных за сутки по каждой компании отдельно, происходит длительное получение курсора и как следствие - исключение "Read timed out after reading 0 bytes, waited for 120.000000 seconds.".
Уже перепробовали все, что только можно. Различные составные индексы. Способ выборки данных (перешли от find к aggregateCursor с размером пакета по 50 записей). И все равно, именно на этом клиенте, происходит зависание. Т.е. в процессе выполнения запросов, идет 4-5 запросов удачных, потом ошибка и остальные запросы проходят успешно. Даже отлов ошибки и повторный запрос через 10 минут, не дал результата.
Более того, почему то каждое утро, по данному же клиенту не удается обратиться даже к другой коллекции, так же по индексу. Пока не делаю запрос вручную на explain по данному индексу. Первый такой запрос выполняется долго, потом быстро и база отвисает.

Монго: 3.0.4 на Linux CentOS

Запрос:
'timestamp' => [
    '$gte' => 1482624000,
    '$lte' => 1482710399,
],
'type' => [
    '$in' => ['one', 'two', ...]
],
'client_id' => 215,
'status' => [
    '$ne' => -100
]
  • Вопрос задан
  • 431 просмотр
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Hitsuzen
Если у вас 16 млн. записей, большая часть из которых относится к одному клиенту, то тут всё может ещё зависеть от того, какие поля вы выбираете при запросе. Если выбираемых полей много или они объёмные и при этом по запросу возвращается много документов - по идее запрос может занимать очень много времени, потому курсор и падает по таймауту.
Наверное можно попытаться поиграть с количеством возвращаемых полей, тогда если при уменьшении количества вытаскиваемой информации всё нормализуется, то дело в этом.
Можно попытаться увеличить время тайм-аута курсора. Опять же если при увеличении тайм-аута курсора проблема исчезнет, то дело в количестве данных.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы