Halaman ini menjelaskan opsi untuk mempertahankan indeks vektor. Memelihara 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 pertumbuhan set data Anda.
Sebelum memulai
Instal atau update ekstensi
vector
danalloydb_scann
.Jika ekstensi
vector
danalloydb_scann
tidak diinstal, instal versi ekstensi terbaru.CREATE EXTENSION IF NOT EXISTS vector; CREATE EXTENSION IF NOT EXISTS alloydb_scann;
Jika ekstensi
vector
danalloydb_scann
sudah diinstal, upgrade ekstensi ke versi terbaru.ALTER EXTENSION vector UPDATE; ALTER EXTENSION alloydb_scann UPDATE;
Melihat metrik indeks vektor
Jika tabel Anda sering diperbarui atau disisipkan, sebaiknya indeks ulang indeks ScaNN yang ada secara berkala untuk meningkatkan akurasi perolehan kembali indeks Anda. Anda dapat memantau metrik indeks untuk melihat perubahan dalam distribusi vektor atau mutasi vektor sejak indeks dibuat, lalu mengindeks ulang sesuai kebutuhan.
Untuk mengetahui informasi selengkapnya tentang metrik, lihat Melihat metrik indeks vektor.
Memelihara indeks secara otomatis
Fitur pemeliharaan indeks otomatis memungkinkan AlloyDB mengelola indeks secara inkremental sehingga seiring pertumbuhan set data Anda, AlloyDB terus menganalisis dan memperbarui sentroid serta membagi partisi pencilan besar. Hal ini membantu mempertahankan indeks untuk kueri yang sebanding per detik (QPS) dan kualitas hasil penelusuran. Semua update yang dilakukan oleh pemeliharaan otomatis bersifat permanen hingga pemeliharaan berikutnya dijalankan.
Anda dapat menggunakan flag database scann.enable_preview_features
(GUC) bersama dengan parameter auto_maintenance
tingkat indeks saat membuat indeks ScaNN untuk mengaktifkan pemeliharaan indeks otomatis indeks ScaNN.
Fitur pemeliharaan indeks otomatis diaktifkan secara default untuk indeks ScaNN yang disesuaikan secara otomatis. Untuk
indeks yang dibuat secara manual, setelah mengaktifkan tanda scann.enable_preview_features
, Anda dapat menetapkan parameter auto_maintenance
selama pembuatan indeks atau menggunakan fungsi scann_index_maintenance
untuk memicu pemeliharaan indeks otomatis sesuai permintaan.
Untuk mengaktifkan AlloyDB mempertahankan indeks secara otomatis, aktifkan tanda
scann.enable_preview_features
:
gcloud alloydb instances update INSTANCE_ID \
--database-flags scann.enable_preview_features=on \
--region=REGION_ID \
--cluster=CLUSTER_ID \
--project=PROJECT_ID
Ganti kode berikut:
INSTANCE_ID
: ID instance.REGION_ID
: Region tempat instance ditempatkan—misalnya,us-central1
.CLUSTER_ID
: ID cluster tempat instance ditempatkan.PROJECT_ID
: ID project tempat cluster ditempatkan.
Setiap pembaruan yang dilakukan pada indeks sebagai hasil dari pemeliharaan otomatis bersifat permanen hingga AlloyDB memperbarui indeks lagi.
Mengaktifkan pemeliharaan otomatis selama pembuatan indeks
Untuk membuat indeks ScaNN manual dengan pengaktifan pemeliharaan indeks otomatis, jalankan contoh perintah berikut:
CREATE INDEX INDEX_NAME ON TABLE \
USING scann (EMBEDDING_COLUMN DISTANCE_FUNCTION) \
WITH (mode=MANUAL, 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 yang akan ditambahkan indeksnya.EMBEDDING_COLUMN
: kolom yang menyimpan datavector
.DISTANCE_FUNCTION
: fungsi jarak yang akan digunakan dengan indeks ini. Pilih salah satu opsi berikut:Jarak L2:
l2
Perkalian titik:
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 mengetahui informasi selengkapnya tentang cara menentukan nilai ini, lihat Menyesuaikan indeksScaNN
.
Anda dapat meningkatkan throughput pemeliharaan indeks otomatis di beberapa indeks dengan mengonfigurasi tanda database
scann.max_background_workers
. Meningkatkan jumlah pekerja akan meningkatkan jumlah indeks yang diproses dalam satu unit waktu; hal ini tidak mengurangi waktu pemrosesan untuk satu indeks. Secara opsional, Anda juga dapat menetapkan tanda
scann.maintenance_background_naptime_s
database untuk mengontrol penundaan minimum antara menjalankan pemeliharaan indeks otomatis.
Mengonfigurasi pct_leaves_to_search
untuk pemeliharaan indeks otomatis
Jika Anda telah mengaktifkan pemeliharaan indeks otomatis, AlloyDB akan otomatis membagi partisi berdasarkan heuristik—misalnya, membagi partisi pencilan besar yang melebihi ukuran tertentu. Seiring bertambahnya jumlah partisi karena pemisahan ini, Anda harus menyesuaikan jumlah daun yang akan ditelusuri untuk mempertahankan performa yang optimal.
Untuk mengelola jumlah daun yang akan dicari secara otomatis, gunakan
pct_leaves_to_search
. Parameter ini memungkinkan Anda menentukan persentase jumlah
partisi yang akan ditelusuri. Jika Anda memperkirakan set data akan bertambah secara signifikan, maka
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%
dari jumlah partisi saat ini, tetapkan nilai ini ke 1
.
Anda
dapat menyetel 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 menyetel flag pct_leaves_to_search
di database Anda, 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
: persentasenum_leaves
yang akan ditelusuri.
Memanggil pemeliharaan indeks secara manual
Jika Anda ingin memanggil pemeliharaan pada indeks tertentu sesuai permintaan, jalankan perintah berikut. Fungsi ini tersedia di alloydb_scann
versi 0.1.2
atau yang lebih baru.
Untuk menggunakan fungsi ini, Anda harus mengaktifkan tanda scann.enable_preview_features
terlebih dahulu seperti yang dijelaskan dalam Mempertahankan indeks secara otomatis.
SELECT scann_index_maintenance('INDEX_NAME');
Membangun ulang indeks secara manual
Anda dapat membangun ulang indeks secara manual jika ingin membangun ulang indeks dengan konfigurasi yang Anda tentukan saat indeks dibuat.
Untuk membangun 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 mengetahui informasi selengkapnya tentang pengindeksan ulang di PostgreSQL, lihat REINDEX.