向量索引指標

本頁面列出與您在 AlloyDB Omni 中產生的向量索引相關的指標。安裝alloydb_scann擴充功能後,即可使用 pg_stat_ann_indexes 檢視畫面查看這些指標。

如要進一步瞭解如何查看指標,請參閱「查看向量索引指標」。

可用性指標

可用性指標包括可協助您瞭解索引使用狀態的指標,例如索引設定和索引掃描次數。

指標名稱 資料類型 說明
relid OID 包含向量索引的表格專屬 ID
indexrelid OID 向量索引的專屬 ID
schemaname NAME 擁有索引的結構定義名稱
relname NAME 包含索引的資料表名稱
indexrelname NAME 索引名稱
indextype NAME 索引類型。這個值一律會設為 scann
indexconfig TEXT[] 建立索引時定義的設定,例如葉片計數和量化器
indexsize TEXT 索引大小
indexscan BIGINT 在索引上啟動的索引掃描次數

調整指標

調整指標可提供目前的索引最佳化洞察資料,讓您套用建議,加快查詢效能。

指標名稱 資料類型 說明
insertcount BIGINT 索引的插入作業數。這項指標也包含建立索引前存在的資料列數。
updatecount BIGINT 索引的更新作業數。這項指標不會將任何 HOT 更新納入考量。
deletecount BIGINT 索引的刪除作業數量。
distribution JSONB 索引中所有分區的向量分布情形。

下列欄位會顯示分布情形:
  • maximum (INT8):所有分區的向量數量上限。
  • minimum (INT8):所有分區的向量數量下限。
  • average (FLOAT):所有分區的平均向量數。
  • outliers (INT8[]):所有分區中的頂尖離群值。這個值會顯示前 20 個離群值。

注意:由於 K 平均值叢集演算法的固有特性,即使是初始建立索引時,向量在各個分割區的分布情況也一定會出現某種程度的差異。
distributionpercentile JSONB 向量索引分配情形有助於瞭解 ScaNN 索引各分割區之間的向量分配情形。系統會根據建立索引時定義的 num_leaves 值建立分割區。

向量索引分布包含第 10、25、50、75、90、95、99 和第 100 個百分位數的 bucket。每個 bucket 都包含下列值:
  • 指定百分位數的分區中向量數量。
  • 向量位於目前和先前百分位數所定義範圍內的分區數量。

注意:由於 K 平均值叢集演算法的固有特性,即使是初始建立索引,向量在各個分割區的分布情況也一定會出現某種程度的差異。

根據指標調整建議

更改
insertcountupdatecountdeletecount 指標會一起顯示索引向量的變化或突變。
索引是使用特定數量的向量和分區建立而成。對向量索引執行插入、更新或刪除等作業時,只會影響向量所在的初始分割區集。因此,每個分區中的向量數量會隨時間波動,可能影響召回率、每秒查詢次數或兩者。
如果 ANN 搜尋查詢長期出現速度緩慢或準確度問題 (例如 QPS 偏低或召回率不佳),請考慮查看這些指標。如果變動次數相對於向量總數偏高,可能表示需要重新建立索引。
分布
distribution」指標會顯示所有分割區的向量分布情形。
建立索引時,系統會以特定數量的向量和固定分區建立索引。系統會根據這項考量進行分割程序和後續分配。如果新增其他向量,系統會將這些向量分配到現有分區,因此與建立索引時的分配方式不同。由於最終分配並未同時考量所有向量,因此召回率、QPS 或兩者都可能受到影響。
如果發現 ANN 搜尋查詢的成效逐漸下滑,例如回應時間變慢或結果準確度降低 (以 QPS 或喚回度衡量),請考慮檢查這項指標並重新建立索引。
分布百分位數
distributionpercentile 指標是 pg_stat_ann_indexes 檢視畫面中的向量索引分布情形,可協助您瞭解 ScaNN 索引各區間的向量分布情形。系統會根據建立索引時定義的 num_leaves 值建立分區。
在初始資料列集上建立 alloydb_scann 索引時,如果設定 num_leaves,索引可能會因資料作業 (偏斜突變) 而改變向量在分割區中的分布情形,或大幅增加向量數量。這些變更可能會導致每秒查詢次數或召回率下降,或兩者皆是。如果突變導致索引分布發生變化,向量索引分布就會提供信號。這項資訊有助於判斷是否需要重新建立索引,或變更搜尋時間設定是否有助於提升查詢效能。
在向量索引中,向量在各分區的分布很少完全平均。這種不平衡稱為「非均勻分布」。通常會出現某種程度的不一致,這並不代表您需要重新建立索引。非均勻分布具有下列特徵:
  • 向量數量的變異數較低。變異數的計算方式為
    $(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})) $ where "p" is a vector index distribution bucket.
  • 任何百分位數的向量數量為
    $< 8 x (\frac{num\_rows\ during\ index\ creation\ time}{ num\_leaves})$

    如果不符合上述條件,則視每秒查詢次數和召回率的影響程度,可能需要 REINDEX
以下情況雖然不如非均勻分配常見,但仍有可能發生:
  • 近似均勻索引:當大多數分區的非零向量數量相同,且向量數量變異數較低時,即為近似均勻索引。如果每個分區中的向量數大於 $> 8 * 平均向量$,則需要 REINDEXindex_creation_time
  • 稀疏索引:如果超過 50% 的分割區為空白,也會出現稀疏索引。舉例來說,如果資料表發生多次刪除作業,系統就會建立稀疏索引。在此情況下,向量會集中在少數幾個分區,導致每個分區的向量數量增加。發生這種情況時,請捨棄索引並重新建立。