web-dev-qa-db-ja.com

すべてのクエリのMongoDb最大タイムアウト

LinuxサーバーでMongoDb/PHPを使用しています。問題は、クエリの実行に時間がかかりすぎると、mongoサーバーが停止することです(Apacheは実行を続けます)。だから、クエリを実行する時間を制限し、php-max実行時間のようにプロセスを自動的に強制終了できるようにする方法はありますか?

今まで私は見つけました:

  1. socketTimeoutMSですが、プロセスを強制終了しない場所がいくつか見つかりました。
  2. cursor.maxTimeMS() ですが、クエリごとに定義する必要があります。

だから誰も私が従うべきアプローチを提案してください

  1. クエリは自動的に強制終了されます。時間がかかる場合は、
  2. すべてのクエリを変更する必要はありません。
2
Mohd Qasim

MongoDB 3.4と同様に、$maxTimeMS値は、要求を行うクライアント/ドライバーが設定する必要があるカーソルオプションです。

現在、同等のサーバー構成ディレクティブはありませんが、MongoDBの課題追跡で監視/投票する関連機能のリクエストがあります: SERVER-13775:インスタンス/データベースレベルのmaxTimeMS

サーバーレベルのデフォルト$maxTimeMSについて検討する必要があるいくつかの潜在的な注意事項があります。

  • これは、意図的に長時間実行されるクエリ実行時間があるユースケースの重大な動作変更です。たとえば、mongodumpなどのバックアップツールは、明示的にno-MaxTimeMSオプションを設定するか、予期しない早期終了を処理するように更新する必要があります。
  • $maxTimeMSはクエリ実行の累積時間(同じカーソルの結果の複数のバッチを含む)に適用されるため、このオプションは、より多くの数/サイズの結果を返すクエリで予期しない結果になる可能性があります。

一般に、アプリケーションにはクエリを終了できるコンテキストが多くなるため、より厳密に適合させるには、認証されたユーザー/ロールごとにデフォルト$maxTimeMSを設定する機能を追加することになると思います。最も近い関連機能の提案は現在 SERVER-15072:特定のユーザーのリソース使用を制限する です。

2
Stennie