修复 Atlas Search 问题
当 Atlas Search 进程使用的 CPU 和内存量达到指定阈值时,Atlas Search 会触发 Atlas Search 警报。如果搜索进程( mongot
)内存不足,索引和查询将失败。您可以在项目警报设置模式中配置 Atlas Search 警报条件。您还可以通过集群监控查看 Atlas Search 指标。
警告
如果您对已具有 Atlas Search 索引的集合进行分片,当该集合开始出现在分片上时,您可能会遇到短暂的查询停机时间。此外,如果您为包含 Atlas Search 索引的已分片集合添加分片,针对该集合的搜索查询将失败,直到添加的分片完成初始同步过程为止。要了解更多信息,请参阅初始同步进程。
警报条件
您可以在项目级警报设置页面中配置以下警报条件,以触发警报。
Atlas Search: Index Replication Lag
如果 Atlas Search 在复制 的 oplog mongod
更改时延迟的大致毫秒数高于或低于阈值,则会发生 。
Atlas Search: Index Size on Disk
如果磁盘上所有 Atlas Search 的总大小(以字节为单位)高于或低于阈值,则会发生此错误。
Atlas Search: Max Number of Lucene Docs
如果用于存储给定副本集或分片的 Atlas Search 索引的 Lucene 文档的上限数量高于阈值,则会发生此情况。
仅当复制因磁盘利用率高而被 Atlas Search mongot
进程中断时,Atlas Search: Mongot stopped replication
才会出现在专用搜索节点上。暂停复制阈值为 90%,恢复复制阈值为 85% 磁盘利用率。如果复制长时间暂停,mongot
进程将从 oplog 脱离。如果 mongot
进程脱离 oplog,Atlas 会重建索引。但是,如果您扩容搜索实例或删除 Atlas Search 索引,则可以防止 mongot
从 oplog 脱离。
Atlas Search: Number of Error Queries
如果 Atlas Search 无法返回响应的查询数量高于或低于阈值,则会发生此错误。
Atlas Search: Number of Index Fields
如果 Atlas Search 索引中存在的唯一字段总数高于或低于阈值,则会发生此错误。
Atlas Search: Number of Successful Queries
如果 Atlas Search 成功返回响应的查询数量高于或低于阈值,则会发生此错误。
Atlas Search: Total Number of Queries
提交到 Atlas Search 的查询数量高于或低于阈值时发生。
Atlas Search Opcounter: Delete
如果每秒删除的文档或字段(索引定义中指定的)总数高于或低于阈值,则发生此事件。
如果每秒对所有 Atlas Search 查询运行的 getmore
命令总数高于或低于阈值,则会出现 Atlas Search Opcounter: Getmore
。
Atlas Search Opcounter: Insert
如果 Atlas Search 每秒索引的文档或字段(索引定义中指定)的总数高于或低于阈值,则会发生此错误。
Atlas Search Opcounter: Update
如果 Atlas Search 每秒更新的文档或字段(索引定义中指定的)总数高于或低于阈值,则会发生此错误。
Insufficient disk space to support rebuilding search indexes
如果您的集群没有足够的可用磁盘空间来支持 Atlas Search 索引,则会出现此错误。
注意
当 Atlas 自动升级搜索索引以启用新功能时,可能会出现此警报。您的集群必须拥有足够的磁盘空间来存储旧版和新版索引。如果重新构建增加了 90% 或更多的磁盘空间使用量,Atlas 会根据您是否已启用自动扩展来增加集群存储。索引升级完成后,Atlas 会删除旧版索引,从而释放磁盘空间。
Search Memory: Resident
如果 Atlas Search 进程占用的常驻内存总字节数高于或低于阈值,则会发生此错误。
Search Memory: Shared
如果 Atlas Search 进程占用的共享内存总字节数高于或低于阈值,则会发生此错误。
Search Memory: Virtual
如果 Atlas Search 进程占用的虚拟内存总字节数高于或低于阈值,则会发生此错误。
Search Process: CPU (Kernel) %
如果为 Atlas Search 进程提供操作系统调用服务所花费的 CPU 时间百分比高于阈值,则会发生此错误。
Search Process: CPU (User) %
如果用于 Atlas Search 进程的 CPU 时间百分比高于阈值,则会发生此错误。
Search Process: Disk space used
如果 Atlas Search 进程使用的磁盘空间总字节数高于阈值,则会发生此错误。
如果搜索进程(mongot
)内存不足,则会发生 Search Process: Ran out of memory
。如果搜索进程内存不足,索引和查询将失败。
注意
默认情况下,Search Process: Ran out of memory
警报会自动运行。您可以配置警报设置,以禁用此通知。
常见触发器
当您尝试构建大型或复杂的搜索索引时,通常会出现 Atlas Search 警报。 在解决内存问题之前,这些索引将保持 Initial Sync阶段。
解决眼前的问题
如果搜索进程 ( mongot
) 耗尽内存或磁盘空间,您可以升级集群来解决眼前的问题。 您可以选择具有更多内存、存储空间和 IOPS的集群层级。
实施长期解决方案
要防止 Atlas Search 在将来发出警报,请仔细查看 Atlas Search 的提高 Atlas Search 性能。
为了优化索引,我们建议部署专用搜索节点,这样就可以独立扩展 Atlas 集群和 $search
工作负载。专用搜索节点仅运行 mongot
进程,因此可改善 mongot
进程的可用性、性能和工作负载均衡。
监控您的进度
查看可用的 Atlas Search 图表,以监控 Atlas Search 指标。
监控 Atlas Search 指标以评估和优化 Atlas Search 索引。
要了解更多信息,请参阅查看集群指标