Mongodb

所有查詢的 MongoDb 最大超時

  • September 8, 2017

我在 Linux 伺服器上使用 MongoDb/PHP。問題是,如果查詢執行時間過長,mongo 伺服器就會停止(apache 繼續執行)。那麼有什麼辦法可以限制查詢的執行時間,並像 php-max 執行時間一樣自動終止程序?

直到現在我發現:

  1. socketTimeoutMS,但我發現了一些地方,它不會殺死程序。
  2. cursor.maxTimeMS(),但我必須為每個查詢定義它。

那麼任何人都可以建議我應該遵循哪種方法,以便

  1. 如果需要更多時間,查詢會自動終止,
  2. 我不需要更改每個查詢。

在 MongoDB 3.4 中,該$maxTimeMS值是一個游標選項,需要由發出請求的客戶端/驅動程序設置。

目前沒有等效的伺服器配置指令,但在 MongoDB 問題跟踪器中有一個相關的功能請求來觀看/投票:SERVER-13775: maxTimeMS on an instance/database level

對於伺服器級預設值,有一些潛在的警告需要考慮$maxTimeMS

  • 對於有意長時間執行查詢執行時間的案例,這將是一個破壞性的行為更改。例如,mongodump必須更新備份工具,以明確設置 no-MaxTimeMS 選項或處理意外提前終止。
  • $maxTimeMS適用於查詢執行的累積時間(包括同一游標的多批結果),因此對於返回較大數量/大小結果的查詢,此選項可能會產生意外結果。

通常,您的應用程序將有更多關於可以終止查詢的上下文,因此我懷疑更適合的是添加為$maxTimeMS每個經過身份驗證的使用者/角色設置預設值的能力。目前最接近的相關功能建議是SERVER-15072: Limit resource usage for certain users

引用自:https://dba.stackexchange.com/questions/152706