Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs Menu
Docs Home
/
データベース マニュアル
/ / / / /

低速クエリの特定

MongoDBには データベースプロファイラー が含まれています。これは低速クエリを識別し、クエリ パフォーマンスの向上方法を決定するのに役立ちます。

このタスクは、 データベースプロファイラを使用して、実行中の mongod インスタンスでの低速クエリを識別します。有効にすると、データベースプロファイラはパフォーマンスとディスク使用量に影響を与え、暗号化されていないクエリ データを公開する可能性があります。

警告

データベースプロファイラを本番環境の配置で使用する前に、パフォーマンス、ストレージ、およびセキュリティへの影響を検討してください。

Atlas ユーザーは Atlas クエリプロファイラー を利用して、 散布図チャートによる可視化の便利性で低速クエリを識別できます。

詳細については、「 クエリプロファイラーによるクエリ パフォーマンスの監視 」を参照してください。

低速クエリとは、実行に指定された時間よりも長い時間がかかるクエリです。このタスクでは、低速クエリしきい値は 100 ミリ秒に設定されています。

ユースケースによっては、クエリの実行速度が必要になる場合があります。他のクエリでは、しきい値を引き上げて、最も遅いクエリのみに集中する必要がある場合があります。

特定のアプリケーションとデータベースのニーズを反映する低速クエリしきい値を選択します。

有効にすると、データベースプロファイラはデータベース レベルのクエリのみを監視します。複数のデータベースの低速クエリを監視するためにプロファイラーが必要な場合は、各データベースで db.setProfilingLevel() メソッドを実行します。

データベースプロファイラはmongosでは使用できません。

1

データベースプロファイラが低速クエリをモニターできるようにするには、db.setProfilingLevel() メソッドを使用します。

db.setProfilingLevel(1, 100)
{ was: 0, slowms: 1, sampleRate: 1, ok: 1}

これにより、プロファイリング レベルが 1 に設定されます。これにより、低速クエリがモニターされ、クエリの実行時間が 100 ミリ秒を超えると、そのクエリは低速と定義されます。

2

データベースプロファイラによって見つかった低速クエリを一覧表示するには、 system.profileコレクションで関連データをクエリします。

db.system.profile.find( { },
{
command: 1,
millis: 1,
docsExamined: 1,
keysExamined: 1,
nreturned: 1
}
).sort( { ts: -1 } )
[
{
command: {
find: 'people',
filter: { age: { '$gt': 35 } },
lsid: { id: UUID('ae3e9932-0a78-47ab-b741-01dd3bfb3563') },
'$db': 'contacts'
},
keysExamined: 0,
docsExamined: 100000,
nreturned: 40,
millis: 143
}
]

コマンドは、データベースプロファイラによって監視された低速クエリのリストを提供します。

プロジェクションは、返されたドキュメントをフィルタリングして、クエリが遅く実行された原因を判断するのに役立つ情報を含めます。

  • keysExamined0 の場合、クエリではインデックスが使用されなかったことを示します。この問題を解決するには、コレクションにインデックスを作成します。

  • インデックスが使用されており、docsExaminednreturned より大幅に大きい場合は、非効率的なインデックスを示します。クエリフィルターで使用されるフィールドでは、インデックスを更新するか、新しいインデックスを作成する必要がある場合があります。

  • keysExamined が高く、docsExamined が低い場合は、インデックスの使用が効果的であることを示します。

3

データベースプロファイラがこれ以上パフォーマンスを中断しないようにするには、不要な場合は無効にします。

db.setProfilingLevel(0)
{ was: 1, slowms: 1, sampleRate: 1, ok: 1}

インデックスを持つコレクションのパフォーマンスを評価するには、hint( { $natural: 1 } ) メソッドを使用してインデックスを無視するようにクエリを設定します。

db.listingsAndReviews.find( {
$or: [
{ "address.market": "Berlin" },
{ "review_scores.review_scores_cleanliness": { $lt: 5 } }
],
$where: function () {
return this.amenities && this.amenities.length > 15;
}
} ).sort( { description: 1 } ).hint( { $natural: 1 } );

これは、コレクションスキャンとインデックススキャンのクエリのパフォーマンスを比較する場合に役立つ場合があります。

戻る

出力

項目一覧