tencent cloud

文档反馈

连接使用率偏高异常分析及解决方法

最后更新时间:2024-01-12 10:47:04

    场景描述

    MongoDB 的服务模型是每个网络连接由一个单独的线程(one-thread-per-connection)来处理,当网络连接数太多时,过多的线程会导致上下文切换开销变大,同时内存开销也会上涨。每次请求都建立连接和鉴权会极大的影响性能。因此,限制实例的连接数,使用完毕规范化及时释放连接,是保障数据库稳定的必要条件。
    登录 MongoDB控制台,在系统监控页面,查看实例监控指标连接百分比的趋势变化图。连接百分比指当前集群的连接数量与最大连接数的比例。若达到最大连接数,将会导致连接响应变慢,甚至连接失败的现象。因此,当连接使用率超过85%,请及时进行排查处理。

    排查与解决

    序号
    可能原因
    排查方式
    解决方法
    1
    若使用连接池,可能因连接参数配置不合理而导致大量连接资源被占用。
    请您自行排查客户端连接池配置参数是否适合业务场景。
    连接池使用建议 进行连接池参数配置。
    2
    业务侧存在较多无实际业务请求的连接。
    请借助数据库智能管家(TencentDB for DBbrain,DBbrain)的诊断优化功能,在实时会话页面,排查业务侧所有连接的客户端信息,是否为业务实际真实所需要的连接。
    对于不需要的连接,可在数据库智能管家 (TencentDB for DBbrain,DBbrain)的 诊断优化中,在实时会话页面,直接进行 Kill 操作,进行清理。具体操作,请参见 诊断优化
    3
    存在大量慢查询,连接一直占用未释放。
    1. 请借助数据库智能管家 (TencentDB for DBbrain,DBbrain)的诊断优化功能,在慢 SQL 分析页面,查询数据库当前的所有慢日志的记录和执行信息统计数据及视图。具体信息,请参见 诊断优化
    2. 请登录 MongoDB 控制台 ,单击实例 ID,进入实例详情页面,选择数据库管理页签,单击慢日志查询,通过抽象排查,排查具体的慢查询信息。具体查询方法,请参见 慢日志管理
    针对慢查询,请进行索引优化。
    可借助数据库智能管家(TencentDB for DBbrain,DBbrain)索引推荐 ,选择最优的索引。
    请参见最佳实践 索引优化解决读写性能瓶颈,提升数据库性能。
    4
    连接泄露,存在未释放的链接。
    重启 mongos 实例, 导致实例所有的连接在重启的一瞬间中断,业务直接进行重连即可,不存在持续影响业务的可能。若重启后业务连接数迅速增加又导致连接使用率100%,则说明业务确实存在大量有效连接,不属于连接泄漏的场景。具体操作,请参见 重启实例
    直接在控制台提升连接,临时解决业务突发的状况,具体操作,请参见 连接数管理
    调整实例配置规格,副本集实例,提升Mongod 的 CPU 与内存配置,可同步提升实例的最大连接数量。具体信息,请参见 变更 Mongod 节点配置规格。分片集群,请提升 Mongos 的节点规格,或增加分片数量。具体操作,请参见 变更 Mongos 节点配置规格调整分片数量
    5
    业务量突增,当前实例配额不足
    请参见序号2的排查方法。

    连接池使用建议

    以 GO 语言为例,说明客户端通过连接池连接数据库时需配置的参数。具体信息,请参见下表。其他语言类型,请找到对应的连接池参数进行配置。不同语言类型的更多参数信息,请参见 MongoDB 官网
    参数
    单位
    参数含义
    配置建议
    maxPoolSize
    数量
    配置连接池每个客户端所能申请的最大连接数量。
    该参数与客户端数量的乘积务必小于实例的最大连接数,避免连接数量过多而导致无法连接。
    minPoolSize
    数量
    配置连接池每个客户端所能申请的最小连接数量
    该参数与客户端数量的乘积小于实例的最大连接数,避免业务突发需要新建太多连接而后端实例资源消耗供应不足。
    socketTimeoutMS
    毫秒
    配置发送和接受 sockets 等待响应的超时时间。默认为0,指不超时。
    建议根据业务实际场景设置,避免当 MongoDB 服务端异常故障引起主备切换之后,客户端一直等不到服务端响应的消息包,而导致此无效连接资源一直被占用。
    maxIdleTimeMS 
    毫秒
    配置一个空闲连接在被删除或者关闭之前存在的最大时间。
    建议业务调整为1小时内,避免空闲连接一直占用连接资源。
    heartbeatFrequencyMS
    毫秒
    配置客户端给服务端发送心跳的频率。用于客户端定期检查与后端数据库连接的存活情况。
    建议配置10s内,便于第一时间识别服务端的运行状况,避免产生无效连接。
    
    联系我们

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

    技术支持

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

    7x24 电话支持