Slow Query Problems

Last updated: 2020-08-24 17:30:43

If you find the request latency becomes obviously longer when using TencentDB for MongoDB, you can troubleshoot the problem in the following steps:

  1. Check whether the "Latency" monitoring metric for instances is exceptional.
    Log in to the TencentDB for MongoDB Console and check the instance monitoring data on the system monitoring page. The "Latency" metric mainly reflects the time from a request arriving at the access layer to it returning to the client after being processed. If the request latency is high, check whether there are slow logs on mongod.

  2. Check whether there are slow logs on mongod.
    Log in to the TencentDB for MongoDB Console and view the slow logs of the instance by using "Query statistics".

    Pay attention to keywords such as command, COLLSCAN, IXSCAN, keysExamined, and docsExamined. For more log descriptions, please see Log Messages.
    The keywords that require attention include the following:

    • command indicates an operation recorded in a slow log.
    • COLLSCAN indicates that a full-table scan is performed. IXSCAN indicates that an index scan is performed. For descriptions of other fields, please see Explain Results.
    • keysExamined refers to the number of index entries scanned. docsExamined refers to the number of documents scanned. Larger keysExamined and docsExamined values indicate that no index is created or the created index is less distinctive. Please check the fields for which an index is created.
  1. Check whether the request is locked due to an index created in the foreground.
    If there is no problem with the index used for business queries, check whether an index is created in the foreground during peak business hours. An index is created in the foreground by default for a collection (the background option is false), which will block all other operations until the index is created in the foreground. If you choose to create an index in the background, MongoDB can still provide read/write services during the creation of the index. However, it takes more time to create the index in this way. For options to create an index, please see db.collection.createIndex().
    You can view the progress of index creation by running the currentOp command as shown below:

    db.currentOp(
         {
           $or: [
             { op: "command", "query.createIndexes": { $exists: true } },
             { op: "insert", ns: /\.system\.indexes\b/ }
           ]
         }
         )

    The returned result is shown as follows. The msg field indicates the progress of index creation. The locks field indicates the lock type of the operation. For more information on locks, please see Database Profiler Output.



  2. Check whether the mongos load is too high.
    The "Latency" metric mainly reflects the time from a request arriving at the access layer to it returning to the client after being processed. If there are no slow logs on mongod, but the request latency is high, it may result from high mongos load. There are many reasons for this; for example, a large number of connections are established in a short time, or data in multiple shards needs to be aggregated. In these cases, you can restart mongos in the console.

    Note:

    All instance connections will be interrupted at the moment of restarting mongos, but the business can be directly reconnected. Therefore, restarting mongos will not continuously affect the business.

Was this page helpful?

Was this page helpful?

  • Not at all
  • Not very helpful
  • Somewhat helpful
  • Very helpful
  • Extremely helpful
Send Feedback
Help