对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

搜索和向量搜索资源规划和大小调整

此页面介绍如何调整为 Kubernetes 集群中的 MongoDB Search 和向量搜索提供服务的 mongot pod 的大小。使用它为 MongoDBSearch 资源上的 spec.clusters[].resourceRequirementsspec.clusters[].jvmFlagsspec.clusters[].persistence 选择初始值,并规划索引增长的持久卷容量。

在确定 mongot 大小之前,请查看您计划运行的部署模型和拓扑结构:

有关此页面上引用的每个设置的完整模式,请参阅 MongoDB Search 和向量搜索设置。

分配的 CPU 内存比取决于搜索工作负载配置文件。

工作负载类
RAM 到 CPU 比率
使用时

高 CPU

2 : 1

您运行通用全文搜索,其中查询性能是 CPU 密集型的。

低 CPU

8 : 1

您在数据量较小的情况下运行向量搜索工作负载,在这种情况下,内存比原始 CPU 更重要。

对于大多数常规使用案例,小型或中型高 CPU 配置是一个均衡的起始点。

根据预期的向量数据量(低 CPU)或每秒查询次数(高 CPU)来调整 mongot Pod 的大小。

size
低 CPU(向量搜索)
高 CPU(全文)

最多 10 GB 的向量

20 到 40 QPS,轻度索引

中型

10 GB 到 50 GB 的向量

80 到 160 QPS

50 GB 或更多的向量

320 到 480 QPS,重度索引

例如,如果您预计全文搜索应用程序的每秒查询处理量为 100,则从中型高 CPU 配置开始。

spec.clusters[].resourceRequirements 中设置 mongot 节点的 CPU 和内存。requests 字段会在节点上预留容量;limits 字段会限制节点可以消耗的容量。

spec:
clusters:
- resourceRequirements:
requests:
cpu: "2"
memory: 4Gi
limits:
cpu: "3"
memory: 5Gi

如果您省略 spec.clusters[].resourceRequirements,Kubernetes Operator 将使用以下默认值:

  • requests.cpu: 2

  • requests.memory: 4Gi

  • limits — 节点可以消耗节点的所有可用资源。

limits 设置为与工作负载匹配的值。没有限制的 Pod 会使节点饱和,并影响其他工作负载。

如果您未在 spec.clusters[].jvmFlags 中指定 -Xms-Xmx,Kubernetes Operator 将两个标志都设置为 spec.clusters[].resourceRequirements.requests.memory 的一半,从而自动计算 Java 虚拟机(JVM)堆。

要显式覆盖堆,请在 spec.clusters[].jvmFlags 中设置 -Xms-Xmx。Kubernetes 操作符不会修改您提供的任何标志,并将其添加到操作符计算的标志之后。

spec:
clusters:
- jvmFlags:
- -Xms2g
- -Xmx2g

每个 mongot pod 都有自己的持久卷,其中包含搜索和向量索引。规划卷以容纳索引和重建的内存容量。

集合的大小与由此产生的搜索索引的大小并不总是相关的。索引大小取决于映射的字段以及在索引上启用的功能(例如自动完成)。要估算工作负载的索引大小:

1

插入 1 到 2 GB 的数据,或使用 $out 创建一个小型集合。

2

使用您计划在生产中使用的字段映射创建搜索索引。

3

将索引大小与集合大小进行比较。从该比率外推以估算生产扩展下的索引大小。例如,一个 1 GB 集合产生一个 250 MB 索引(0.25:1 比率)意味着,一个 12 GB 集合产生大约 3 GB 索引。

分配索引所需磁盘空间的 double。额外空间允许 mongot 在需要时重建索引。当磁盘使用率达到 90% 时,mongot 变为只读。

使用二进制数量后缀在 spec.clusters[].persistence.single.storage 中设置卷大小:

spec:
clusters:
- persistence:
single:
storage: 60Gi
storageClass: local-nvme

如果省略 spec.clusters[].persistence,Kubernetes 操作符将预配 16 GB 的默认卷。对于 30 GB 索引,将 spec.clusters[].persistence.single.storage 设置为 60Gi,为索引重建留出空间。

参考 spec.clusters[].persistence.single.storageClass 中卷的 StorageClass。选择符合以下指导的类:

  • 磁盘类型:使用通用固态硬盘支持的存储。读写入 IOPS 对 mongot 性能很重要。复制涉及新索引段的磁盘写入以及 mongot 将旧段合并为较大段时的磁盘读取。

  • 只读阈值:当卷的使用率达到 90% 时,mongot 进入只读模式并停止写入操作。要恢复写入,请删除索引数据,使使用率低于 85%。

部署后,监控以下阈值,以确认初始大小是否足够,并了解何时进行扩展。

Resource
阈值
操作

CPU

持续超过 80% 使用率

增加 spec.clusters[].resourceRequirements.requestslimits 中的 CPU。

内存

mongot_system_process_majorPageFaults_operations 持续高于每秒 1000

增加 spec.clusters[].resourceRequirements.requests 中的内存和 spec.clusters[].jvmFlags 中的 Java虚拟机(JVM) 堆。

Disk

使用率超过 90%

减少索引大小,使用用量低于阈值。mongot 在此阈值变为只读。