文章目录
- [1. 现象描述](#1. 现象描述)
- [2. 原因及解决方案](#2. 原因及解决方案)
-
- [2.1 load干了哪些事情?](#2.1 load干了哪些事情?)
- [2.2 index原因推测](#2.2 index原因推测)
-
- [2.2.1 服务器内存太小或者不足](#2.2.1 服务器内存太小或者不足)
- [2.2.2 先设置Index再Insert数据](#2.2.2 先设置Index再Insert数据)
1. 现象描述
当你建立了一个milvus collection
之后,collection.load()
到内存时,速度很慢,比如20分钟没有结果,这是什么原因?
2. 原因及解决方案
2.1 load干了哪些事情?
我猜测:load函数的一个动作是将milvus计算好的index加入到内存中去。原因是:
- 如果在load前,没有设定index,那么load会报错提示你没有设定index。
- Milvus的所有相似计算,都是基于index进行的,所以load的时候一定会将index结果加载到内存。
- 建立好milvus的collection后,首次load时,有时会很耗时间,有时又不怎么耗时间。这是因为如果你在insert前,就create_index的,那么insert环节一并计算生成index,所以首次load只需要将结果load到内存,速度很快;如果create_index发生在insert环节后,那么load环节就会计算index,然后再加载到内存,显然load速度就会慢了。
由此推测,您的load函数非常慢,很有可能是index环节速度太慢或者出了问题!
2.2 index原因推测
2.2.1 服务器内存太小或者不足
向量百万,计算index,需要比较多的内存和计算量。看看您的机器是否内存不足了。
测试方法:找一个空的机器去,上milvus试一下,或者将现在milvus服务器释放一些内存试试。