Metrik indeks vektor

Pilih versi dokumentasi:

Halaman ini mencantumkan metrik yang terkait dengan indeks vektor yang Anda buat di AlloyDB Omni. Anda dapat melihat metrik ini menggunakan tampilan pg_stat_ann_indexes yang tersedia saat Anda menginstal ekstensi alloydb_scann.

Untuk mengetahui informasi selengkapnya tentang cara melihat metrik, lihat Melihat metrik indeks vektor.

Metrik kegunaan

Metrik kegunaan mencakup metrik yang membantu Anda memahami status penggunaan indeks dengan metrik, seperti konfigurasi indeks dan jumlah pemindaian indeks.

Nama metrik Jenis data Deskripsi
relid OID ID unik tabel yang berisi indeks vektor
indexrelid OID ID unik indeks vektor
schemaname NAME Nama skema yang memiliki indeks
relname NAME Nama tabel yang berisi indeks
indexrelname NAME Nama indeks
indextype NAME Jenis indeks. Nilai ini selalu ditetapkan ke scann
indexconfig TEXT[] Konfigurasi, seperti jumlah daun dan penguantisasi, yang ditentukan untuk indeks saat dibuat
indexsize TEXT Ukuran indeks
indexscan BIGINT Jumlah pemindaian indeks yang dimulai pada indeks

Metrik penyempurnaan

Metrik penyempurnaan memberikan insight tentang pengoptimalan indeks Anda saat ini, sehingga Anda dapat menerapkan rekomendasi untuk performa kueri yang lebih cepat.

Nama metrik Jenis data Deskripsi
insertcount BIGINT Jumlah operasi penyisipan pada indeks. Metrik ini juga mencakup jumlah baris yang ada sebelum indeks dibuat.
updatecount BIGINT Jumlah operasi pembaruan pada indeks. Metrik ini tidak memperhitungkan pembaruan HOT apa pun.
deletecount BIGINT Jumlah operasi penghapusan pada indeks.
distribution JSONB Distribusi vektor di semua partisi untuk indeks.

Kolom berikut menunjukkan distribusi:
  • maximum (INT8): Jumlah maksimum vektor di semua partisi.
  • minimum (INT8): Jumlah minimum vektor di semua partisi.
  • average (FLOAT) : Jumlah rata-rata vektor di semua partisi.
  • outliers (INT8[]): Outlier teratas di semua partisi. Nilai ini menunjukkan 20 outlier teratas.

Catatan: Karena karakteristik algoritma pengelompokan K-means yang melekat, akan selalu ada tingkat varians dalam distribusi vektor di seluruh partisi, bahkan saat indeks awalnya dibuat.
distributionpercentile JSONB Distribusi indeks vektor membantu Anda memahami distribusi vektor antara partisi indeks ScaNN. Partisi dibuat berdasarkan nilai num_leaves yang ditentukan selama pembuatan indeks.

Distribusi indeks vektor berisi bucket untuk persentil ke-10, 25, 50, 75, 90, 95, 99, dan ke-100. Setiap bucket berisi nilai berikut:
  • Jumlah vektor yang ada di partisi pada persentil yang ditentukan.
  • Jumlah partisi yang memiliki vektor dalam rentang yang ditentukan oleh persentil saat ini dan sebelumnya.

Catatan: Karena karakteristik algoritma pengelompokan K-means yang melekat, akan selalu ada tingkat varians dalam distribusi vektor di seluruh partisi, bahkan saat indeks awalnya dibuat.

Rekomendasi penyempurnaan berdasarkan metrik

