milvus - VectorDBBench benchmaker 性能测试工具使用经验

IVF_FLAT (Inverted File with Flat Indexing)
优点:
在数据量适中且维度不是非常高的情况下,IVF_FLAT能提供精确的最近邻搜索结果。
相对简单,易于理解和实现。
缺点:
当数据集非常大时,IVF_FLAT需要大量的内存来存储整个数据集,这可能导致性能瓶颈。
检索速度随着数据集的增长而显著降低,因为需要与所有候选数据点计算相似度。
HNSW (Hierarchical Navigable Small World Graphs)
优点:
HNSW特别适合高维数据,能够在大规模数据集上提供高效的近似最近邻搜索。
即使数据集很大,HNSW也能保持较快的查询速度。
缺点:
HNSW的构建过程可能较为复杂和耗时,尤其是在数据流式更新的情况下。
结果为近似最近邻,虽然通常足够准确,但在某些场景下可能不如IVF_FLAT精确。
对于小数据场景,特别是如果数据量不大且可以接受较高的内存消耗,IVF_FLAT可能是一个更好的选择,因为它能提供精确的结果。然而,如果数据集的维度非常高或者你希望优化查询速度,即使数据量较小,HNSW仍然可能是更优的选择。
在实际应用中,选择哪一种算法还应考虑具体业务需求,比如是否可以容忍近似结果、系统资源限制、以及是否需要实时更新索引等因素。如果数据量和维度都不大,而且对查询速度的要求不是特别高,那么IVF_FLAT可能就足够了;但如果需要在高维数据上进行快速查询,HNSW则更加合适。

HNSW  分层可导航小世界图索引
1.M
M是一个关键参数,它定义了图中每个节点的最大出边数,即每个节点可以连接到的最多其他节点的数量 
在HNSW的多级图结构中,M控制着图的连通性和密度。
2.efConstruction
efConstruction定义了在构建图时,算法为每个节点寻找最近邻时考虑的候选节点数量。换句话说,它是构建索引过程中用于决定每个节点连接哪些其他节点的探索因子。
它控制了算法在添加新节点时考虑的候选邻居数量。当添加一个新节点时,算法会从当前图中选取efConstruction个节点作为候选,并从中挑选出最佳的邻居节点来建立连接
3.ef-search 
ef_search(有时简写为 ef)是HNSW(Hierarchical Navigable Small World graphs)算法中用于查询阶段的一个重要参数。在查询时,ef_search定义了算法在试图找到最近邻时考虑的候选节点数量。
它控制着搜索的广度,即算法在搜索图时愿意检查多少条边。
ef_search 控制搜索过程的效率和精度,它影响算法在搜索时探索的路径数量。
4.k
k通常是指查询时返回的最近邻(nearest neighbors)的数量
IVF_FALT  带平面索引的倒排文件
lists
lists参数实际上指的是nlist,它是IVF_FLAT索引中聚类(或列表)的数量。nlist决定了数据集被分割成多少个子集。
probes
probes参数是指在搜索时实际检查的聚类数量

官网地址如下:
https://zilliz.com/vector-database-benchmark-tool?database=ZillizCloud%2CMilvus%2CElasticCloud%2CPgVector%2CPinecone%2CQdrantCloud%2CWeaviateCloud&dataset=medium&filter=none%2Clow%2Chigh&tab=1

https://gitee.com/woohello/VectorDBBench

1.前置条件:
1.python >= 3.11
Ssl 问题解决:
https://cloud.tencent.com/developer/article/2424089
https://blog.youkuaiyun.com/qq_43370607/article/details/137382955

pip install vectordb-bench

1.ivf_flat 性能验证

