有奖捉虫:办公协同&微信生态&物联网文档专题 HOT
文档中心 > 云数据库 MongoDB > 最佳实践 > 性能调优 > 连接使用率偏高异常分析及解决方法

场景描述

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

排查与解决

序号
可能原因
排查方式
解决方法
1
若使用连接池,可能因连接参数配置不合理而导致大量连接资源被占用。连接池参数含义,请参见 连接池使用建议
请您自行排查客户端连接池配置参数是否适合业务场景。
请参见 连接池使用建议 进行连接池参数配置。
2
业务侧存在较多无实际业务请求的连接。
请借助数据库智能管家(TencentDB for DBbrain,DBbrain)的诊断优化功能,在实时会话页面,排查业务侧所有连接的客户端信息,是否为业务实际真实所需要的连接。
对于不需要的连接,可在数据库智能管家n(TencentDB for DBbrain,DBbrain)的n诊断优化中,在实时会话页面,直接进行 Kill 操作,进行清理。具体操作,请参见 诊断优化
3
存在大量慢查询,连接一直占用未释放。
1. 请借助数据库智能管家n(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内,便于第一时间识别服务端的运行状况,避免产生无效连接。

相关问题

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