Mutasi
Metrik insertcount, updatecount, dan deletecount bersama-sama menunjukkan perubahan atau mutasi dalam vektor untuk indeks.
Indeks dibuat dengan jumlah vektor dan partisi tertentu. Saat operasi seperti penyisipan, pembaruan, atau penghapusan dilakukan pada indeks vektor, operasi tersebut hanya memengaruhi kumpulan partisi awal tempat vektor berada. Akibatnya, jumlah vektor di setiap partisi berfluktuasi dari waktu ke waktu, yang berpotensi memengaruhi recall, QPS, atau keduanya.
Jika Anda mengalami masalah kelambatan atau akurasi seperti QPS rendah atau recall yang buruk, dalam kueri penelusuran ANN dari waktu ke waktu, pertimbangkan untuk meninjau metrik ini. Jumlah mutasi yang tinggi dibandingkan dengan jumlah total vektor dapat menunjukkan perlunya pengindeksan ulang.
Distribusi
Metrik distribution menunjukkan distribusi vektor di semua partisi.
Saat Anda membuat indeks, indeks tersebut dibuat dengan jumlah vektor dan partisi tetap tertentu. Proses partisi dan distribusi berikutnya terjadi berdasarkan pertimbangan ini. Jika vektor tambahan ditambahkan, vektor tersebut akan dipartisi di antara partisi yang ada, sehingga menghasilkan distribusi yang berbeda dibandingkan dengan distribusi saat indeks dibuat. Karena distribusi akhir tidak mempertimbangkan semua vektor secara bersamaan, recall, QPS, atau keduanya mungkin terpengaruh.
Jika Anda mengamati penurunan performa kueri penelusuran ANN secara bertahap, seperti waktu respons yang lebih lambat atau akurasi yang berkurang dalam hasil (diukur dengan QPS atau recall), pertimbangkan untuk memeriksa metrik ini dan melakukan pengindeksan ulang.
Persentil distribusi
Metrik distributionpercentile adalah distribusi indeks vektor dalam tampilan pg_stat_ann_indexes yang membantu Anda memahami distribusi vektor antara partisi indeks ScaNN. Partisi dibuat berdasarkan nilai num_leaves yang ditentukan selama pembuatan indeks.
Saat Anda membuat indeks alloydb_scann pada kumpulan baris awal dengan menetapkan num_leaves, indeks dapat mengubah distribusi vektor di seluruh partisi karena operasi data (mutasi skew), atau jumlah vektor dapat meningkat secara signifikan. Perubahan ini dapat menyebabkan penurunan QPS, recall, atau keduanya. Distribusi indeks vektor dapat memberi Anda sinyal jika mutasi menyebabkan perubahan dalam distribusi indeks. Informasi ini dapat membantu Anda menentukan apakah pengindeksan ulang diperlukan, atau apakah perubahan dalam konfigurasi waktu penelusuran dapat membantu meningkatkan performa kueri.
Dalam indeks vektor, distribusi vektor di seluruh partisi jarang sekali merata. Ketidakseimbangan tersebut disebut sebagai distribusi tidak seragam. Tingkat ketidakseragaman tertentu sering kali diharapkan dan tidak berarti Anda perlu melakukan pengindeksan ulang. Distribusi tidak seragam memiliki karakteristik berikut:
  • Varians jumlah vektor rendah. Varians dapat dihitung sebagai
    $(P100(num\_vectors) - p10(num\_vectors))*(\frac{num\_leaves}{total\_num\_row})$
  • Jumlah partisi dengan 0 vektor rendah, dan mungkin kurang dari 30% partisi.
  • Varians jumlah partisi rendah.
    $ variance _{p} = abs(p_{num\_partitions} - num\_leaves * (p_{percentile} - p-1_{percentile})) $ dengan "p" adalah bucket distribusi indeks vektor.
  • Jumlah vektor pada persentil apa pun adalah
    $< 8 x (\frac{num\_rows\ during\ index\ creation\ time}{ num\_leaves})$

    Jika kondisi ini tidak terpenuhi, REINDEX mungkin diperlukan berdasarkan seberapa besar QPS dan recall terpengaruh.
Skenario berikut, meskipun lebih jarang terjadi daripada distribusi tidak seragam, dapat terjadi:
  • Indeks Seragam Perkiraan: Jika sebagian besar partisi memiliki jumlah vektor bukan nol yang sama dan varians jumlah vektor rendah, indeks tersebut adalah indeks seragam perkiraan. REINDEX diperlukan jika jumlah vektor di setiap partisi adalah $> 8 * vektor rata-rata$ pada index_creation_time.
  • Indeks Sparse: Indeks sparse juga terjadi jika > 50% partisi kosong. Misalnya, indeks sparse dibuat saat beberapa penghapusan terjadi pada tabel. Skenario ini menyebabkan vektor terkonsentrasi dalam jumlah partisi yang kecil, yang meningkatkan jumlah vektor di setiap partisi. Jika hal ini terjadi, hapus indeks dan buat ulang.