云数据库 MongoDB 连接使用率偏高异常分析及解决方法

以 GO 语言为例,说明客户端通过连接池连接数据库时需配置的参数。具体信息,参见下表。其他语言类型,请找到对应的连接池参数进行配置。不同语言类型的更多参数信息。

相关产品
云数据库 MongoDB 产品页,含版本规格、价格与购买入口。

一、场景描述

·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的排查方法。 

三、连接池使用建议

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

四、相关问题

连接数超限,请提升连接数或重启实例来解决。具体信息,请参见 连接数超限解决方法。

赞 (0)
上一篇 4天前
下一篇 4天前