向量索引統計資料

本頁面說明內建的 Spanner 表格,其中儲存向量索引的統計資料。您可以運用向量索引統計資料,查看向量索引的成效、找出有待加強之處,並根據指標調整索引。

您可以使用 SQL 陳述式,從 SPANNER_SYS.VECTOR_INDEX_STATS 資料表擷取統計資料。

Spanner 會在 SPANNER_SYS 結構定義中提供向量索引統計資料。您可以透過下列方式存取 SPANNER_SYS 資料:

向量索引統計資料

SPANNER_SYS.VECTOR_INDEX_STATS 包含資料庫中每個向量索引的統計資料,並依 STATISTICS_COLLECTION_TIMESTAMP 排序。Spanner 每三天會收集一次每個向量索引的資料。收集資料後不久,Spanner 就會在 VECTOR_INDEX_STATS 資料表中提供資料。這個表格提供的資訊可深入瞭解索引,方便您調整並套用建議,加快向量搜尋效能。

資料欄名稱 說明 調整指引
START_TIME Spanner 收集索引指標的時間。 不適用
VECTOR_INDEX_NAME 向量索引的名稱,與 CREATE VECTOR INDEX 陳述式中的名稱相同。 不適用
NUM_LEAVES 這個向量索引中使用的葉節點 (也稱為叢集) 總數。這個數字是在建立向量索引時決定。Spanner 會適應性地重塑向量索引,因此這項指標可能會隨時間改變。 如果在建立索引資料表後新增許多資料列,部分叢集可能會變得相當大,進而影響查詢延遲時間。如果索引中的叢集數量等於或大於資料表列數的平方根,建議您使用更多叢集重建索引。
NUM_ZERO_SIZE_CLUSTERS_SAMPLED 向量索引中取樣的空白叢集數量。空白叢集不會有任何指派的資料列。

隨著時間推移,資料表會新增及刪除資料列,部分叢集可能會變成空白。如果有很多空白叢集,向量索引可能已過時。如果 10% 以上的叢集為空,請考慮以較少的叢集重建索引。對於較大的向量索引,Spanner 會使用隨機取樣來限制測量成本。因此,這項指標代表取樣大小為零的叢集數量。如要將此值轉換為大小為零的叢集估計數量,可以使用下列查詢:

SELECT NUM_ZERO_SIZE_CLUSTERS_SAMPLED / NUM_CLUSTERS_SAMPLED AS ESTIMATED_PERCENT_OF_CLUSTERS_WITH_SIZE_ZERO

CLUSTER_SIZE_PERCENTILES 向量索引會將建立索引的嵌入內容劃分為鄰近向量的叢集。這個分配資料欄會提供這些叢集大小的某些百分位數值。 向量索引採用的 K-means 分群程序通常會產生大小不一的叢集。因此預計會出現一些不平衡情況。如果叢集大小出現嚴重偏差,搜尋較大的叢集時,查詢效能就會變慢。如果第 99 個百分位數的叢集大小至少是第 50 個百分位數的 8 倍,偏差程度就會很嚴重。請參閱查詢範例
CLUSTER_AVERAGE_DISTANCE_TO_CENTROID_PERCENTILES 每個叢集都有中心點,也就是群集中心。為達到良好的召回率,向量通常會根據您在建立索引時選擇的設定,指派給附近的質心。針對每個叢集,Spanner 會計算從質心到所有指派向量的估計平均距離。由於叢集之間自然存在差異,Spanner 會以分布形式回報這項指標,並以百分位數值清單表示。 這項指標無法在向量索引之間比較 (尤其是歐幾里得索引和餘弦索引的縮放比例不同)。請分別追蹤每個向量索引的這項指標。如果第 99 個百分位數的值是歷史最低值的兩倍,請考慮重建索引,將值降回原先的低點。請參閱查詢範例 2

查詢範例 1

下列查詢會針對特定向量索引,隨時間回報第 99 個百分位數的叢集大小除以中位數叢集大小。如果第 99 個百分位數的叢集大小至少是第 50 個百分位數叢集大小的 8 倍,請考慮重建索引。

 SELECT VECTOR_INDEX_NAME,
        START_TIME,
        SUM(CASE WHEN percentile = 99 THEN value_at_percentile ELSE 0 END)
        / SUM(CASE WHEN percentile = 50 THEN value_at_percentile ELSE 0 END) as cluster_size_imbalance
FROM (
  SELECT v.VECTOR_INDEX_NAME,
         v.START_TIME, d.percentile,
         d.value_at_percentile
  FROM SPANNER_SYS.VECTOR_INDEX_METRICS_HISTORY AS v,
  UNNEST(v.CLUSTER_AVERAGE_DISTANCE_TO_CENTROID_PERCENTILES)
AS d)
WHERE VECTOR_INDEX_NAME = "VecIndex2"
GROUP BY 1, 2;

查詢輸出

VECTOR_INDEX_NAME START_TIME cluster_size_imbalance
VecIndex2 2025-12-10 10:09:55.322415+00:00 3.288
VecIndex2 2025-12-07 10:10:02.362223+00:00 3.11
VecIndex2 2025-12-04 10:09:55.180895+00:00 2.98
VecIndex2 2025-12-01 10:10:01.680543+00:00 3.01
VecIndex2 2025-11-28 10:10:02.130079+00:00 2.99

查詢範例 2

下列查詢會回報每個向量索引的第 99 個百分位數距離質心 (隨時間變化)。這項指標可間接顯示回想成效。值的確切意義取決於您的嵌入。個別追蹤每個向量索引,以及追蹤時間序列。如果特定索引的第 99 個百分位數值是歷史最低值的兩倍,請考慮重建索引。

SELECT v.VECTOR_INDEX_NAME,
       v.START_TIME,
       d.value_at_percentile AS distance_to_centroid_99p
FROM SPANNER_SYS.VECTOR_INDEX_METRICS_HISTORY AS v,
UNNEST(v.CLUSTER_AVERAGE_DISTANCE_TO_CENTROID_PERCENTILES) AS d
WHERE d.percentile=99
ORDER BY VECTOR_INDEX_NAME, START_TIME DESC;

查詢輸出

VECTOR_INDEX_NAME START_TIME distance_to_centroid_99p
ANNVectorBase_VI 2025-12-10 10:09:55.322415+00:00 1.109
ANNVectorBase_VI 2025-12-07 10:10:02.362223+00:00 1.11
ANNVectorBase_VI 2025-12-04 10:09:55.180895+00:00 1.18
ANNVectorBase_VI 2025-12-01 10:10:01.680543+00:00 1.11
ANNVectorBase_VI 2025-11-28 10:10:02.130079+00:00 1.04

資料保留

SPANNER_SYS.VECTOR_INDEX_METRICS_HISTORY 系統資料表會保留過去 30 天的資料。

後續步驟