Ikuti praktik terbaik untuk menyesuaikan indeks ScaNN dan menyeimbangkan perolehan penelusuran dan kueri per detik (QPS). Bergantung pada jumlah level yang dimiliki indeks Anda, parameter dan nilai yang direkomendasikan akan berubah.
Untuk mengetahui informasi tentang cara membuat indeks ScaNN, lihat Membuat indeks ScaNN.
Batas
Sebelum mulai menyesuaikan indeks ScaNN, ketahui batas berikut:
num_leavesdibatasi hingga 30 juta.
Sebelum memulai
Jika ingin membuat indeks ScaNN empat tingkat, Anda harus mengaktifkan fitur Pratinjau untuk instance AlloyDB terlebih dahulu. Untuk mengaktifkan fitur Pratinjau, pilih salah satu dari dua metode berikut:
Aktifkan flag database
scann.enable_preview_features.Untuk mengetahui informasi selengkapnya tentang cara mengonfigurasi flag database, lihat Mengonfigurasi flag database.
Tetapkan flag database tingkat sesi
scann.max_allowed_num_levelske3.SET scann.max_allowed_num_levels = 3;
Indeks hierarki dua tingkat
Untuk menerapkan rekomendasi yang membantu Anda menemukan nilai optimal num_leaves dan num_leaves_to_search untuk set data,
ikuti langkah-langkah yang direkomendasikan berikut:
- Untuk membuat indeks
ScaNNyang dioptimalkan untuk kasus berikut, tetapkan parameternum_leaveske nilai berikut, dengan baris adalah jumlah baris dalam tabel yang diindeks:- waktu dan kualitas build indeks yang seimbang tetapkan
num_leaveskesqrt(rows). - kualitas tetapkan num_leaves ke rows/100.
- waktu dan kualitas build indeks yang seimbang tetapkan
- Jalankan kueri pengujian, tingkatkan nilai
scann.num_of_leaves_to_search, hingga Anda mencapai rentang perolehan target—misalnya, 95%. Untuk mengetahui informasi selengkapnya tentang cara menganalisis kueri, lihat Menganalisis kueri. - Catat rasio antara
scann.num_leaves_to_searchdannum_leavesyang akan digunakan pada langkah-langkah berikutnya. Rasio ini memberikan perkiraan di sekitar set data yang akan membantu Anda mencapai perolehan target.
Jika Anda menggunakan vektor dimensi tinggi (500 dimensi atau lebih tinggi) dan ingin meningkatkan perolehan, coba sesuaikan nilaiscann.pre_reordering_num_neighbors. Nilai default ditetapkan ke nilai50 * KdenganKadalah batas yang Anda tetapkan dalam kueri. - Jika QPS terlalu rendah setelah kueri mencapai perolehan target, ikuti langkah-langkah berikut:
- Buat ulang indeks, tingkatkan nilai
num_leavesdanscann.num_leaves_to_searchsesuai dengan panduan berikut:- Tetapkan
num_leaveske faktor yang lebih besar dari akar kuadrat jumlah baris Anda. Misalnya, jika indeks memilikinum_leavesyang ditetapkan ke akar kuadrat jumlah baris Anda, coba tetapkan ke dua kali akar kuadrat. Jika nilainya sudah dua kali, coba tetapkan ke tiga kali akar kuadrat. - Tingkatkan
scann.num_leaves_to_searchsesuai kebutuhan untuk mempertahankan rasionya dengannum_leaves, yang Anda catat di Langkah 3. - Tetapkan
num_leaveske nilai yang kurang dari atau sama dengan jumlah baris dibagi 100.
- Tetapkan
- Jalankan kembali kueri pengujian.
Saat menjalankan kueri pengujian, lakukan eksperimen dengan mengurangi
scann.num_leaves_to_search, temukan nilai yang meningkatkan QPS sekaligus mempertahankan perolehan yang tinggi. Coba nilaiscann.num_leaves_to_searchyang berbeda tanpa membangun ulang indeks.
- Buat ulang indeks, tingkatkan nilai
- Ulangi Langkah 4 hingga QPS dan rentang perolehan mencapai nilai yang dapat diterima.
Indeks hierarki tiga tingkat
Selain rekomendasi untuk indeks ScaNN hierarki dua tingkat, gunakan panduan berikut.
Untuk menerapkan rekomendasi guna menemukan nilai optimal parameter indeks num_leaves dan max_num_levels, ikuti langkah-langkah berikut:
Buat indeks
ScaNNdengan kombinasinum_leavesdanmax_num_levelsberikut berdasarkan sasaran performa Anda:- waktu &kualitas build indeks yang seimbang: Tetapkan
max_num_levelssebagai2dannum_leavessebagaipower(rows, ⅔). - optimalkan kualitas: Tetapkan
max_num_levelssebagai2dannum_leavessebagairows/100.
- waktu &kualitas build indeks yang seimbang: Tetapkan
Jalankan kueri pengujian. Untuk mengetahui informasi selengkapnya tentang cara menganalisis kueri, lihat Menganalisis kueri.
Catat rasio antara
scann.num_leaves_to_searchdannum_leavesyang akan digunakan pada langkah-langkah berikutnya. Rasio ini memberikan perkiraan di sekitar set data yang akan membantu Anda mencapai perolehan target.
Jika Anda menggunakan vektor dimensi tinggi (500 dimensi atau lebih tinggi) dan ingin meningkatkan perolehan, coba sesuaikan nilai scann.pre_reordering_num_neighbors. Nilai default ditetapkan ke nilai 50 * K dengan K adalah batas yang Anda tetapkan dalam kueri.
Jika QPS terlalu rendah setelah kueri mencapai perolehan target, ikuti langkah-langkah berikut:
- Buat ulang indeks, tingkatkan nilai
num_leavesdanscann.num_leaves_to_searchsesuai dengan panduan berikut: - Tetapkan
num_leaveske faktor yang lebih besar daripower(rows, ⅔). Misalnya, jika indeks memilikinum_leavesyang ditetapkan kepower(rows, ⅔), coba tetapkan ke dua kalipower(rows, ⅔). Jika nilainya sudah dua kali, coba tetapkan ke tiga kalipower(rows, ⅔). - Tingkatkan
scann.num_leaves_to_searchsesuai kebutuhan untuk mempertahankan rasionya dengannum_leaves, yang Anda catat di Langkah 3. - Tetapkan
num_leaveske nilai yang kurang dari atau sama denganrows/100. - Jalankan kembali kueri pengujian. Saat menjalankan kueri pengujian, lakukan eksperimen dengan mengurangi
scann.num_leaves_to_search, temukan nilai yang meningkatkan QPS sekaligus mempertahankan perolehan yang tinggi. Coba nilaiscann.num_leaves_to_searchyang berbeda tanpa membangun ulang indeks.
- Buat ulang indeks, tingkatkan nilai
Ulangi Langkah 4 hingga QPS dan rentang perolehan mencapai nilai yang dapat diterima.
Indeks hierarki empat tingkat
Selain rekomendasi untuk
indeks hierarki tiga tingkat, gunakan
panduan berikut untuk menemukan nilai optimal
num_leaves dan
max_num_levels:
Buat indeks ScaNN dengan kombinasi
num_leavesdanmax_num_levelsberikut berdasarkan sasaran performa Anda:Waktu & kualitas build indeks yang seimbang: tetapkan
max_num_levelske3dannum_leavessebagaipower(ROWS, 3/4).Optimalkan kualitas: tetapkan
max_num_levelske3dannum_leavessebagaiROWS/100.
Jalankan kueri pengujian. Untuk mengetahui informasi selengkapnya tentang cara menganalisis kueri, lihat Menganalisis kueri.
Catat rasio antara
scann.num_leaves_to_searchdannum_leaves. Anda menggunakan rasio ini untuk mencapai perolehan target pada langkah-langkah berikutnya.Jika Anda menggunakan vektor dimensi tinggi (500 dimensi atau lebih tinggi) dan ingin meningkatkan perolehan, coba sesuaikan nilai
scann.pre_reordering_num_neighbors.Jika QPS terlalu rendah setelah kueri mencapai perolehan target, maka buat ulang indeks, tingkatkan nilai
num_leavesdanscann.num_leaves_to_searchsesuai dengan panduan berikut:Tetapkan
num_leaveske faktor yang lebih besar daripower(ROWS, 3/4). Misalnya, jika indeks memilikinum_leavesyang ditetapkan kepower(ROWS, 3/4), coba tetapkan ke dua kali lipat. Jika nilainya sudah dua kali lipat, coba tetapkan ke tiga kali lipat.Tingkatkan
scann.num_leaves_to_searchsesuai kebutuhan untuk mempertahankan rasionya dengannum_leaves, yang Anda catat di langkah ketiga.Tetapkan
num_leaveske nilai yang kurang dari atau sama denganROWS/100.Jalankan kembali kueri pengujian. Saat menjalankan kueri pengujian, lakukan eksperimen dengan mengurangi
scann.num_leaves_to_search. Temukan nilai yang meningkatkan QPS sekaligus mempertahankan perolehan yang tinggi. Coba nilaiscann.num_leaves_to_searchyang berbeda tanpa membangun ulang indeks.
Ulangi langkah keempat hingga rentang perolehan dan QPS mencapai nilai yang dapat diterima.
Meningkatkan perolehan untuk penelusuran yang difilter
Saat melakukan penelusuran vektor tetangga k-terdekat (KNN) yang menyertakan filter, Anda mungkin mengalami situasi saat kueri menampilkan lebih sedikit hasil daripada yang diminta dalam klausa LIMIT. Hal ini dapat menyebabkan apa yang disebut perolehan yang tidak memadai dan lebih mungkin terjadi saat menggunakan filter yang sangat selektif. Hal ini terjadi karena partisi awal, atau daun, yang ditelusuri ScaNN tidak berisi vektor yang cukup yang memenuhi kondisi filter.
Untuk mengatasi hal ini, AlloyDB menawarkan fitur yang memungkinkan penelusuran diperluas secara dinamis di luar kumpulan daun awal untuk menemukan hasil yang cocok.
Cara kerja streaming
Anda dapat mengaktifkan fungsi streaming dengan menetapkan parameter scann.satisfy_limit ke relaxed_order. Jika diaktifkan, pemindaian vektor akan terus menelusuri partisi daun tambahan hingga menemukan hasil yang cukup untuk memenuhi LIMIT kueri Anda, sehingga meningkatkan perolehan.
Untuk mencegah penelusuran terus berlanjut terlalu lama dan mengontrol dampak performa, Anda dapat menggunakan parameter scann.max_pct_leaves_to_search. Setelan ini bertindak sebagai perlindungan dengan menetapkan batas atas pada persentase total daun yang dapat dikunjungi kueri. Nilai default untuk setelan ini adalah 15%.
Kapan harus menggunakan streaming
Pertimbangkan untuk menggunakan fitur streaming saat:
- Anda menggunakan filter dengan penelusuran vektor.
- Anda mengamati bahwa kueri menampilkan lebih sedikit hasil daripada yang Anda harapkan berdasarkan klausa
LIMIT.
Dengan mengaktifkan scann.satisfy_limit, Anda dapat meningkatkan perolehan penelusuran yang difilter. Sebaiknya konfigurasi juga scann.max_pct_leaves_to_search untuk mencapai keseimbangan antara perolehan dan performa kueri.
Pemeliharaan indeks
Jika tabel Anda rentan terhadap pembaruan atau penyisipan yang sering, sebaiknya indeks ulang indeks ScaNN yang ada secara berkala untuk meningkatkan akurasi perolehan.
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.