Memelihara indeks vektor

Pilih versi dokumentasi:

Untuk memastikan indeks vektor Anda beradaptasi dengan perubahan yang mungkin memengaruhi akurasi hasil penelusuran, pertahankan indeks vektor Anda.

Sebelum memulai

Sebelum mengelola pemeliharaan indeks, instal atau update ekstensi vector dan alloydb_scann:

  • Jika ekstensi vector dan alloydb_scann belum diinstal, instal ekstensi tersebut.

    CREATE EXTENSION IF NOT EXISTS vector;
    CREATE EXTENSION IF NOT EXISTS alloydb_scann;
    
  • Jika ekstensi vector dan alloydb_scann sudah diinstal, update ekstensi tersebut.

    ALTER EXTENSION vector UPDATE;
    ALTER EXTENSION alloydb_scann UPDATE;
    

Mempertahankan indeks secara otomatis

Anda dapat mengizinkan AlloyDB Omni mengelola indeks vektor Anda secara otomatis. Seiring pertumbuhan set data Anda, AlloyDB Omni akan menganalisis dan memperbarui centroid serta membagi partisi outlier besar. Hal ini akan otomatis meningkatkan kueri per detik (QPS) dan kualitas hasil penelusuran. Semua update otomatis bersifat permanen hingga proses pemeliharaan berikutnya.

AlloyDB Omni mengaktifkan pemeliharaan indeks otomatis secara default untuk indeks ScaNN yang disesuaikan secara otomatis. Jika Anda ingin membuat indeks ScaNN yang disesuaikan secara otomatis, tetapi menonaktifkan pemeliharaan otomatis, lihat Menonaktifkan pemeliharaan otomatis untuk indeks otomatis.

Untuk mengaktifkan pemeliharaan otomatis untuk indeks yang dibuat secara manual, lihat Mengaktifkan pemeliharaan otomatis selama pembuatan indeks.

Mengaktifkan pemeliharaan otomatis selama pembuatan indeks

Untuk mengaktifkan pemeliharaan otomatis selama pembuatan indeks, tetapkan parameter auto_maintenance ke on. Misalnya, lihat perintah berikut yang membuat indeks vektor ScaNN.

CREATE INDEX INDEX_NAME ON TABLE_NAME \
USING scann (EMBEDDING_COLUMN_NAME DISTANCE_FUNCTION_NAME) \
WITH (mode='INDEX_MODE', num_leaves=NUM_PARTITIONS, auto_maintenance=on);

Ganti variabel 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 di database Anda.

  • TABLE_NAME: tabel yang ingin Anda tambahkan indeksnya.

  • EMBEDDING_COLUMN_NAME: kolom yang menyimpan data vector yang ingin Anda indeks.

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

    • Jarak L2: l2

    • Perkalian titik: dot_product

    • Jarak kosinus: cosine

  • INDEX_MODE: mode untuk membuat indeks ScaNN. Nilai yang tersedia adalah sebagai berikut:

    • AUTO: AlloyDB Omni secara otomatis mengelola dan menyesuaikan struktur indeks. Nilai auto_maintenance default, saat mode ditetapkan ke AUTO, adalah on.

    • MANUAL: Mengelola dan menyesuaikan indeks ScaNN Anda secara manual. Nilai auto_maintenance default, saat mode ditetapkan ke MANUAL, adalah off.

    Untuk mengetahui informasi selengkapnya tentang mode indeks yang akan digunakan, lihat Membuat indeks ScaNN.

  • NUM_PARTITIONS: jumlah partisi yang akan diterapkan ke indeks ini. Tetapkan nilai ini ke nilai apa pun antara 3 dan 1048576. Untuk mengetahui informasi selengkapnya tentang cara menentukan nilai ini, lihat Menyesuaikan indeks ScaNN.

Mengonfigurasi pemeliharaan otomatis untuk indeks yang ada

Untuk mengonfigurasi pemeliharaan otomatis untuk indeks manual yang ada, jalankan perintah berikut:

ALTER INDEX INDEX_NAME SET (auto_maintenance = AUTOMATIC_MAINTENANCE);

Ganti variabel berikut:

  • INDEX_NAME: nama indeks yang ingin Anda ubah. Misalnya, my_scann_index.

  • AUTOMATIC_MAINTENANCE: mengaktifkan atau menonaktifkan pemeliharaan otomatis. Untuk mengaktifkan, tetapkan nilai ke on. Untuk menonaktifkan, tetapkan nilai ke off.