nohup ./ivf_flat.sh  > /root/octopus/benchmarker/dimension/ivf_flat.log  2>&1 &
/usr/local/python3.12/bin/vectordbbench  milvusivfflat --uri 'http://xxxxx:32437'  --drop-old --lists 1024 --probes 5
{
    "run_id": "09c01adfa7a5470ea6176855cccd5628",
    "task_label": "09c01adfa7a5470ea6176855cccd5628",
    "results": [{
            "metrics": {
                "max_load_count": 0,
                "load_duration": 158.9442,
                "qps": 3031.743,
                "serial_latency_p99": 0.008,
                "recall": 0.5065,
                "ndcg": 0.5493,
                "conc_num_list": [1, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100],
                "conc_qps_list": [175.7321, 838.1756, 1328.4196, 1676.7759, 1885.2717, 2329.0303, 2238.8839, 2307.6002, 2418.9697, 2502.9213, 2628.4562, 2611.9513, 2631.2078, 2709.1865, 2751.1792, 2749.1104, 2792.9155, 2752.8945, 2836.4445, 2904.4609, 3031.743],
                "conc_latency_p99_list": [0.004655693072453141, 0.004652024507522583, 0.004790452426299453, 0.005058524944633246, 0.0053853894943371415, 0.00560504300147295, 0.005771844685822725, 0.006148010149598122, 0.006257654917612672, 0.00643803995847702, 0.006523223061859608, 0.00653654379490763, 0.0069596841046586635, 0.00731352926902473, 0.007371303759515286, 0.007228717562556266, 0.007472157787531615, 0.0074205820478498935, 0.006961745805479586, 0.008283554406836629, 0.0073261844931170345]
            },
            "task_config": {
                "db": "Milvus",
                "db_config": {
                    "db_label": "2024-07-30T14:43:55.771839",
                    "uri": "**********"
                },
                "db_case_config": {
                    "index": "IVF_FLAT",
                    "metric_type": "COSINE",
                    "nlist": 1024,
                    "nprobe": 5
                },
                "case_config": {
                    "case_id": 50,
                    "custom_case": null,
                    "k": 100,
                    "concurrency_search_config": {
                        "num_concurrency": [1, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100],
                        "concurrency_duration": 30
                    }
                },
                "stages": ["drop_old", "load", "search_serial", "search_concurrent"]
            },
            "label": ":)"
        }
    ],
    "file_fmt": "result_{}_{}_{}.json"
}

在这里插入图片描述
2.hnsw 性能验证
条件:–m 8 --ef-construction 64 --ef-search 10 --k 10

nohup ./hnsw_10.sh > /root/octopus/benchmarker/dimension/hnsw_10.log  2>&1 & 
/usr/local/python3.12/bin/vectordbbench   milvushnsw --uri 'http://172.20.1.101:32437' --drop-old   --m 8 --ef-construction 64  --ef-search 10  --k 10

在这里插入图片描述

{
    "run_id": "1c945b28090941c7ae58ec55a8ae0ecb",
    "task_label": "1c945b28090941c7ae58ec55a8ae0ecb",
    "results": [{
            "metrics": {
                "max_load_count": 0,
                "load_duration": 138.8369,
                "qps": 3857.9497,
                "serial_latency_p99": 0.006,
                "recall": 0.6946,
                "ndcg": 0.7127,
                "conc_num_list": [1, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100],
                "conc_qps_list": [205.9066, 896.0748, 1535.6513, 1961.4574, 2282.5936, 2486.9112, 2473.0187, 2639.9002, 2792.597, 2825.9357, 2985.0966, 2992.8825, 3202.8998, 3336.8242, 3480.6602, 3195.9544, 3206.5109, 3249.2361, 3527.203, 3528.9396, 3857.9497],
                "conc_latency_p99_list": [0.004022291118651628, 0.003988313633389771, 0.004059490236081183, 0.0042587881341576575, 0.004422521588951349, 0.0045851776339113715, 0.0050087556691840295, 0.005091396714560687, 0.005392795985937118, 0.005527270000986755, 0.00542353574000299, 0.005898943385109305, 0.005861698154173791, 0.006148975464701652, 0.006199899067729712, 0.006067702007293701, 0.006825755665823817, 0.006885729782283306, 0.006695127539336682, 0.0061551205324009055, 0.006313137001730501]
            },
            "task_config": {
                "db": "Milvus",
                "db_config": {
                    "db_label": "2024-07-30T15:32:41.701653",
                    "uri": "**********"
                },
                "db_case_config": {
                    "index": "HNSW",
                    "metric_type": "COSINE",
                    "M": 8,
                    "efConstruction": 64,
                    "ef": 10
                },
                "case_config": {
                    "case_id": 50,
                    "custom_case": null,
                    "k": 10,
                    "concurrency_search_config": {
                        "num_concurrency": [1, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100],
                        "concurrency_duration": 30
                    }
                },
                "stages": ["drop_old", "load", "search_serial", "search_concurrent"]
            },
            "label": ":)"
        }
    ],
    "file_fmt": "result_{}_{}_{}.json"
}

