Mengelola indeks vektor

Halaman ini menjelaskan opsi untuk mempertahankan indeks vektor Anda. Mengelola indeks membantu memastikan bahwa indeks beradaptasi dengan perubahan data yang dapat memengaruhi akurasi hasil penelusuran Anda. Gunakan strategi di halaman ini untuk menghindari penurunan performa kueri seiring bertambahnya set data Anda.

Melihat metrik indeks vektor

Jika tabel Anda rentan terhadap pembaruan atau penyisipan yang sering, sebaiknya indeks ulang indeks ScaNN yang ada secara berkala untuk meningkatkan akurasi recall untuk indeks Anda. Anda dapat memantau metrik indeks untuk melihat perubahan dalam distribusi vektor atau mutasi vektor sejak indeks dibuat, lalu mengindeks ulang.

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

Mengelola indeks secara otomatis

Anda dapat menggunakan flag database Grand Unified Configuration (GUC) scann.enable_index_maintenance bersama dengan parameter auto_maintenance tingkat indeks saat membuat indeks ScaNN. Dengan menggunakan setelan ini secara bersamaan, AlloyDB dapat mengelola indeks secara bertahap dan memisahkan partisi outlier besar seiring bertambahnya set data Anda. Dengan membagi partisi, AlloyDB mencoba memberikan Kueri per Detik (QPS) dan hasil penelusuran yang lebih baik.

Update indeks pemeliharaan otomatis akan tetap ada hingga AlloyDB memperbarui indeks lagi.

Agar AlloyDB dapat mempertahankan indeks secara otomatis, tambahkan ekstensi alloydb_scann ke parameter shared_preload_libraries, aktifkan tanda database scann.enable_index_maintenance, lalu muat ekstensi alloydb_scann dengan memulai ulang database:

  1. Muat ekstensi alloydb_scann ke daftar shared_preload_libraries:

    sudo sed -r -i "s|(shared_preload_libraries\s*=\s*)'(.*)'.*$|\1'\2,alloydb_scann'|" DATA_DIR/postgresql.conf
  2. Pastikan konfigurasi parameter ditetapkan dengan benar:

    grep -iE 'shared_preload_libraries' DATA_DIR/postgresql.conf
  3. Aktifkan tanda scann.enable_index_maintenance dengan menetapkan tanda di file postgresql.conf:

    scann.enable_index_maintenance = ON
  4. Mulai ulang AlloyDB Omni agar perubahan parameter diterapkan:

    Docker

     docker container restart CONTAINER_NAME

    Ganti CONTAINER_NAME dengan nama yang Anda tetapkan ke penampung AlloyDB Omni saat Anda memulainya.

    Podman

     podman container restart CONTAINER_NAME

    Ganti CONTAINER_NAME dengan nama yang Anda tetapkan ke penampung AlloyDB Omni saat Anda memulainya.

Setelah mengaktifkan tanda scann.enable_index_maintenance, Anda dapat mengaktifkan pemeliharaan otomatis untuk indeks, atau mengaktifkan fungsi scann_index_maintenance untuk memanggil pemeliharaan secara manual.

Mengaktifkan pemeliharaan otomatis selama pembuatan indeks

Untuk membuat indeks ScaNN dengan pemeliharaan otomatis diaktifkan, jalankan contoh perintah berikut:

CREATE INDEX INDEX_NAME ON TABLE
  USING scann (EMBEDDING_COLUMN DISTANCE_FUNCTION)
  WITH (num_leaves=NUM_LEAVES_VALUE, auto_maintenance=on);

Ganti kode berikut:

  • INDEX_NAME: nama indeks yang ingin Anda buat—misalnya, my-scann-index. Nama indeks dibagikan di seluruh database Anda. Pastikan setiap nama indeks unik untuk setiap tabel dalam database Anda.

  • TABLE: tabel tempat indeks akan ditambahkan.

  • EMBEDDING_COLUMN: kolom yang menyimpan data vector.

  • DISTANCE_FUNCTION: fungsi jarak yang akan digunakan dengan indeks ini. Pilih salah satu opsi berikut:

    • Jarak L2: l2

    • Dot product: dot_product

    • Jarak kosinus: cosine

  • NUM_LEAVES_VALUE: jumlah partisi yang akan diterapkan ke indeks ini. Tetapkan ke nilai apa pun antara 1 hingga 1048576. Untuk informasi selengkapnya tentang cara menentukan nilai ini, lihat Menyesuaikan indeks ScaNN.

Memanggil pemeliharaan secara manual

Jika Anda ingin memanggil pemeliharaan pada indeks tertentu secara on-demand, jalankan perintah berikut:

SELECT AS scann_index_maintenance('INDEX_NAME');

Mengelola daun untuk menelusuri partisi terpisah secara otomatis

Jika Anda telah mengaktifkan pemeliharaan indeks otomatis, AlloyDB akan otomatis memisahkan partisi saat nilai minimum num_leaves tercapai. Seiring dengan meningkatnya jumlah partisi karena pemisahan ini, Anda harus menyesuaikan jumlah daun yang akan ditelusuri untuk mempertahankan performa yang optimal.

Untuk mengelola jumlah daun yang akan ditelusuri secara otomatis, gunakan pct_leaves_to_search. Parameter ini memungkinkan Anda menentukan persentase jumlah partisi yang akan ditelusuri. Jika Anda memperkirakan set data akan tumbuh secara signifikan, mulailah dengan menetapkan nilai pct_leaves_to_search ke 1. Parameter ini dinonaktifkan secara default.

Tetapkan nilai ini ke persentase jumlah partisi saat ini. Misalnya, untuk menelusuri 1% jumlah partisi saat ini, tetapkan nilai ini ke 1.

Anda dapat menetapkan parameter ini ke nilai apa pun antara 0 hingga 100. Nilai defaultnya adalah 0, yang menonaktifkan parameter ini dan menggunakan scann.num_leaves_to_search untuk menghitung jumlah daun yang akan ditelusuri.

Untuk menetapkan tanda pct_leaves_to_search di database, jalankan perintah berikut:

ALTER DATABASE DATABASE_NAME SET scann.pct_leaves_to_search = PERCENTAGE_LEAVES_TO_SEARCH;

Ganti kode berikut:

  • DATABASE_NAME: nama database.
  • PERCENTAGE_LEAVES_TO_SEARCH: persentase num_leaves yang akan ditelusuri.

Mem-build ulang indeks secara manual

Anda dapat mem-build ulang indeks secara manual jika ingin mem-build ulang dengan konfigurasi yang Anda tentukan saat indeks dibuat.

Untuk membuat ulang indeks secara manual, jalankan perintah berikut:

REINDEX INDEX CONCURRENTLY INDEX_NAME;

Ganti INDEX_NAME dengan nama indeks yang ingin Anda bangun ulang—misalnya, my-scann-index. Nama indeks dibagikan di seluruh database Anda. Pastikan setiap nama indeks unik untuk setiap tabel dalam database Anda.

Untuk informasi selengkapnya tentang pengindeksan ulang di PostgreSQL, lihat REINDEX.

Langkah berikutnya