벡터 색인 통계

이 페이지에서는 벡터 색인에 관한 통계를 저장하는 기본 제공 Spanner 테이블을 설명합니다. 벡터 색인 통계를 사용하여 벡터 색인의 성능을 검토하고, 개선이 필요한 영역을 식별하며, 측정항목을 기준으로 색인을 조정할 수 있습니다.

SQL 문을 사용하여 SPANNER_SYS.VECTOR_INDEX_STATS 테이블에서 통계를 검색할 수 있습니다.

Spanner는 SPANNER_SYS 스키마에서 벡터 색인 통계를 제공합니다. 다음 방법을 사용하여 SPANNER_SYS 데이터에 액세스할 수 있습니다.

벡터 색인 통계

SPANNER_SYS.VECTOR_INDEX_STATS에는 데이터베이스의 각 벡터 색인에 관한 통계가 포함되어 있으며, STATISTICS_COLLECTION_TIMESTAMP로 정렬되어 있습니다. Spanner는 3일마다 각 벡터 색인에 관한 데이터를 수집합니다. 데이터가 수집된 후 곧 Spanner는 VECTOR_INDEX_STATS 테이블에서 데이터를 제공합니다. 이 표에 있는 정보를 통해 색인에 대한 유용한 정보를 얻을 수 있으므로 더 빠른 벡터 검색 성능을 위해 권장사항을 조정하고 적용할 수 있습니다.

열 이름 설명 조정 가이드
START_TIME Spanner가 색인 측정항목을 수집한 시간입니다. 해당 없음
VECTOR_INDEX_NAME CREATE VECTOR INDEX 문에 지정된 벡터 색인의 이름입니다. 해당 없음
NUM_LEAVES 이 벡터 색인에 사용된 총 리프 수 (클러스터라고도 함)입니다. 이 숫자는 벡터 색인 생성 시 결정됩니다. Spanner가 적응적으로 벡터 색인을 재구성하므로 시간이 지남에 따라 변경될 수 있습니다. 생성 후 색인이 생성된 테이블에 행이 많이 추가되면 일부 클러스터가 매우 커져 쿼리 지연 시간에 영향을 줄 수 있습니다. 인덱스의 클러스터 수가 테이블의 행 수의 제곱근보다 크거나 같으면 클러스터 수를 늘려 인덱스를 재구성하는 것이 좋습니다.
NUM_ZERO_SIZE_CLUSTERS_SAMPLED 벡터 색인에서 샘플링된 빈 클러스터 수입니다. 빈 클러스터에는 할당된 행이 없습니다.

시간이 지남에 따라 테이블에서 행이 추가되고 삭제되면 일부 클러스터가 비어 있을 수 있습니다. 빈 클러스터가 많으면 벡터 색인이 오래되었을 수 있습니다. 클러스터의 10% 이상이 비어 있는 경우 클러스터 수를 줄여 인덱스를 다시 빌드하는 것이 좋습니다. 더 큰 벡터 색인의 경우 Spanner는 무작위 샘플링을 사용하여 측정 비용을 제한합니다. 따라서 이 측정항목은 샘플링된 크기가 0인 클러스터 수를 나타냅니다. 이를 크기가 0인 클러스터의 예상 수로 변환하려면 다음 쿼리를 사용하면 됩니다.

SELECT NUM_ZERO_SIZE_CLUSTERS_SAMPLED / NUM_CLUSTERS_SAMPLED AS ESTIMATED_PERCENT_OF_CLUSTERS_WITH_SIZE_ZERO

CLUSTER_SIZE_PERCENTILES 벡터 색인은 색인이 생성된 임베딩을 가까운 벡터의 클러스터로 나눕니다. 이 분포 열은 이러한 클러스터의 크기에 관한 일부 백분위수 값을 제공합니다. 벡터 색인 생성을 지원하는 K-평균 클러스터링 프로세스는 일반적으로 다양한 크기의 클러스터를 생성합니다. 따라서 불균형이 발생할 수 있습니다. 클러스터 크기에 심각한 편차가 있으면 더 큰 클러스터를 검색할 때 쿼리 성능이 느려집니다. 99번째 백분위수 클러스터 크기가 50번째 백분위수 클러스터 크기의 8배 이상이면 편차가 심각합니다. 예시 쿼리 1을 참고하세요.
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일 동안의 데이터를 보관합니다.

다음 단계