Mongodb
所有查詢的 MongoDb 最大超時
我在 Linux 伺服器上使用 MongoDb/PHP。問題是,如果查詢執行時間過長,mongo 伺服器就會停止(apache 繼續執行)。那麼有什麼辦法可以限制查詢的執行時間,並像 php-max 執行時間一樣自動終止程序?
直到現在我發現:
socketTimeoutMS
,但我發現了一些地方,它不會殺死程序。- cursor.maxTimeMS(),但我必須為每個查詢定義它。
那麼任何人都可以建議我應該遵循哪種方法,以便
- 如果需要更多時間,查詢會自動終止,
- 我不需要更改每個查詢。
在 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。