db.setProfilingLevel()
項目一覧
定義
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
コマンドのラッパーを提供します。MongoDB 5.0以降では、
profile
コマンドまたはdb.setProfilingLevel()
ラッパー メソッドを使用してデータベースプロファイラーlevel
、slowms
、sampleRate
、またはfilter
に加えられた変更は、log file
に記録されます。
構文
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" : NumberLong("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" : NumberLong("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
に設定し、{ op: "query", millis: { $gt: 2000 } }
のフィルター。これにより、プロファイラーは、 2秒以上かかったquery
操作のみを記録します。
db.setProfilingLevel( 1, { filter: { op: "query", millis: { $gt: 2000 } } } )
この操作は、前の設定値を含むドキュメントを返します。
現在のプロファイリング レベルを表示するには、db.getProfilingStatus()
を参照してください。
フィルターの設定解除
プロファイル フィルターをクリアするには、filter: "unset"
オプションを指定して db.setProfilingLevel()
を実行します。
db.setProfilingLevel( 1, { filter: "unset" } )
この操作は、前の設定値を含むドキュメントを返します。
現在のプロファイリング レベルを表示するには、db.getProfilingStatus()
を参照してください。