Tüm Ürünler
Search
Belge Merkezi

ApsaraDB RDS:Use the pgvector extension to test performance based on IVF indexes

Son Güncelleme:Oct 03, 2026

Bu belgede, ApsaraDB RDS for PostgreSQL üzerinde IVFFlat dizinleri için kıyaslama sonuçları sunulmaktadır. Veri hacminin depolamayı nasıl etkilediğini ve iş yükünüz için ayarlama yapmadan önce sorgu aktarım hızı ile geri çağırma oranı arasındaki dengeyi lists ve probes parametrelerinin nasıl belirlediğini anlamak için bu sonuçlardan yararlanın.

IVFFlat dizinlerinin çalışma mantığı

IVFFlat, dizin oluşturma sırasında vektörleri kümeler halinde böler. Sorgu sırasında veritabanı, tüm vektörler yerine yalnızca bir alt kümeyi arar.

Parametre Rolü Daha yüksek değerin etkisi
lists Dizin oluşturma sırasında oluşturulan küme sayısı Daha hızlı sorgular (küme başına daha az vektör), ancak sorgu vektörleri küme sınırlarına yakın olduğunda daha düşük geri çağırma oranı
probes Sorgu sırasında aranan küme sayısı Daha yüksek geri çağırma oranı, ancak daha yavaş sorgular

İki parametrenin geri çağırma oranı ve aktarım hızı üzerindeki etkileri birbirine zıttır.

Test ortamı

Test sonuçlarında ağ kaynaklı değişkenliği önlemek için RDS örneği ve ECS örneği aynı sanal özel bulut (VPC) ve vSwitch içinde bulunmalıdır.

Bileşen Teknik Özellikler
RDS örneği PostgreSQL 16, RDS Yüksek Kullanılabilirlik Sürümü, pg.x8.2xlarge.2c özel örnek (16 çekirdek, 128 GB bellek)
pgvector sürümü 0.8.0
ECS örneği ecs.c6.xlarge (4 çekirdek, 8 GiB bellek), Alibaba Cloud Linux 3
PostgreSQL istemcisi 15,1
Test aracı pgbench

Ön koşullar

Başlamadan önce aşağıdaki gereksinimleri karşıladığınızdan emin olun:

Test verilerini hazırlama

  1. testdb veritabanına bağlanın ve belirli bir uzunlukta rastgele vektörler üreten bir yardımcı işlev oluşturun:

    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;
  2. 1536 boyutlu vektörler için bir tablo oluşturun:

    CREATE TABLE vtest(id BIGINT, v VECTOR(1536));
  3. 100.000 satırlık test verisi ekleyin:

    INSERT INTO vtest
    SELECT i, random_array(1536)::VECTOR(1536)
    FROM generate_series(1, 100000) AS i;
  4. 100 liste kullanarak kosinüs mesafesi ile bir IVFFlat dizini oluşturun:

    CREATE INDEX ON vtest USING ivfflat(v vector_cosine_ops) WITH(lists = 100);

Kıyaslamayı çalıştırma

Ağ gecikme süresini bir değişken olarak ortadan kaldırmak için RDS örneğinin dahili uç noktasını kullanın.

  1. Aşağıdaki sorguyu içeren test.sql adlı bir SQL dosyası oluşturun. Bu sorgu, rastgele bir 1536 boyutlu vektör üretir ve kosinüs mesafesini kullanarak vtest tablosundan en benzer kayıtları getirir:

    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. ECS örneğinden pgbench komutunu çalıştırın. PostgreSQL istemcisini yüklediğinizden emin olun. Referans için pgbench belgelerine bakın.

    pgbench -f ./test.sql -c6 -T60 -P5 -U testuser -h pgm-bp****.pg.rds.aliyuncs.com -p 5432 -d testdb
    Parametre Açıklama
    -f ./test.sql Test SQL dosyasının yolu. Gerçek yol ile değiştirin
    -c6 Eşzamanlı istemci bağlantısı sayısı (bu testte 6)
    -T60 Test süresi saniye cinsinden (bu testte 60 saniye)
    -P5 İlerleme raporu aralığı saniye cinsinden (her 5 saniyede bir)
    -U testuser Veritabanı kullanıcı adı. Kendi kullanıcı adınızla değiştirin
    -h pgm-bp****.pg.rds.aliyuncs.com RDS örneğinin dahili uç noktası
    -p 5432 RDS örneğinin dahili bağlantı noktası
    -d testdb Hedef veritabanı

Test sonuçları

Veri hacmine göre depolama ve aktarım hızı

Aşağıdaki sonuçlar lists = 100 değeri kullanılarak elde edilmiştir. Dizin boyutu tüm veri hacimlerinde tablo boyutuna yakın kalmaktadır; bu durum, lists değerinin depolama üzerinde minimal etkisi olduğunu gösterir. Depolama alanı öncelikle veri hacmi tarafından belirlenir.

Veri hacmi Tablo boyutu Dizin boyutu Gecikme süresi TPS
100.000 satır 796 MB 782 MB 15,7 ms 380
300.000 satır 2.388 MB 2.345 MB 63 ms 94
500.000 satır 3.979 MB 3.907 MB 74 ms 80
800.000 satır 6.367 MB 6.251 MB 90 ms 66
1.000.000 satır 7.958 MB 7.813 MB 105 ms 56

probes değerinin geri çağırma oranı ve aktarım hızı üzerindeki etkisi

lists = 2000 ve 1.000.000 satır ile: Daha yüksek bir probes değeri, daha yüksek bir geri çağırma oranı ancak daha düşük bir TPS anlamına gelir.

image..png

lists değerinin geri çağırma oranı ve aktarım hızı üzerindeki etkisi

probes = 20 ve 1.000.000 satır ile: Daha yüksek bir lists değeri, daha düşük bir geri çağırma oranı ancak daha yüksek bir TPS anlamına gelir.

image..png

Üretim ortamı için lists ve probes değerlerini ayarlama

Aşağıdaki grafik, her iki parametre değiştiğinde geri çağırma oranı ve aktarım hızı arasındaki bileşik dengeyi göstermektedir.

image..png

Tablonuzdaki satır sayısına bağlı olarak başlangıç noktası olarak aşağıdaki formülleri kullanın:

1.000.000 satıra kadar:

lists  = row_count / 1,000
probes = lists / 10

1.000.000 satırdan fazla:

lists  = sqrt(row_count)
probes = sqrt(lists)
Not

sqrt karekök işlevidir. Formülleri uyguladıktan sonra, geri çağırma oranı yetersizse probes değerini yukarı doğru, aktarım hızını artırmak için ise aşağı doğru ayarlayın.

İlgili konular