常见的排查点:
- 如果数据库有直接报错信息Timeout,需要检查实例的连接数是否已达到上限。
- 检查方法:通过查看监控指标,查看当前活动连接数是否已经达到当前实例支持的最大连接数。
- 检查连接方式是否合理。
- 检查方法:检查连接实例时,集群实例是否同时连接了多个mongos节点,副本集是否同时连接了主节点和备节点。
- 解决方案:如果是集群实例,连接实例时建议同时连接多个mongos节点,这样可以分担负载并提高可用性;如果是副本集实例,建议同时连接主备节点,这样不仅提升了数据读写性能,而且避免了在发生主备节点切换后,从客户端写入数据报错的问题。
- 分析实例的监控指标是否存在异常。
- 检查方法:通过查看监控指标,观察CPU使用率、内存使用率等使用情况。
- 解决方案:如果CPU和内存指标异常,需要检查客户端业务或者实例数据是否过于集中,造成负载过高。客户端业务过于集中,则需要客户端进行架构优化。数据过于集中,则需要对数据进行必要的分片。
- 检查慢日志是否过多。
检查方法:请参见查看慢日志。
解决方案:请参见慢操作优化。
其他的注意点:
- 执行查询时,只选择需要返回的字段,不需要的字段不要返回。修改数据时,只修改变化需要修改的字段,不要整个对象直接存储全部修改。从而减少网络和进程处理的负载。
- 同一个业务场景,能一次查询返回的必须一次查询,减少和数据库的交互次数。
- 单个实例中,数据库的总的个数不要超过200个,总的集合个数不要超过500个。
- 业务上线前,一定要对数据库进行性能压测,评估业务峰值场景下,对数据库的负载情况。
- 禁止同时执行大量并发事务,且长时间不提交。
- 业务正式上线前,所有的查询类别,都应该先执行查询计划检查查询性能。
- 检查实例规格的性能基线,分析当前的业务需求是否达到上限。