定義
db.setProfilingLevel(level, options)バージョン5.0で変更。
mongodインスタンスの場合、メソッドはデータベースプロファイラーを有効化、無効化、または構成します。プロファイラーは、実行中のmongodインスタンスでの書き込み操作、カーソル、およびデータベースコマンドのパフォーマンスに関するデータをキャプチャして記録します。プロファイラーが無効の場合、このメソッドは、低速操作を診断ログに記録する方法を構成します。注意
db.setProfilingLevel()でプロファイリング レベルに加えられた変更は保持されません。サーバーを再起動すると、0(デフォルト)、またはoperationProfiling.mode設定もしくは--profileコマンドライン オプションで設定された値に戻ります。データベースプロファイラレベルが
1または2の場合(具体的には、データベースプロファイラが有効になっている場合)、 slowms と sampleRate はプロファイラーとdiagnostic logの両方の動作に影響します。データベースプロファイラレベルが
0(具体的には、データベースプロファイラが無効)の場合、 slowms と sampleRate は 診断ログのみに影響します。mongosインスタンスでは、このメソッドはslowmsの設定、sampleRateの設定、およびfilter構成設定を行い、操作を診断ログに書き込む方法を構成します。mongosにはプロファイラーが書き込みできるコレクションがないため、mongosインスタンスでデータベースプロファイラーを有効にすることはできません。mongosインスタンスのprofileレベルは0である必要があります。mongodインスタンスとmongosインスタンスの両方に フィルター を指定して、プロファイラーによってログに記録する操作を制御できます。プロファイラーにfilterを指定すると、 slowms オプションおよび sampleRate オプションはプロファイリングおよび低速クエリログ行には使用されません。db.setProfilingLevel()はprofileコマンドのラッパーを提供します。MongoDB5.0 以降では、 コマンドまたは ラッパーメソッドを使用してデータベースプロファイラ
level、slowms、sampleRate、または に加えられた変更は、filterprofiledb.setProfilingLevel()log fileに記録されます。
互換性
このメソッドは、次の環境でホストされている配置で使用できます。
- MongoDB Atlas はクラウドでの MongoDB 配置のための完全管理サービスです
重要
このコマンドは、M0 および Flex クラスターではサポートされていません。詳細については、サポートされていないコマンド を参照してください。
MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン
MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン
構文
db.setProfilingLevel()メソッドの形式は次のとおりです。
db.setProfilingLevel(<level>, <options>)
パラメーター
Parameter | タイプ | 説明 | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
integer | データベースプロファイラーレベルを設定します。次のプロファイラー レベルを使用できます。
プロファイリングは | |||||||||
ドキュメントまたは整数 | 任意。整数または オプションドキュメントを受け入れます。ドキュメントではなく整数値が
|
戻り値
このメソッドは、前の設定値を含むドキュメントを返します。
{ "was" : 2, "slowms" : 100, "sampleRate" : 1, "filter" : { "$and" : [ { "op" : { "$eq" : "query" } }, { "millis" : { "$gt" : 20000 } } ] }, "note" : "When a filter expression is set, slowms and sampleRate are not used for profiling and slow-query log lines.", "ok" : 1 }
{ "was" : 0, "slowms" : 100, "sampleRate" : 1, "filter" : { "$and" : [ { "op" : { "$eq" : "query" } }, { "millis" : { "$gte" : 2000 } } ] }, "note" : "When a filter expression is set, slowms and sampleRate are not used for profiling and slow-query log lines.", "ok" : 1, "$clusterTime" : { "clusterTime" : Timestamp(1572991238, 1), "signature" : { "hash" : BinData(0,"hg6GnlrVhV9MAhwWdeHmHQ4T4qU="), "keyId" : Long("6755945537557495811") } }, "operationTime" : Timestamp(1572991238, 1) }
{ "was" : 0, "slowms" : 100, "sampleRate" : 1, "filter" : { "$and" : [ { "op" : { "$eq" : "query" } }, { "millis" : { "$gte" : 2000 } } ] }, "note" : "When a filter expression is set, slowms and sampleRate are not used for profiling and slow-query log lines.", "ok" : 1, "operationTime" : Timestamp(1572991499, 2), "$clusterTime" : { "clusterTime" : Timestamp(1572991499, 2), "signature" : { "hash" : BinData(0,"nhCquIxUw7thlrBudXe3PnsnvP0="), "keyId" : Long("6755946491040235540") } } }
以下の条件に一致するもの。
wasが、前のレベル設定です。slowmsが、前の slowms 設定です。sampleRateが、前の sampleRate 設定です。filterは、前のフィルター設定です。noteは、filterの動作を説明する文字列です。このフィールドは、filterも存在する場合にのみ出力に表示されます。
注意
filter フィールドと note フィールドは、前のレベル設定に存在していた場合にのみ出力に表示されます。
現在のプロファイリング レベルを表示するには、db.getProfilingStatus() を参照してください。
動作
警告
プロファイリングにより、パフォーマンスが低下し、暗号化されていないクエリ データがシステム ログに公開されることがあります。プロファイラーを本番環境に設定して有効にする前に、パフォーマンスとセキュリティへの影響を慎重に検討してください。
パフォーマンス低下の可能性の詳細については、「プロファイラーのオーバーヘッド」を参照してください。
例
プロファイラーの有効化および低速操作のしきい値とサンプルレートの設定
次の例では、以下の値を mongodインスタンスに設定します。
プロファイリング レベルを
1に設定し、低速操作のしきい値 slowms を
20ミリ秒に設定し、sampleRate を
0.42に設定します。
db.setProfilingLevel(1, { slowms: 20, sampleRate: 0.42 })
この操作は、前の設定値を含むドキュメントを返します。
現在のプロファイリング レベルを表示するには、db.getProfilingStatus() を参照してください。
プロファイラーの無効化および低速操作のしきい値とサンプルレートの設定
次の例では、以下の値を mongod インスタンスまたは mongos インスタンス用に設定します。
プロファイリング レベルを
0に設定し、低速操作のしきい値 slowms を
20ミリ秒に設定し、sampleRate を
0.42に設定します。
db.setProfilingLevel(0, { slowms: 20, sampleRate: 0.42 })
この操作は、前の設定値を含むドキュメントを返します。
現在のプロファイリング レベルを表示するには、db.getProfilingStatus() を参照してください。
プロファイルされた操作を決定するためにフィルターを設定する
次の例では、以下の値を mongodインスタンスに設定します。
プロファイリング レベルを
1に設定し、
db.setProfilingLevel( 1, { filter: { op: "query", millis: { $gt: 2000 } } } )
この操作は、前の設定値を含むドキュメントを返します。
現在のプロファイリング レベルを表示するには、db.getProfilingStatus() を参照してください。
プロファイラーを有効にせずにフィルターを設定する
filterデータベースプロファイラを有効にせずに を設定できます。次の例では、プロファイリング レベルが 0のフィルターを使用します。
db.setProfilingLevel( 0, { filter: { op: "query", millis: { $gt: 2000 } } } )
プロファイリング レベルが 0 のため、プロファイラーは無効になり、プロファイラー コレクションに一致する操作を記録しません。フィルターは、引き続き診断ログに適用されます。
この操作は、前の設定値を含むドキュメントを返します。
現在のプロファイリング レベルを表示するには、db.getProfilingStatus() を参照してください。
フィルターの設定解除
プロファイル フィルターをクリアするには、filter: "unset" オプションを指定して db.setProfilingLevel() を実行します。
db.setProfilingLevel( 1, { filter: "unset" } )
この操作は、前の設定値を含むドキュメントを返します。
現在のプロファイリング レベルを表示するには、db.getProfilingStatus() を参照してください。