tencent cloud

文档反馈

基于慢日志分析请求时延明显偏高的原因

最后更新时间:2024-01-12 10:48:30

    问题现象

    日常运维,登录 MongoDB 控制台,单击实例 ID 进入实例详情页面,选择系统监控页签,检查实例的监控数据。发现数据库时延监控类指标明显变长。时延监控指标主要反馈的是请求到达接入层直至处理完请求返回客户端的时间。具体信息,请参见 监控概述

    原因分析

    1. 排查当前 Mongod 上是否有慢日志。 登录 MongoDB 控制台,单击实例 ID 进入实例详情页面,在数据库管理 > 慢日志查询页面,查看实例的慢日志,可选择抽象查询。具体信息,请参见 慢日志管理。请关注 command、COLLSCAN、IXSCAN、keysExamined、docsExamined 等关键字。
    command 指出慢日志中记录的操作请求。
    COLLSCAN 说明该查询进行了全表扫描。
    IXSCAN 代表进行了索引扫描。更多字段描述,请参见 MongoDB 官网
    keysExamined 指明索引扫描条目。
    docsExamined 代表文档扫描条目。keysExamined 和 docsExamined 越大,说明没有建索引或者索引的区分度不高。 更多慢日志说明,请参见 MongoDB 官网
    2. 若 Mongod 无慢查询,请检查 Mongos 是否负载过高。 时延监控指标主要反馈的是从请求到达接入层直至处理完返回客户端的时间,若已确认 Mongod 上没有慢操作,但请求时延较高,可能是 Mongos 负载过高导致。 造成 Mongos 负载高的原因有多种,例如业务瞬间建立大量连接可能会导致 Mongos 负载过高,或者,多个分片的数据需要汇总造成 Mongos 负载高。 此时,可以进行 Mongos 重启。重启 Mongos 可以在 控制台 实例列表进行。
    注意:
    重启 Mongos 会导致实例所有的连接在重启的一瞬间中断,业务直接进行重连即可。
    3. 若 Mongod 的慢日志中存在索引扫描,请确认是否使用前台方式创建索引导致请求被锁住。 如果业务查询所用索引并无问题,需确认当前是否在业务繁忙时段,进行了前台方式创建索引操作。
    一个集合创建索引时默认方式为前台方式(background 选项的值为 false)。该操作将阻塞其他所有操作,直到前台完成索引创建。
    后台方式(background 选项的值为 true)创建索引,则在创建索引期间,MongoDB 依旧可以正常提供读写操作服务。然而,后台方式建索引可能会导致索引创建时间变长。具体创建索引选项详情,请参见 MongoDB 官网。 同时,可通过 currentOp 命令来查看当前创建索引的进度。具体的命令,如下所示。
    db.currentOp(
    {
    $or: [
    { op: "command", "query.createIndexes": { $exists: true } },
    { op: "insert", ns: /\\.system\\.indexes\\b/ }
    ]
    }
    )
    返回如下图所示,msg 字段指明当前创建索引的进度,locks 字段代表该操作的锁类型。更多锁说明信息,请参见 MongoDB 官网
    
    
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持