全部产品
Search
文档中心

ApsaraDB RDS:Gunakan ekstensi pgvector untuk menguji performa berdasarkan indeks IVF

更新时间:Jul 02, 2025

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

  • Instance RDS menjalankan PostgreSQL 16.

  • Instance RDS adalah instance RDS standar yang menjalankan Edisi Ketersediaan Tinggi RDS dan menggunakan tipe instance khusus pg.x8.2xlarge.2c. Tipe instance ini menyediakan 16 core dan 128 GB memori.

  • Ekstensi pgvector menjalankan versi 0.8.0.

Spesifikasi instance ECS

  • Instance ECS menggunakan tipe instance ecs.c6.xlarge, yang menyediakan 4 core dan 8 GiB memori.

  • Instance ECS menjalankan Alibaba Cloud Linux 3.

  • Klien PostgreSQL menjalankan versi 15.1.

Alat uji

pgbench

Persiapan

  1. Buat akun istimewa bernama testuser dan database bernama testdb. Untuk informasi lebih lanjut, lihat Buat Database dan Akun.

  2. Instal ekstensi pgvector di database testdb. Ekstensi pgvector diberi nama vector dalam sistem. Untuk informasi lebih lanjut, lihat Kelola Ekstensi.

  3. 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;
  4. Buat tabel untuk menyimpan vektor 1.536-dimensi.

    CREATE TABLE vtest(id BIGINT, v VECTOR(1536));
  5. Masukkan data ke dalam tabel.

    INSERT INTO vtest SELECT i, random_array(1536)::VECTOR(1536) FROM generate_series(1, 100000) AS i;
  6. 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.

  1. 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);
  2. 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 testdb

    Tabel berikut menjelaskan parameter-parameter tersebut.

    Parameter/Nilai

    Deskripsi

    -f ./test.sql

    Jalur dan nama file skrip uji. ./test.sql adalah 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

Hasil Pengujian Antara Volume Data dan Penyimpanan yang Digunakan oleh Vektor dan Indeks, Latensi, serta Transaksi Per Detik (TPS)

Volume data (unit: 10.000 baris)

Ukuran tabel (unit: MB)

Ukuran indeks (unit: MB)

Latensi (unit: milidetik)

TPS

10

796

782

15,7

380

30

2.388

2.345

63

94

50

3.979

3.907

74

80

80

6.367

6.251

90

66

100

7.958

7.813

105

56

Dampak pada Efisiensi Query dan Laju Recall Saat Menyesuaikan Nilai Parameter probes dan Mempertahankan Nilai Parameter lists

Asumsikan bahwa nilai parameter lists tetap sebesar 2.000 dan tabel berisi 1 juta baris data. Dalam kasus ini, nilai besar dari parameter probes menunjukkan laju recall tinggi tetapi TPS rendah.

image..png

Dampak pada Efisiensi Query dan Laju Recall Saat Menyesuaikan Nilai Parameter lists dan Mempertahankan Nilai Parameter probes

Asumsikan bahwa nilai parameter probes tetap sebesar 20 dan tabel berisi 1 juta baris data. Dalam kasus ini, nilai besar dari parameter lists menunjukkan laju recall rendah tetapi TPS tinggi.

image..png

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.

    image..png

    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.000 dan probes = 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) dan probes = sqrt(Nilai parameter lists).

      Catatan

      sqrt menunjukkan fungsi akar kuadrat.