Как найти запросы, время ожидания которых истекло в MongoDB?

dba.stackexchange https://dba.stackexchange.com/questions/108659

Вопрос

Можно ли найти запросы в system.profile-Сбор базы данных MongoDB, который не завершился из-за таймаута?

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

db.coll.find(
  { millis: {$gt: 1300}, "command.maxTimeMS": NumberLong(1300) },
  {millis: 1}
).sort(
  {millis: -1}
)

Но они бегали всего на пару миллисекунд дольше, и не имели поля error или timeout. Есть ли поля, указывающие тайм-аут?

Это было полезно?

Решение

На довольно большом наборе данных я протестировал запрос, время ожидания которого истекает через 10 секунд:

db.collection.find({"foo": "bar"}).maxTimeMS(10000)

(В моем случае коллекция имеет > 100 GB данных и нет индекса в поле foo).Я искал запрос, используя:

db.system.profile.find({"query.query" : { "foo" : "bar" }}).limit(5).sort({ts: -1}).pretty()

и обнаружил, что поля exception и exceptionCode заполнены:

"exception" : "operation exceeded time limit",
"exceptionCode" : 50,

Итак, ищем поле exception должен дать вам желаемый результат:

db.system.profile.find({ "exception" : { "$exists" : 1 } }).limit(5).sort({ts: -1}).pretty()

И если вы явно ищете запросы, время ожидания которых истекло, попробуйте:

db.system.profile.find( {"exceptionCode": 50} ).sort( {ts: -1} ).pretty()

Другие советы

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

1) Должен быть внутренний процесс, который периодически проверяет, чтобы вы получали накладные расходы на интервал проверки (например, каждые 1 мс).

2) MongoDB завершает операции, превышающие отведенный им лимит времени, используя тот же механизм, что и db.killOp().MongoDB завершает операцию только в одной из назначенных точек прерывания.Чтобы достичь точки прерывания, может потребоваться несколько миллис.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с dba.stackexchange
scroll top