Docs Menu
Docs Home
/
MongoDBマニュアル
/ / /

db.setProfilingLevel()

項目一覧

  • 定義
  • 互換性
  • 構文
  • パラメーター
  • 戻り値
  • 動作
  • プロファイラーの有効化および低速操作のしきい値とサンプルレートの設定
  • プロファイラーの無効化および低速操作のしきい値とサンプルレートの設定
  • プロファイルされた操作を決定するためにフィルターを設定する
  • フィルターの設定解除
db.setProfilingLevel(level, options)

バージョン 5.0 での変更

mongodインスタンスの場合、メソッドはデータベースプロファイラを有効化、無効化、または構成します。 プロファイラーは、実行中のmongodインスタンスでの書き込み操作、カーソル、データベースコマンドのパフォーマンスに関するデータをキャプチャして記録します。 プロファイラーが無効の場合、このメソッドは、低速操作を診断ログに記録する方法を構成します。

注意

db.setProfilingLevel() でプロファイリング レベルに加えられた変更は保持されません。サーバーを再起動すると、0(デフォルト)、または operationProfiling.mode 設定もしくは --profile コマンドライン オプションで設定された値に戻ります。

データベースプロファイラ レベル1または2 (具体的には、データベースプロファイラが有効)の場合、 slowmssampleRateはプロファイラーとdiagnostic logの両方の動作に影響します。

データベースプロファイラー レベル0(具体的には、データベースプロファイラーが無効)の場合、slowmssampleRate は診断ログにのみ影響します。

mongosインスタンスでは、このメソッドは slowms の設定、 sampleRate の設定、および filter 構成設定を行い、操作を診断ログに書き込む方法を構成します。mongos にはプロファイラーが書き込みできるコレクションがないため、mongos インスタンスでデータベースプロファイラーを有効にすることはできません。mongosインスタンスの profile レベルは 0 である必要があります。

mongod インスタンスと mongos インスタンスの両方にフィルターを指定して、プロファイラーによってログに記録する操作を制御できます。プロファイラーに filter を指定すると、slowms オプションおよび sampleRate オプションはプロファイリングおよび低速クエリ ログ行には使用されません。

db.setProfilingLevel() は、 profile コマンドのラッパーを提供します。

MongoDB 5.0以降では、 profileコマンドまたはdb.setProfilingLevel()ラッパー メソッドを使用してデータベースプロファイラーlevelslowmssampleRate 、またはfilterに加えられた変更は、 log fileに記録されます。

このメソッドは、次の環境でホストされている配置で使用できます。

  • MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです

重要

このコマンドは、M 0 、M 2 、M 5クラスターではサポートされていません。 詳細については、「サポートされていないコマンド 」を参照してください。

  • MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン

  • MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン

db.setProfilingLevel() メソッドの形式は次のとおりです。

db.setProfilingLevel(<level>, <options>)
Parameter
タイプ
説明
integer

データベースプロファイラーレベルを設定します。次のプロファイラー レベルを使用できます。

0
プロファイラーはオフになっており、データは収集されません。これはデフォルトのプロファイラー レベルです。
1

プロファイラーは、slowms しきい値を超える操作、または指定されたフィルターに一致する操作のデータを収集します。

フィルターが設定されている場合、

  • slowmsおよびsampleRateオプションはプロファイリングには使用されません。

  • プロファイラーは、フィルターに一致する操作のみをキャプチャします。

2
プロファイラーは、すべての操作のデータを収集します。

プロファイリングはmongosでは利用できないため、 db.setProfilingLevel()を使用してmongosインスタンスでプロファイリング レベルを0以外の値に設定することはできません。

ドキュメントまたは整数

任意。 整数またはオプション ドキュメントを受け入れます。 options引数としてドキュメントではなく整数値が渡される場合、その値はslowmsに割り当てられます。 次のオプションを使用できます。

Default: 100
Type: integer

