MongoDB位置查询内存使用优化

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
云原生内存数据库 Tair,内存型 2GB
简介:

生产环境实例频繁 OOM ,调查发现主要由一些$near查询导致,查询类似如下,其中 latlng 字段建立了2d index

{
    "find" : "userData",
    "filter" : {
        "latlng" : {
            "$near" : [
                116.34642045073839,
                39.87082232130999
            ],
            "$maxDistance" : 0.9009009009009009
        }
    },
    "ntoreturn" : 10000
}

官方解释是因为$near需要排序,实际上是从中心点,不断往外扩展,找出附近的点,所以$near cursor会缓存计算结果。MongoDB cursor 的默认超时时间是10分钟,所以如果10分钟内所有打开 cursor 缓存的内存总量超过总内存,就会出现 OOM 的情况。

针对上述问题,应用有如下2种方式优化内存使用

  1. 设置更小的 cursor timeout

    • 启动时设置 mongod --setParameter cursorTimeoutMillis=60000,也可以放到配置文件
    • 在线修改 db.runCommand({setParameter: 1, cursorTimeoutMillis: 60000})
  2. find 时设置{singeBatch: true}选项,让 mongod在查询后立即关闭 cursor,这种方法只适用于不需要对 cursor 进行 getMore 查询的情况。

了解问题详细情况可以查看 SERVER-25141

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
16天前
|
存储 设计模式 监控
运用Unity Profiler定位内存泄漏并实施对象池管理优化内存使用
【7月更文第10天】在Unity游戏开发中,内存管理是至关重要的一个环节。内存泄漏不仅会导致游戏运行缓慢、卡顿,严重时甚至会引发崩溃。Unity Profiler作为一个强大的性能分析工具,能够帮助开发者深入理解应用程序的内存使用情况,从而定位并解决内存泄漏问题。同时,通过实施对象池管理策略,可以显著优化内存使用,提高游戏性能。本文将结合代码示例,详细介绍如何利用Unity Profiler定位内存泄漏,并实施对象池来优化内存使用。
27 0
|
3天前
|
缓存 算法 Java
探索现代操作系统中的内存管理优化策略
【7月更文挑战第24天】本文深入探讨了现代操作系统中内存管理的高级技术与优化策略。通过分析内存分配、虚拟内存机制以及缓存策略,文章揭示了如何提升系统性能和资源利用率。针对操作系统开发者和高级用户,本文提供了实用的调优技巧和未来的发展方向。
|
16天前
|
缓存 监控 算法
Java内存怎么优化
【7月更文挑战第11天】Java内存怎么优化
23 3
|
16天前
|
缓存 Prometheus 监控
Java面试题:如何监控和优化JVM的内存使用?详细讲解内存调优的几种方法
Java面试题:如何监控和优化JVM的内存使用?详细讲解内存调优的几种方法
34 3
|
7天前
|
存储 缓存 算法
操作系统中的内存管理优化策略
随着计算机技术的飞速发展,操作系统作为连接硬件与软件的桥梁,其性能的优劣直接影响着整个计算机系统的运行效率。在众多影响系统性能的因素中,内存管理无疑是至关重要的一环。本文将深入探讨现代操作系统中内存管理的优化策略,包括分页机制、虚拟内存技术、缓存策略等,旨在揭示这些技术如何提升系统性能并减少资源浪费。通过分析不同内存管理技术的优势与局限,本文为读者提供了对操作系统内存管理深度理解的同时,也指出了未来可能的发展方向。
13 0
|
11天前
|
SQL 资源调度 关系型数据库
实时计算 Flink版产品使用问题之在使用Flink on yarn模式进行内存资源调优时,如何进行优化
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
16天前
|
设计模式 存储 缓存
Java面试题:结合设计模式与并发工具包实现高效缓存;多线程与内存管理优化实践;并发框架与设计模式在复杂系统中的应用
Java面试题:结合设计模式与并发工具包实现高效缓存;多线程与内存管理优化实践;并发框架与设计模式在复杂系统中的应用
21 0
|
16天前
|
设计模式 并行计算 安全
Java面试题:如何使用设计模式优化多线程环境下的资源管理?Java内存模型与并发工具类的协同工作,描述ForkJoinPool的工作机制,并解释其在并行计算中的优势。如何根据任务特性调整线程池参数
Java面试题:如何使用设计模式优化多线程环境下的资源管理?Java内存模型与并发工具类的协同工作,描述ForkJoinPool的工作机制,并解释其在并行计算中的优势。如何根据任务特性调整线程池参数
20 0
|
16天前
|
设计模式 安全 Java
Java面试题:请列举三种常用的设计模式,并分别给出在Java中的应用场景?请分析Java内存管理中的主要问题,并提出相应的优化策略?请简述Java多线程编程中的常见问题,并给出解决方案
Java面试题:请列举三种常用的设计模式,并分别给出在Java中的应用场景?请分析Java内存管理中的主要问题,并提出相应的优化策略?请简述Java多线程编程中的常见问题,并给出解决方案
28 0
|
16天前
|
并行计算 安全 算法
Java面试题:Java内存管理与多线程并发处理,设计一个Java应用,该应用需要处理大量并发用户请求,同时要求对内存使用进行优化,如何通过垃圾回收机制优化内存使用?
Java面试题:Java内存管理与多线程并发处理,设计一个Java应用,该应用需要处理大量并发用户请求,同时要求对内存使用进行优化,如何通过垃圾回收机制优化内存使用?
19 0