2016-09-23 2 views
0

私は、いくつかのmongodb質問が遅いクエリを受け入れることがあります。以下は私のmongodbログからの2つのエントリを示しています。私はmongodbバージョン2.4.12を使用しています。この場合、これらのクエリは高い応答時間を要しています。 (2354msおよび1173ms)。私は1番目がREADクエリで、2番目がUPDATEクエリであることを知っています。mongodbログの読み方は?

1クエリ

月9月1日11:00:01.171 [conn11431867]クエリmyapp.Userクエリ:{のclientId:40000} ntoreturn:0 ntoskip:0 nscanned:278045 keyUpdates:0 numYields:2ロック(マイクロ単位)R:4187970 nreturned:18 reslen:14091 2354ms

2クエリ

月9月1日22:10:00.394 [conn11374746] myapp.Userクエリを更新:{_id:のObjectId( 'ユーザーID:10001000、loginId: "amilai"、 "amilai"、com://www.myapp.domain.User、firstName: "Amila"、lastName: "Iddamalgoda"、userId:10001000、メールアドレス: "[email protected]"、クライアントID:40000} idhack:1 nupdated:1 keyUpdates:0ロック(マイクロ)w:189 1592ms

誰でも次の質問に回答してください。ありがとう。たくさんありがとう。

1.)シャーディングも使用しています。そしてこのユーザーコレクションのインデックスは 'userId'に設定されています。この遅い応答時間の根本原因は何でしょうか? {のclientId:40000}手段最初のクエリーログにおいて(2354ms1173ms

2)、クエリは何ですか? mongoはclientIdキーを使用してユーザーを検索していますか? nscannedObjects ==>スキャンした文書の数。しかし、「r」と「nreturned」と「reslen」はどういう意味ですか?

3.)私はmongoがマルチ粒度ロックを使用していることを知っています。しかし、この場合、この応答時間は書き込みロックの結果ですか?

4.)2番目のクエリ(更新クエリ)に表示されているものを分解する必要があります。 ObjectIdから読み込んで個々のフィールドを更新していますか?そこには何が起こっているの?

+0

可能性があります。dste http://stackoverflow.com/questions/28762135/meaning-of-variables-in-mongodb-logs – chridam

+0

ありがとうございました。しかし、私は高い応答時間の理由を見つける必要があります –

答えて

1
あなたの質問に一つ一つ答え

:あなたのクエリが18件の結果を見つけるために278045のドキュメントをスキャンし

  1. を。これは根本的な原因かもしれません。
  2. クエリ:{clientId:40000}は、クエリオブジェクトが正確に{ clientId: 40000 }であることを意味します。このログのクエリ文はdb.User.find({ clientId: 40000 })です。そしてあなたのインデックスはuserIdにあります。このクエリは、インデックスをclientIdにする必要があります。
  3. 一般的な状況では、ロック時間は応答時間よりも短くなります。しかし、ローカルデータベースをロックするものがoplogを更新するように、この値は、操作の全長よりも長くすることができ、複数のロックを必要とする操作について

(すなわち、ミリ秒)

  1. わかりません。

合計で、クライアントIDにインデックスを作成することを検討してください。

関連する問題