Memelihara indeks vektor

Untuk memastikan indeks vektor Anda beradaptasi dengan perubahan yang dapat 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 terlebih dahulu.

    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;
    

Memelihara indeks secara otomatis

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

AlloyDB mengaktifkan pemeliharaan indeks otomatis secara default untuk indeks ScaNN yang disesuaikan secara otomatis. Jika Anda ingin membuat indeks ScaNN yang disetel secara otomatis, tetapi menonaktifkan pemeliharaan otomatis, lihat bagian 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. Contoh, my_scann_index. Nama indeks digunakan bersama di seluruh database Anda. Pastikan setiap nama indeks unik untuk setiap tabel dalam database Anda.

  • TABLE_NAME: tabel yang ingin Anda tambahi indeks.

  • 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 secara otomatis mengelola dan menyesuaikan struktur indeks. Nilai auto_maintenance default, jika mode ditetapkan ke AUTO, adalah on.

    • MANUAL: Mengelola dan menyesuaikan indeks ScaNN secara manual. Nilai default auto_maintenance, jika 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 ini ke nilai apa pun antara 3 dan 1048576. Untuk mengetahui informasi selengkapnya tentang cara menentukan nilai ini, lihat artikel 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. Contoh, 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, konfigurasi flag database scann.max_background_workers. Meningkatkan jumlah pekerja latar belakang akan meningkatkan jumlah indeks yang diproses per unit waktu. Hal ini tidak mengurangi waktu pemrosesan untuk setiap indeks. Nilai ini harus lebih kecil dari nilai max_worker_processes yang ditetapkan untuk cluster database Anda.

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

Meningkatkan penundaan pemeliharaan otomatis

Untuk meningkatkan jeda antara proses pemeliharaan otomatis, konfigurasi tanda database scann.maintenance_background_naptime_s.

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

Persentase partisi penelusuran

Seiring bertambahnya jumlah partisi dari AlloyDB yang secara otomatis memisahkan partisi pencilan besar, sebaiknya sesuaikan jumlah leaf yang Anda telusuri untuk mempertahankan performa yang optimal. Untuk mengelola nomor 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 default-nya 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, maka AlloyDB secara default akan menggunakan 1% daun.

Jika Anda memperkirakan set data 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 jalankan pemeliharaannya. Contoh, my_scann_index.

Menonaktifkan pemeliharaan otomatis untuk indeks otomatis

Untuk menonaktifkan pemeliharaan otomatis untuk indeks ScaNN yang disetel 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 sudah di-tuning secara otomatis, lihat bagian Mengonfigurasi pemeliharaan otomatis untuk indeks yang ada.

Membangun ulang indeks secara manual

Jika tabel Anda sering diperbarui atau disisipkan, sebaiknya bangun ulang indeks ScaNN Anda secara berkala untuk meningkatkan akurasi perolehan kembali. Untuk mengetahui informasi selengkapnya tentang cara melihat perubahan dalam distribusi atau mutasi vektor sejak indeks Anda dibuat, lihat Melihat metrik indeks vektor.

Untuk membangun kembali indeks secara manual menggunakan konfigurasi aslinya, jalankan perintah berikut:

REINDEX INDEX CONCURRENTLY INDEX_NAME;

Ganti INDEX_NAME dengan nama indeks yang ingin Anda bangun ulang. Contoh, my_scann_index.

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

Langkah berikutnya