向量索引指标

本页面列出了与您在 AlloyDB Omni 中生成的向量索引相关的指标。您可以使用安装 alloydb_scann 扩展程序时可用的 pg_stat_ann_indexes 视图查看这些指标。

如需详细了解如何查看指标,请参阅查看向量索引指标

易用性指标

易用性指标包括一些指标,这些指标可帮助您通过指标(例如索引配置和索引扫描次数)了解索引利用率的状态。

指标名称 数据类型 说明
relid OID 包含向量索引的表的唯一标识符
indexrelid OID 向量索引的唯一标识符
schemaname NAME 拥有索引的架构的名称
relname NAME 包含索引的表的名称
indexrelname NAME 索引的名称
indextype NAME 索引的类型。此值始终设置为 scann
indexconfig TEXT[] 在创建索引时为其定义的配置,例如叶数量和量化器
indexsize TEXT 索引大小
indexscan BIGINT 对索引启动的索引扫描的次数

调优指标

调优指标可让您深入了解当前索引优化,从而应用建议以提高查询性能。

指标名称 数据类型 说明
insertcount BIGINT 对索引执行的插入操作的次数。此指标还包括在创建索引之前存在的行数。
updatecount BIGINT 对索引执行的更新操作的次数。此指标不考虑任何热更新。
deletecount BIGINT 对索引执行的删除操作的次数。
distribution JSONB 索引的所有分区中的向量分布。

以下字段展示了分布情况:
  • maximum (INT8):所有分区中的向量数上限。
  • minimum (INT8):所有分区中的向量数下限。
  • average (FLOAT):所有分区中的向量平均数。
  • outliers (INT8[]):所有分区中排名靠前的离群值。此值显示了前 20 个离群值。

注意:由于 K-means 聚类算法固有的特性,即使在最初创建索引时,向量在各个分区之间的分布也始终会存在一定程度的差异。
distributionpercentile JSONB 向量索引分布有助于您了解 ScaNN 索引各个分区之间的向量分布情况。这些分区是根据创建索引期间定义的 num_leaves 值创建的。

向量索引分布包含第 10、25、50、75、90、95、99 和 100 百分位的分桶。每个分桶都包含以下值:
  • 在指定百分位数时分区中存在的向量数量。
  • 向量位于当前百分位数和上一个百分位数定义的范围内的分区的数量。

注意:由于 K-means 聚类算法固有的特性,即使在最初创建索引时,向量在各个分区的分布也始终会存在一定程度的差异。

基于指标的调优建议

Mutation
insertcountupdatecountdeletecount 指标一起展示了索引向量中的更改或变更。
系统会使用特定数量的向量和分区来创建索引。对向量索引执行插入、更新或删除等操作时,它仅会影响向量所在的初始分区集。因此,每个分区中的向量数量会随时间推移而波动,这可能会影响召回率、QPS 或者同时影响两者。
如果您在一段时间内遇到 ANN 搜索查询速度较慢或准确性问题(例如 QPS 较低或召回率较差),请考虑查看这些指标。相对于向量总数,变更次数较多可能表示需要重新编制索引。
分布
distribution 指标展示所有分区中的向量分布。
当您创建索引时,系统会使用特定数量的向量和固定分区来创建索引。分区过程和后续分布过程会根据此考虑因素进行。如果添加了其他向量,则系统会在现有分区之间对其进行分区,导致分布与创建索引时的分布不同。由于最终分布不会同时考虑所有向量,因此召回率、QPS 或两者都可能会受到影响。
如果您发现 ANN 搜索查询的性能逐渐下降,例如响应时间变慢或结果准确性降低(按 QPS 或召回率衡量),请考虑检查此指标并重新编制索引。
分布百分位
distributionpercentile 指标是 pg_stat_ann_indexes 视图中的向量索引分布,可帮助您了解 ScaNN 索引各分区之间的向量分布情况。这些分区是根据创建索引期间定义的 num_leaves 值创建的。
当您通过设置 num_leaves 在初始行集上创建 alloydb_scann 索引时,该索引可能会因数据操作(倾斜突变)而更改向量在各个分区中的分布,或者向量数量可能会显著增加。这些更改可能会导致 QPS、召回率下降,或者两者都下降。如果突变导致索引分布发生变化,向量索引分布可以为您提供相关信号。这些信息可帮助您确定是否需要重新编制索引,或者更改搜索时间配置是否有助于提高查询性能。
在向量索引中,向量在各个分区中的分布很少是完全均匀的。这种不平衡称为非均匀分布。通常,存在一定程度的不均匀性是正常现象,并不意味着您需要重新编制索引。非均匀分布具有以下特征:
  • 向量数量的方差较低。方差的计算公式为
    $(P100(num\_vectors) - p10(num\_vectors))*(\frac{num\_leaves}{total\_num\_row})$
  • 具有 0 个向量的分区的数量较少,可能不到 30% 的分区。
  • 分区数量的方差较低。
    $ variance _{p} = abs(p_{num\_partitions} - num\_leaves * (p_{percentile} - p-1_{percentile})) $,其中“p”是向量索引分布分桶。
  • 任意百分位的向量数量为
    $< 8 x (\frac{num\_rows\ during\ index\ creation\ time}{ num\_leaves})$

    如果不满足这些条件,则可能需要进行 REINDEX,具体取决于 QPS 和召回率受影响的程度。
以下情况虽然不如非均匀分布那么常见,但也可能会发生:
  • 近似均匀索引:如果大多数分区具有相同的非零向量数量,并且向量数量的方差较低,则为近似均匀索引。如果每个分区中的向量数量在 index_creation_time 时为 $> 8 * 平均向量$,则需要进行 REINDEX
  • 稀疏索引:如果有 50% 以上的分区为空,也会出现稀疏索引。例如,当表中发生多次删除操作时,系统会创建稀疏索引。这种情况会导致向量集中在少数几个分区中,从而增加每个分区中的向量数量。发生这种情况时,请删除索引并重新创建。