低速操作時間のしきい値(ミリ秒単位)。操作が実行される時間がこのしきい値より長いと、低速とみなされます。

低速操作は、MongoDB でその操作にかかった時間である workingMillis に基づいてログに記録されます。つまり、ロック待ちやフロー制御などの要因は、操作が低速操作のしきい値を超えるかどうかに影響しません。

logLevel0に設定されている場合、MongoDB は slowOpSampleRate で決定されたレートで低速操作を診断ログに記録します

logLevel 設定を引き上げると、レイテンシに関係なく、すべての操作が診断ログに表示されます。ただし、セカンダリによる低速の oplog エントリ メッセージのログ記録は除きます。セカンダリでは、低速の oplog エントリのみがログに記録されます。logLevel を引き上げても、すべての oplog エントリがログに記録されるわけではありません。

mongod インスタンスの場合、この設定は診断ログと(有効になっている場合)プロファイラーの両方に影響します。

mongos インスタンスの場合、プロファイリングは mongos では利用できないため、設定は診断ログにのみ影響し、プロファイラーには影響しません。

この引数は、構成ファイル オプション slowOpThresholdMs と同じ設定に影響します。

Default: 1.0
Type: double

プロファイリングまたはログに記録する必要がある低速操作の割合。sampleRate は、両端を含む 0 から 1 までの値を受け入れます。

mongod インスタンスの場合、この設定は診断ログと(有効になっている場合)プロファイラーの両方に影響します。

mongos インスタンスの場合、プロファイリングは mongos では利用できないため、設定は診断ログにのみ影響し、プロファイラーには影響しません。

この引数は、構成オプション slowOpSampleRate と同じ設定に影響します。

型: オブジェクト

どの操作をプロファイリングしてログ記録するかを制御するフィルター式。フィルター式のフィールドは、プロファイラー出力内の任意のフィールドにできます。

mongod インスタンスの場合、この設定は診断ログと(有効になっている場合)プロファイラーの両方に影響します。

mongos インスタンスの場合、プロファイリングは mongos では利用できないため、設定は診断ログにのみ影響し、プロファイラーには影響しません。

MongoDB 8.0 以降では、フィルターパラメータとして workingMillis を指定して、MongoDB がその操作に費やした時間に基づいて操作をログに記録できます。

ログ記録操作を制御するために使用されるフィルターの例については、「 プロファイルされた操作を決定するためにフィルターを設定する 」を参照してください。

プロファイリング フィルターが設定されている場合、slowms オプションおよび sampleRate オプションは診断ログまたはプロファイラーに影響しません。

このメソッドは、前の設定値を含むドキュメントを返します。

{
"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インスタンスに設定します。

db.setProfilingLevel(1, { slowms: 20, sampleRate: 0.42 })

この操作は、前の設定値を含むドキュメントを返します。

現在のプロファイリング レベルを表示するには、db.getProfilingStatus() を参照してください。

次の例では、以下の値を mongod インスタンスまたは mongos インスタンス用に設定します。

db.setProfilingLevel(0, { slowms: 20, sampleRate: 0.42 })

この操作は、前の設定値を含むドキュメントを返します。

現在のプロファイリング レベルを表示するには、db.getProfilingStatus() を参照してください。

次の例では、以下の値を mongodインスタンスに設定します。

db.setProfilingLevel( 1, { filter: { op: "query", millis: { $gt: 2000 } } } )

この操作は、前の設定値を含むドキュメントを返します。

現在のプロファイリング レベルを表示するには、db.getProfilingStatus() を参照してください。

プロファイル フィルターをクリアするには、filter: "unset" オプションを指定して db.setProfilingLevel() を実行します。

db.setProfilingLevel( 1, { filter: "unset" } )

この操作は、前の設定値を含むドキュメントを返します。

現在のプロファイリング レベルを表示するには、db.getProfilingStatus() を参照してください。

戻る

db.setLogLevel