Meningkatkan throughput pemeliharaan otomatis

Untuk meningkatkan throughput pemeliharaan otomatis, konfigurasikan flag database scann.max_background_workers. Meningkatkan jumlah pekerja latar belakang akan meningkatkan jumlah indeks yang diproses per unit waktu. Tindakan ini tidak mengurangi waktu pemrosesan untuk setiap indeks. Nilai ini harus kurang dari nilai yang ditetapkan untuk cluster database Anda.max_worker_processes

Untuk mengetahui informasi selengkapnya tentang cara mengonfigurasi flag database, lihat Mengonfigurasi parameter database.

Meningkatkan penundaan pemeliharaan otomatis

Untuk meningkatkan penundaan antara proses pemeliharaan otomatis, konfigurasikan the scann.maintenance_background_naptime_s flag database.

Untuk mengetahui informasi selengkapnya tentang cara mengonfigurasi flag database, lihat Mengonfigurasi parameter database.

Mencari persentase partisi

Seiring bertambahnya jumlah partisi dari AlloyDB Omni yang secara otomatis membagi partisi outlier besar, sebaiknya sesuaikan jumlah leaf yang Anda telusuri untuk mempertahankan performa yang optimal. Untuk mengelola jumlah ini secara otomatis, konfigurasikan parameter scann.pct_leaves_to_search.

scann.pct_leaves_to_search mewakili persentase partisi saat ini yang akan ditelusuri. Anda dapat menetapkan parameter ini ke nilai apa pun antara 0 dan 100. Nilai defaultnya adalah 0, yang menonaktifkan parameter ini, dan menggunakan nilai yang ditetapkan di scann.num_leaves_to_search sebagai gantinya. Jika scann.num_leaves_to_search juga ditetapkan ke 0, AlloyDB Omni akan menggunakan 1% leaf secara default.

Jika Anda memperkirakan set data Anda akan bertambah secara signifikan, tetapkan nilai awal ke 1.

Untuk menetapkan scann.pct_leaves_to_search, jalankan perintah berikut:

ALTER DATABASE DB_NAME SET scann.pct_leaves_to_search = PERCENTAGE_PARTITIONS_TO_SEARCH;

Ganti variabel berikut:

  • DB_NAME: nama database Anda.
  • PERCENTAGE_PARTITIONS_TO_SEARCH: persentase partisi yang akan ditelusuri.

Memanggil pemeliharaan indeks secara manual

Jika Anda ingin memanggil pemeliharaan pada indeks tertentu secara manual, jalankan perintah berikut:

SELECT scann_index_maintenance('INDEX_NAME');

Ganti INDEX_NAME dengan nama indeks yang ingin Anda panggil pemeliharaannya. Misalnya, my_scann_index.

Menonaktifkan pemeliharaan otomatis untuk indeks otomatis

Untuk menonaktifkan pemeliharaan otomatis untuk indeks ScaNN yang disesuaikan secara otomatis, tetapkan parameter auto_maintenance ke OFF selama pembuatan indeks. Misalnya, lihat perintah berikut yang membuat indeks ScaNN yang disesuaikan secara otomatis:

CREATE INDEX similarity_index ON products
       USING scann (description_embedding cosine)
WITH (MODE = 'AUTOMATIC', auto_maintenance = 'OFF');

Jika Anda ingin menonaktifkan pemeliharaan otomatis pada indeks ScaNN yang disesuaikan secara otomatis, lihat Mengonfigurasi pemeliharaan otomatis untuk indeks yang ada.

Mem-build ulang indeks Anda secara manual

Jika tabel Anda rentan terhadap update atau penyisipan yang sering, sebaiknya build ulang indeks ScaNN Anda secara berkala untuk meningkatkan akurasi recall-nya. Untuk mengetahui informasi selengkapnya tentang cara melihat perubahan dalam distribusi atau mutasi vektor sejak indeks Anda dibuat, lihat Melihat metrik indeks vektor.

Untuk mem-build ulang indeks Anda secara manual menggunakan konfigurasi aslinya, jalankan perintah berikut:

REINDEX INDEX CONCURRENTLY INDEX_NAME;

Ganti INDEX_NAME dengan nama indeks yang ingin Anda build ulang. Misalnya, my_scann_index.

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

Langkah berikutnya