Topik ini menjelaskan cara menggunakan ekstensi pgvector untuk menguji performa instance ApsaraDB RDS for PostgreSQL berdasarkan indeks file terbalik (IVF). Ekstensi pgvector memanfaatkan alat pgbench untuk mengevaluasi penyimpanan yang digunakan oleh data vektor dan indeksnya di bawah volume data yang berbeda, serta menganalisis dampak dari pengaturan parameter lists dan probes terhadap efisiensi query dan laju recall.
Lingkungan pengujian
Instance RDS dan instance Elastic Compute Service (ECS) harus berada dalam virtual private cloud (VPC) yang sama serta termasuk dalam vSwitch yang sama guna mencegah kesalahan akibat fluktuasi jaringan.
Instance uji dan alat uji | Deskripsi |
Spesifikasi instance RDS |
|
Spesifikasi instance ECS |
|
Alat uji | pgbench |
Persiapan
Buat akun istimewa bernama testuser dan database bernama testdb. Untuk informasi lebih lanjut, lihat Buat Database dan Akun.
Instal ekstensi pgvector di database testdb. Ekstensi pgvector diberi nama vector dalam sistem. Untuk informasi lebih lanjut, lihat Kelola Ekstensi.
Sambungkan ke instance RDS dan hasilkan vektor acak dengan panjang tetap di database testdb sebagai data uji. Untuk informasi lebih lanjut, lihat Sambungkan ke Instance ApsaraDB RDS for PostgreSQL.
CREATE OR REPLACE FUNCTION random_array(dim integer) RETURNS DOUBLE PRECISION[] AS $$ SELECT array_agg(random()) FROM generate_series(1, dim); $$ LANGUAGE SQL VOLATILE COST 1;Buat tabel untuk menyimpan vektor 1.536-dimensi.
CREATE TABLE vtest(id BIGINT, v VECTOR(1536));Masukkan data ke dalam tabel.
INSERT INTO vtest SELECT i, random_array(1536)::VECTOR(1536) FROM generate_series(1, 100000) AS i;Buat indeks.
CREATE INDEX ON vtest USING ivfflat(v vector_cosine_ops) WITH(lists = 100);
Prosedur pengujian
Untuk mencegah dampak pada data uji akibat faktor-faktor seperti latensi jaringan, disarankan menggunakan titik akhir internal instance RDS. Dalam contoh ini, pengujian dilakukan pada instance ECS yang berada di wilayah dan VPC yang sama dengan instance RDS.
Gunakan vektor acak untuk menghitung kemiripan antara data dalam tabel vtest dan dapatkan 50 catatan paling mirip.
Buat file SQL dan tulis konten berikut ke dalam file untuk pengujian stres:
WITH tmp AS ( SELECT random_array(1536)::VECTOR(1536) AS vec ) SELECT id FROM vtest ORDER BY v <=> (SELECT vec FROM tmp) LIMIT FLOOR(RANDOM() * 50);Gunakan pgbench untuk melakukan pengujian stres.
pgbench adalah program yang menjalankan tes benchmark di PostgreSQL. Jalankan perintah berikut di CLI. Pastikan klien PostgreSQL telah diinstal. Dalam contoh ini, PostgreSQL 15.1 digunakan. Untuk informasi lebih lanjut, lihat Dokumentasi Resmi PostgreSQL.
pgbench -f ./test.sql -c6 -T60 -P5 -U testuser -h pgm-bp****.pg.rds.aliyuncs.com -p 5432 -d testdbTabel berikut menjelaskan parameter-parameter tersebut.
Parameter/Nilai
Deskripsi
-f ./test.sql
Jalur dan nama file skrip uji.
./test.sqladalah contohnya. Anda harus memodifikasi parameter sesuai dengan kebutuhan bisnis Anda.-c6
Jumlah koneksi klien bersamaan. -c menentukan jumlah koneksi klien bersamaan. Dalam contoh ini, 6 menunjukkan bahwa enam koneksi klien bersamaan digunakan untuk pengujian.
-T60
Waktu pengujian. -T menentukan waktu yang diperlukan untuk melakukan pengujian. Dalam contoh ini, 60 menentukan bahwa pengujian berlangsung selama 60 detik.
-P5
Parameter skrip. Dalam contoh ini, laporan kemajuan ditampilkan setiap 5 detik.
-U testuser
Nama pengguna database. Anda harus mengganti testuser dengan nama pengguna database Anda.
-h pgm-bp****.pg.rds.aliyuncs.com
Titik akhir internal instance RDS.
-p 5432
Port internal instance RDS.
-d testdb
Database yang ingin Anda sambungkan. Dalam contoh ini, testdb tersambung.
Hasil pengujian
Kesimpulan
Nilai parameter lists memiliki dampak kecil pada penyimpanan yang digunakan oleh indeks. Penyimpanan yang digunakan dipengaruhi oleh volume data dalam tabel.
Nilai parameter lists dan probes memiliki dampak yang berlawanan pada efisiensi query dan laju recall. Tentukan nilai yang sesuai untuk parameter-parameter tersebut guna mencapai keseimbangan antara efisiensi query dan laju recall.

Kami merekomendasikan Anda mengonfigurasi parameter lists dan probes berdasarkan jumlah baris data dalam tabel. Bagian berikut memberikan contoh pengaturan konfigurasi.
Jika jumlah baris data dalam tabel kurang dari atau sama dengan 1 juta, hitung nilai parameter lists dan probes menggunakan rumus berikut:
lists = Jumlah baris data / 1.000danprobes = Nilai parameter lists / 10.Jika jumlah baris data dalam tabel lebih dari 1 juta, hitung nilai parameter lists dan probes menggunakan rumus berikut:
lists = sqrt(Jumlah baris data)danprobes = sqrt(Nilai parameter lists).Catatansqrt menunjukkan fungsi akar kuadrat.

