문제

검색어를 검색에서 찾을 수 있나요? 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) 주기적으로 체크인하여 체크 간격 오버 헤드 (예 : 1ms마다)를 얻을 수있는 내부 프로세스가 있어야합니다

2) MongoDB는 DB.Killop ()과 동일한 메커니즘을 사용하여 할당 된 시간 제한을 초과하는 작업을 종료합니다.MongoDB는 지정된 인터럽트 포인트 중 하나에서만 작업을 종료합니다.인터럽트 지점에 도달하려면 밀리스가 거의 없을 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 dba.stackexchange
scroll top