Halaman ini memberikan ringkasan konseptual tentang pemfilteran adaptif di AlloyDB AI, sebuah fitur yang dirancang untuk mengoptimalkan penelusuran vektor yang difilter.
Apa yang dimaksud dengan pemfilteran adaptif?
Pemfilteran adaptif menganalisis pola kueri dan distribusi data selama eksekusi kueri untuk memilih strategi pemfilteran yang paling efisien secara dinamis, seperti pemfilteran inline atau pra-pemfilteran.
Pengoptimal kueri AI AlloyDB menggunakan analisis berbasis biaya untuk menentukan apakah pemfilteran inline atau pra-pemfilteran memberikan performa terbaik pada titik tertentu selama eksekusi kueri.
Jenis pengoptimalan ini mendukung penelusuran vektor yang difilter AlloyDB AI, dengan pemfilteran adaptif yang otomatis beralih antara penggunaan indeks vektor dan metadata, yang menghasilkan hasil yang efisien dan akurat tanpa intervensi manual.
Beralih secara dinamis antara strategi pemfilteran
Pemfilteran adaptif secara otomatis dan dinamis beralih antara strategi pemfilteran inline dan pra-pemfilteran selama eksekusi kueri berdasarkan pola kueri real-time dan distribusi data. Pengoptimal kueri AI AlloyDB menggunakan analisis berbasis biaya untuk menentukan strategi mana yang memberikan performa terbaik pada titik tertentu.
Dari inline hingga pra-pemfilteran
Saat pengoptimal menentukan bahwa pra-pemfilteran lebih efisien, pemfilteran adaptif akan memicu peralihan dari pemfilteran inline ke pra-pemfilteran selama eksekusi. Rencana kueri akan berubah secara dinamis untuk mencerminkan hal ini.
Misalnya, rencana dapat menampilkan Bitmap assisted pre-filtering
di kolom Strategi Eksekusi saat pengoptimal menentukan bahwa pra-pemfilteran lebih efisien pada titik tersebut dalam kueri. Perubahan dinamis ini terjadi saat sistem beradaptasi dengan data sebenarnya yang ditemuinya selama eksekusi kueri.
Limit (actual rows=10 loops=1)
-> Custom Scan (vector scan) on t1 (actual rows=10 loops=1)
Execution Strategy: Bitmap assisted pre-filtering
Order By: (vec_col <=> '[...]'::vector)
Limit: 10
-> Bitmap Index Scan on btree_idx (actual rows=10000 loops=1)
Index Cond: (int_col <= 100000000)
Saat menggunakan Execution Strategy: Bitmap assisted pre-filtering
, Bitmap Index Scan
terpisah akan memfilter set data besar terlebih dahulu. Jika prapenyaringan ini secara efektif mempersempit kandidat, indeks vektor tidak digunakan untuk penelusuran kesamaan vektor akhir.
Dari pra-pemfilteran hingga pemfilteran inline
Pemfilteran adaptif juga dapat beralih secara dinamis dari pra-pemfilteran ke pemfilteran inline jika pengoptimal kueri AI AlloyDB menentukan bahwa pemfilteran inline lebih efisien untuk karakteristik kueri saat ini.
Dalam kasus seperti itu, rencana kueri akan disesuaikan secara dinamis untuk mencerminkan pemrosesan data vektor yang lebih langsung tanpa langkah prapenyaringan eksplisit sebelum pemindaian vektor. Kemampuan beradaptasi ini membantu mencapai performa yang optimal saat distribusi data atau parameter kueri berubah selama runtime.
Misalnya, rencana kueri menampilkan vector scan
di kolom Strategi Eksekusi saat pengoptimal menentukan bahwa strategi pemfilteran inline lebih efisien untuk kueri tertentu.
Limit (actual rows=10 loops=1)
-> Custom Scan (vector scan) on t1 (actual rows=10 loops=1)
Execution Strategy: Bitmap assisted vector Scan on scann_idx
Order By: (vec_col <=> '[...]'::vector)
Limit: 10
Num Requalifications: 0
Num filtered: 1000
-> Bitmap Index Scan on btree_idx (actual rows=10000 loops=1)
Index Cond: (int_col <= 100000000)
Dalam contoh ini, Execution Strategy
menampilkan Bitmap assisted vector Scan on scann_idx
, dengan Bitmap Index Scan
yang mendasarinya di btree_idx
. Hal ini menunjukkan bahwa penelusuran vektor menggunakan filter bitmap, yang dihasilkan oleh Pemindaian Indeks Bitmap berdasarkan kondisi int_col <= 100000000
. Kemudian, Custom Scan (vector scan)
hanya memproses baris yang diidentifikasi oleh bitmap ini, dengan mengintegrasikan pemfilteran langsung ke dalam proses pemindaian vektor.