2.hnsw 性能验证
条件: --m 8 --ef-construction 64 --ef-search 64 --k 64

nohup ./hnsw_10.sh > /root/octopus/benchmarker/dimension/hnsw_64.log 2>&1 & 
{
    "run_id": "0112f04d884a48e7b04a79601b501f43",
    "task_label": "0112f04d884a48e7b04a79601b501f43",
    "results": [{
            "metrics": {
                "max_load_count": 0,
                "load_duration": 99.8713,
                "qps": 3590.8011,
                "serial_latency_p99": 0.0068,
                "recall": 0.6842,
                "ndcg": 0.6988,
                "conc_num_list": [1, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100],
                "conc_qps_list": [204.2923, 903.9947, 1569.658, 1960.1058, 2254.7686, 2555.6955, 2661.9067, 2884.7484, 2974.3032, 2975.3197, 2988.5105, 3178.9354, 3299.7453, 3396.6382, 3327.4601, 3397.9266, 3465.914, 3466.3555, 3471.6151, 3504.3056, 3590.8011],
                "conc_latency_p99_list": [0.004091060114465654, 0.003925692438334226, 0.004029340751469135, 0.004241374858655035, 0.0044741668567061426, 0.004661575911566615, 0.004779618114605546, 0.00496285007596016, 0.005089158420264721, 0.005570173567533493, 0.005635122420825064, 0.0056590593174099925, 0.005516276902705431, 0.0058326821969822045, 0.005921696238219737, 0.006209327307716011, 0.006015772367082536, 0.0063866944853216406, 0.0059822171421721575, 0.005861425867676735, 0.00654305313937366]
            },
            "task_config": {
                "db": "Milvus",
                "db_config": {
                    "db_label": "2024-07-30T16:03:25.006315",
                    "uri": "**********"
                },
                "db_case_config": {
                    "index": "HNSW",
                    "metric_type": "COSINE",
                    "M": 8,
                    "efConstruction": 64,
                    "ef": 10
                },
                "case_config": {
                    "case_id": 50,
                    "custom_case": null,
                    "k": 10,
                    "concurrency_search_config": {
                        "num_concurrency": [1, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100],
                        "concurrency_duration": 30
                    }
                },
                "stages": ["drop_old", "load", "search_serial", "search_concurrent"]
            },
            "label": ":)"
        }
    ],
    "file_fmt": "result_{}_{}_{}.json"
}

