Statistik indeks vektor

Halaman ini menjelaskan tabel Spanner bawaan yang menyimpan statistik tentang indeks vektor Anda. Anda dapat menggunakan statistik indeks vektor untuk meninjau performa indeks vektor, mengidentifikasi area yang perlu ditingkatkan, dan menyesuaikan indeks berdasarkan metrik.

Anda dapat mengambil statistik dari tabel SPANNER_SYS.VECTOR_INDEX_STATS menggunakan pernyataan SQL.

Spanner menyediakan statistik indeks vektor dalam skema SPANNER_SYS. Anda dapat menggunakan cara berikut untuk mengakses data SPANNER_SYS:

Statistik indeks vektor

SPANNER_SYS.VECTOR_INDEX_STATS berisi statistik tentang setiap indeks vektor dalam database Anda, yang diurutkan berdasarkan STATISTICS_COLLECTION_TIMESTAMP. Spanner mengumpulkan data tentang setiap indeks vektor setiap tiga hari. Segera setelah data dikumpulkan, Spanner akan menyediakan data tersebut di tabel VECTOR_INDEX_STATS. Informasi yang ditemukan dalam tabel ini memberikan insight tentang indeks Anda, sehingga Anda dapat menyesuaikan dan menerapkan rekomendasi untuk performa penelusuran vektor yang lebih cepat.

Nama kolom Deskripsi Panduan penyesuaian
START_TIME Waktu saat Spanner mengumpulkan metrik indeks. Tidak berlaku
VECTOR_INDEX_NAME Nama indeks vektor, seperti yang diberikan dalam pernyataan CREATE VECTOR INDEX. Tidak berlaku
NUM_LEAVES Jumlah total leaf (juga dikenal sebagai cluster) yang digunakan dalam indeks vektor ini. Jumlah ini ditentukan pada saat pembuatan indeks vektor. Nilai ini dapat berubah seiring waktu saat Spanner secara adaptif membentuk ulang indeks vektor. Jika banyak baris ditambahkan ke tabel yang diindeks setelah pembuatan, ada kemungkinan beberapa cluster akan menjadi cukup besar, yang dapat memengaruhi latensi kueri. Sebaiknya bangun ulang indeks dengan lebih banyak cluster jika jumlah cluster dalam indeks sama dengan atau lebih dari akar kuadrat jumlah baris dalam tabel.
NUM_ZERO_SIZE_CLUSTERS_SAMPLED Jumlah cluster kosong yang disampel dalam indeks vektor. Cluster kosong tidak memiliki baris yang ditetapkan padanya.

Saat baris ditambahkan dan dihapus dari tabel seiring waktu, beberapa cluster mungkin menjadi kosong. Jika ada banyak cluster kosong, indeks vektor kemungkinan sudah tidak berlaku. Jika 10% atau lebih cluster kosong, pertimbangkan untuk membangun ulang indeks dengan lebih sedikit cluster. Untuk indeks vektor yang lebih besar, Spanner menggunakan pengambilan sampel acak untuk membatasi biaya pengukuran. Oleh karena itu, metrik ini menampilkan jumlah cluster berukuran nol yang disampel. Untuk mengonversinya menjadi perkiraan jumlah cluster berukuran nol, Anda dapat menggunakan kueri berikut:

SELECT NUM_ZERO_SIZE_CLUSTERS_SAMPLED / NUM_CLUSTERS_SAMPLED AS ESTIMATED_PERCENT_OF_CLUSTERS_WITH_SIZE_ZERO

CLUSTER_SIZE_PERCENTILES Indeks vektor membagi embedding terindeks ke dalam cluster vektor terdekat. Kolom distribusi ini memberikan beberapa nilai persentil dari ukuran cluster ini. Proses pengelompokan K-means, yang mendukung pengindeksan vektor, biasanya menghasilkan cluster dengan berbagai ukuran. Akibatnya, beberapa ketidakseimbangan diharapkan terjadi. Jika ada perbedaan ukuran cluster yang signifikan, performa kueri akan menjadi lebih lambat saat menelusuri cluster yang lebih besar. Penyimpangan berat jika ukuran cluster persentil ke-99 setidaknya 8 kali lebih besar daripada ukuran cluster persentil ke-50. Lihat contoh kueri 1.
CLUSTER_AVERAGE_DISTANCE_TO_CENTROID_PERCENTILES Setiap cluster memiliki titik tengah, atau sentroid. Untuk mencapai recall yang baik, vektor umumnya ditetapkan ke centroid terdekat, sesuai dengan konfigurasi yang Anda pilih selama pembuatan indeks. Untuk setiap cluster, Spanner menghitung estimasi jarak rata-rata dari sentroid ke semua vektor yang ditetapkan. Karena varians alami di antara cluster, Spanner melaporkan metrik ini sebagai distribusi, yang diberikan sebagai daftar nilai persentil. Metrik ini tidak dapat dibandingkan antara indeks vektor (khususnya, indeks Euclidean dan indeks kosinus diskalakan secara berbeda). Lacak metrik ini dari waktu ke waktu untuk setiap indeks vektor secara terpisah. Jika nilai persentil ke-99 berlipat ganda dari nilai terendah historisnya, pertimbangkan untuk membangun ulang indeks untuk menurunkannya kembali. Lihat contoh kueri 2.

Contoh kueri 1

Kueri berikut melaporkan ukuran cluster persentil ke-99 dibagi dengan ukuran cluster median untuk indeks vektor tertentu, dari waktu ke waktu. Jika ukuran cluster persentil ke-99 setidaknya 8 kali lebih besar daripada ukuran cluster persentil ke-50, pertimbangkan untuk membangun ulang indeks Anda."

 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;

Output kueri

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 28-11-2025 10.10.02.130079+00:00 2,99

Contoh kueri 2

Kueri berikut melaporkan jarak persentil ke-99 ke centroid untuk setiap indeks vektor dari waktu ke waktu. Metrik ini merupakan indikasi tidak langsung dari performa recall. Arti persis nilai bergantung pada sematan Anda. Lacak setiap indeks vektor satu per satu, dan sebagai deret waktu. Jika nilai persentil ke-99 berlipat ganda dari nilai terendah historisnya untuk indeks tertentu, pertimbangkan untuk membangun ulang indeks.

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;

Output kueri

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 28-11-2025 10.10.02.130079+00:00 1,04

Retensi data

Tabel sistem SPANNER_SYS.VECTOR_INDEX_METRICS_HISTORY menyimpan data yang mencakup 30 hari sebelumnya.

Langkah berikutnya