本頁面列出與您在 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 |
索引中所有分區的向量分布情形。 下列欄位會顯示分布情形:
注意:由於 K 平均值叢集演算法的固有特性,即使是初始建立索引時,向量在各個分割區的分布情況也一定會出現某種程度的差異。 |
distributionpercentile |
JSONB |
向量索引分配情形有助於瞭解 ScaNN 索引各分割區之間的向量分配情形。系統會根據建立索引時定義的 num_leaves 值建立分割區。向量索引分布包含第 10、25、50、75、90、95、99 和第 100 個百分位數的 bucket。每個 bucket 都包含下列值:
注意:由於 K 平均值叢集演算法的固有特性,即使是初始建立索引,向量在各個分割區的分布情況也一定會出現某種程度的差異。 |
根據指標調整建議
- 更改
insertcount
、updatecount
和deletecount
指標會一起顯示索引向量的變化或突變。- 索引是使用特定數量的向量和分區建立而成。對向量索引執行插入、更新或刪除等作業時,只會影響向量所在的初始分割區集。因此,每個分區中的向量數量會隨時間波動,可能影響召回率、每秒查詢次數或兩者。
- 如果 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 * 平均向量$,則需要
REINDEX
。index_creation_time
- 稀疏索引:如果超過 50% 的分割區為空白,也會出現稀疏索引。舉例來說,如果資料表發生多次刪除作業,系統就會建立稀疏索引。在此情況下,向量會集中在少數幾個分區,導致每個分區的向量數量增加。發生這種情況時,請捨棄索引並重新建立。
- 近似均勻索引:當大多數分區的非零向量數量相同,且向量數量變異數較低時,即為近似均勻索引。如果每個分區中的向量數大於 $> 8 * 平均向量$,則需要