<think>好的,我现在需要帮用户检查他们的Milvus集群状态。用户提供了kubectl get pod的输出,里面有很多Pod的状态信息。首先,我得仔细看一下每个Pod的READY状态和STATUS,找出哪些有问题。 首先注意到大部分Pod的READY都是0/1,这意味着容器还没有准备好。不过有些Pod比如milvus-minio-0到3,其中前三个是Running且READY是1/1,但milvus-minio-3是Pending,这可能有问题。Pending状态通常是因为资源不足,比如节点没有足够的CPU或内存,或者PVC无法绑定。用户需要检查集群的资源情况,看看节点是否有可用资源,或者存储配置是否正确。 接下来是etcd相关的Pod,milvus-etcd-0到2都是Running,但READY是0/1,可能还在启动过程中。不过它们的RESTARTS次数是1,可能需要查看日志看看有没有启动错误。同样的情况出现在datacoord、datanode、indexcoord等组件,都是Running但未就绪,可能需要等待更长时间或者检查依赖服务是否正常。 Pulsar相关的Pod问题比较明显,比如milvus-pulsar-bookie和broker都处于Init:0/1或Init:0/2状态,说明初始化容器没有完成。特别是milvus-pulsar-zookeeper的三个Pod都已经Running且READY,但其他Pulsar组件可能依赖ZooKeeper,需要确认ZooKeeper是否完全就绪,并且网络通信没有问题。初始化失败可能是配置错误或者初始化任务执行失败,需要查看这些Pod的日志,特别是初始化容器的日志。 还有milvus-pulsar-pulsar-init-wd2kr这个初始化Pod也处于Init:0/2,说明初始化步骤没有完成。可能需要等待更长时间,或者手动检查初始化任务的状态。此外,milvus-pulsar-recovery-0也是Init状态,可能需要关注。 对于所有Restarts次数较多的Pod,比如milvus-datacoord重启了1次,虽然次数不算多,但需要确认是否有持续重启的情况。如果Pod反复重启,可能是应用本身的问题或者配置错误。 用户可能需要执行的步骤包括:检查Pending的Pod的事件信息,使用kubectl describe pod milvus-minio-3查看具体原因;检查初始化失败的Pod的日志,使用kubectl logs [pod名] --previous查看之前的日志;确认集群资源是否足够,特别是节点是否有足够资源分配;检查网络和存储配置是否正确;等待一段时间看是否Pod能自动恢复,特别是初始化过程可能需要较长时间。 最后,建议用户按照这些步骤排查,先解决Pending和Init的问题,因为这些可能阻碍整个集群的启动。如果问题依然存在,需要更详细的日志分析。</think>根据你提供的集群状态,以下是对Milvus各组件的详细分析及排查建议: --- ### 一、关键问题定位 #### 1. **Pending状态的Pod** - `milvus-minio-3` 处于 `Pending` 状态 **可能原因**:节点资源不足/存储卷(PVC)无法绑定 **排查命令**: ```bash kubectl describe pod milvus-minio-3 -n <namespace> kubectl get events --sort-by=.metadata.creationTimestamp ``` #### 2. **Init阻塞的Pulsar组件** - `milvus-pulsar-bookie-*`, `milvus-pulsar-broker-*`, `milvus-pulsar-proxy-*` 均卡在 `Init:0/1` 或 `Init:0/2` **关键依赖**:这些组件依赖ZooKeeper初始化元数据 **现状分析**:虽然 `milvus-pulsar-zookeeper-*` 已就绪,但初始化任务 `milvus-pulsar-pulsar-init-wd2kr` 仍处于 `Init:0/2` **排查命令**: ```bash kubectl logs milvus-pulsar-pulsar-init-wd2kr -c init ``` #### 3. **持续重启的组件** - `milvus-etcd-*`, `milvus-rootcoord`, `milvus-proxy` 等组件均有1次重启 **潜在风险**:若重启次数持续增加,需关注日志中的错误模式 **日志提取**: ```bash kubectl logs milvus-etcd-0 --previous ``` --- ### 二、健康组件确认 | 组件类型 | 正常工作的Pod | |----------------|-------------------------------| | **MinIO** | milvus-minio-0,1,2 (READY 1/1)| | **ZooKeeper** | milvus-pulsar-zookeeper-0,1,2 | --- ### 三、分步排查指南 #### 步骤1:解决MinIO-3的Pending问题 ```bash # 查看节点资源分配 kubectl top nodes # 检查存储类配置 kubectl get pvc -l app=minio ``` #### 步骤2:诊断Pulsar初始化故障 ```bash # 检查初始化容器的日志(注意-c指定容器名称) kubectl logs milvus-pulsar-pulsar-init-wd2kr -c initialize-zookeeper kubectl logs milvus-pulsar-pulsar-init-wd2kr -c initialize-cluster-metadata ``` #### 步骤3:验证网络连通性 ```bash # 在任意Pod内测试ZooKeeper连接 kubectl exec -it milvus-minio-0 -- curl milvus-pulsar-zookeeper-0:2181 ``` #### 步骤4:检查持久化存储 ```bash # 确认所有PVC已绑定 kubectl get pvc -n <namespace> # 查看etcd数据目录权限 kubectl exec milvus-etcd-0 -- ls -l /var/run/etcd ``` --- ### 四、典型错误场景参考 1. **ZooKeeper连接超时** ➔ 表现:Pulsar组件日志中出现 `ConnectionLossException` ➔ 解决方案:增加ZooKeeper的 `maxClientCnxns` 参数 2. **MinIO节点亲和性冲突** ➔ 表现:`No nodes available` 事件 ➔ 解决方案:调整Pod的 `nodeSelector` 或添加污点容忍 3. **Etcd数据目录权限问题** ➔ 表现:`etcd` 容器日志报 `permission denied` ➔ 解决方案:在PersistentVolume中设置 `fsGroup: 1001` --- ### 五、恢复建议 1. **强制重启初始化任务**: ```bash kubectl delete pod milvus-pulsar-pulsar-init-wd2kr ``` 2. **扩容集群节点**(如果是资源不足导致Pending) 建议优先解决 `milvus-minio-3` 的Pending问题和Pulsar初始化阻塞问题,这两个关键点解决后其他组件通常会逐步恢复正常。如果问题持续,需要结合具体错误日志进一步分析。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT_Octopus

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值