Membuat dan mengelola indeks vektor

Halaman ini menjelaskan cara mengonfigurasi memori untuk indeks vektor, serta membuat, menyesuaikan, memantau, dan menghapus indeks vektor.

Sebelum memulai

Sebelum membuat indeks vektor, Anda harus memuat data ke tabel dasar dengan nilai penyematan vektor. Tabel dasar Anda harus memiliki minimal 1.000 baris. Jika memiliki lebih banyak titik data, Anda bisa mendapatkan partisi dan pelatihan indeks yang lebih baik.

Mengonfigurasi alokasi memori untuk indeks vektor

Flag database cloudsql_vector_max_mem_size mengontrol jumlah memori yang dikhususkan oleh instance Cloud SQL Anda untuk indeks vektor. Ini adalah tanda statis yang mengharuskan instance Anda dimulai ulang. Memori ini memiliki dua tujuan utama:

  1. Menyimpan struktur indeks vektor: bagian non-daun dari indeks vektor (TREE_MEMORY) berada di memori ini. Perkiraan ukuran pohon ini bergantung pada jumlah node daun (num_leaves) dan dimensi vektor Anda:

     Approximate TREE_MEMORY = num_leaves * vector dimensions * 4 * 2
    

    Misalnya, indeks dengan 1.000 daun dan 768 dimensi akan memiliki TREE_MEMORY perkiraan 1.000 * 768 * 4 * 2 atau 6144000 byte. Anda juga dapat memeriksa TREE_MEMORY yang sebenarnya menggunakan tabel information_schema.innodb_vector_indexes. Cloud SQL mengelola memori tersebut. Anda tidak perlu mengalokasikan ruang untuk semua indeks vektor secara bersamaan, karena indeks yang tidak aktif di-unload untuk menyediakan ruang bagi permintaan lain.

  2. Memori untuk pembuatan indeks (data pelatihan): selama pembuatan indeks vektor, memori diperlukan untuk memproses sampel data dari tabel dasar Anda untuk membuat indeks. Memori ini hanya digunakan selama proses pembuatan indeks dan dibebaskan setelahnya. Perkiraan ukuran memori yang diperlukan untuk pelatihan adalah:

     approximate_training_memory = num_rows in base table * 0.1 * 4 * vector dimensions
    

    Misalnya, dengan tabel yang berisi 1.000.000 baris dan 768 dimensi, training_memory akan menjadi 1000000 * 0,1 * 768 * 4 atau 307.200.000 byte. Hanya 10% data tabel dasar yang diambil sampelnya untuk menghitung centroid untuk pohon.

    Saat Anda mengaktifkan flag cloudsql_vector, Cloud SQL akan otomatis menetapkan cloudsql_vector_max_mem_size default berdasarkan ukuran VM Anda. Setelan default ini biasanya sudah cukup untuk beban kerja standar. Cloud SQL mengurangi flag innodb_buffer_pool_size untuk mengallokasikan memori ini. Nilai maksimum default untuk cloudsql_vector_max_mem_size adalah 16 GB. Jika perlu menyesuaikan ukuran memori, Anda dapat menyesuaikan cloudsql_vector_max_mem_size secara dinamis berdasarkan penggunaan indeks vektor.

    Penting: Jika Anda meningkatkan cloudsql_vector_max_mem_size, Anda harus menurunkan innodb_buffer_pool_size secara bersamaan untuk menghindari masalah memori.

cloudsql_vector_max_mem_size nilai

Ukuran VM cloudsql_vector_max_mem_size
4 GB 194MB
8 GB 515MB
16 GB 1,2 GB
32 GB 2,56 GB
64 GB 5,12 GB
128 GB 10,24 GB
256GB+ 16 GB

Rentang memori indeks vektor yang dialokasikan adalah sebagai berikut:

  • Minimum 128 MB
  • 10% kumpulan buffer
  • Maksimum 16 GB

Anda dapat menyesuaikan memori nanti, sesuai kebutuhan. Untuk mengetahui informasi selengkapnya, lihat Mengaktifkan flag database untuk penyematan vektor.

Untuk informasi tentang cara memantau ukuran indeks vektor, lihat Memantau indeks vektor.

Untuk memperbarui memori yang dialokasikan untuk indeks vektor pada instance, gunakan perintah berikut:

gcloud sql instances patch INSTANCE_NAME \
 --database-flags= cloudsql_vector_max_mem_size=NEW_MEMORY_VALUE;

Ganti kode berikut:

  • INSTANCE_NAME: nama instance tempat Anda mengubah alokasi memori.
  • NEW_MEMORY_VALUE: alokasi memori yang diperbarui, dalam byte, untuk indeks vektor Anda.

Perubahan ini akan langsung diterapkan setelah database dimulai ulang.

Membuat indeks vektor

Ada dua cara untuk membuat indeks vektor:

Gunakan sintaksis berikut untuk membuat indeks vektor menggunakan CREATE VECTOR INDEX:

CREATE
  VECTOR INDEX INDEX_NAME
ON TABLE_NAME(COLUMN_NAME)
USING
  SCANN[QUANTIZER = SQ8]
    DISTANCE_MEASURE
  = L2_SQUARED | COSINE | DOT_PRODUCT[NUM_LEAVES = INT_VALUE { '</var>' }}];

Berikut adalah opsi indeks:

  • USING SCANN: opsional. Menunjukkan jenis indeks yang akan digunakan. SCANN adalah satu-satunya nilai yang didukung.
  • QUANTIZER: opsional. Memetakan vektor berdimensi tinggi ke representasi terkompresi. SQ8 adalah satu-satunya nilai yang didukung.
  • DISTANCE_MEASURE: wajib diisi. Menentukan formula matematika yang akan digunakan untuk menghitung kemiripan dua vektor. Anda harus menetapkan pengukuran jarak yang sama di parameter ini dengan jarak yang Anda tetapkan di opsi penelusuran approx_distance. Literal yang didukung adalah:
    • L2_SQUARED
    • COSINE
    • DOT_PRODUCT
  • NUM_LEAVES: opsional. Menentukan jumlah partisi (daun) yang akan dibuat. Hanya ubah setelan ini dari setelan default-nya jika Anda memiliki pemahaman yang baik tentang penelusuran ANN dan set data Anda. Jumlah yang ditentukan tidak boleh lebih besar dari jumlah penyematan di tabel dasar.

Misalnya, untuk membuat indeks vektor, jalankan perintah berikut:

CREATE
  VECTOR INDEX vectorIndex
ON dbname.books(embeddings) DISTANCE_MEASURE = L2_SQUARED;

Saat pernyataan CREATE berjalan, tabel dasar akan dimasukkan ke dalam mode hanya baca dan tidak ada DML yang diizinkan di tabel dasar.

Anda dapat menggunakan sintaksis berikut untuk membuat indeks pada tabel yang ada:

ALTER TABLE tbl_name
  ADD VECTOR INDEX index_name(key_part)[index_option];

Misalnya, untuk membuat indeks pada tabel yang ada:

ALTER TABLE t1 ADD VECTOR INDEX index1(j)
USING SCANN QUANTIZER = SQ8 DISTANCE_MEASURE = l2_squared NUM_LEAVES = 10;

Menyesuaikan indeks vektor

Bagian ini memberikan informasi lebih lanjut tentang parameter yang Anda gunakan untuk mem-build indeks vektor. Untuk menyesuaikan indeks vektor, gunakan informasi ini untuk menentukan cara memengaruhi proses build.

Parameter Deskripsi Default Cakupan Dampak
cloudsql_vector_max_mem_size Memori yang dialokasikan untuk pelatihan indeks. Bervariasi Instance Memori yang tidak memadai dapat menyebabkan kegagalan build. Lihat Mengonfigurasi alokasi memori untuk indeks vektor.
innodb_ddl_threads Tingkat paralelisme untuk pelatihan dan build indeks. 4 Sesi Nilai yang lebih tinggi akan mengurangi waktu build, tetapi meningkatkan beban CPU. Tetapkan nilai ini ke jumlah CPU yang dapat Anda siapkan tanpa memengaruhi operasi database secara negatif.

Pastikan cloudsql_vector_max_mem_size dikonfigurasi dengan benar untuk pelatihan. Sesuaikan innodb_ddl_threads untuk menyeimbangkan waktu build dan beban CPU, dengan mempertimbangkan dampaknya terhadap operasi database serentak. Memantau penggunaan CPU selama build.

Meletakkan indeks vektor

Untuk menghapus indeks vektor, gunakan pernyataan DROP INDEX atau ALTER TABLE SQL dengan nama indeks yang ingin Anda hapus, seperti yang ditunjukkan dalam contoh berikut:

DROP INDEX index_name ON books;

ALTER TABLE table_name
DROP INDEX index_name;

Memantau indeks vektor

Cloud SQL menyediakan tabel skema informasi berikut dengan informasi real-time tentang indeks vektor yang dimuat dalam memorinya:

  • information_schema.innodb_vector_indexes mencantumkan semua indeks vektor yang dibuka di memori setelah dimulai ulang.
  • information_schema.innodb_all_vector_indexes mencantumkan semua indeks vektor yang ada di instance (meskipun belum dibuka di memori).
  • information_schema.innodb_vector_indexes_memory memberikan informasi tentang penggunaan memori keseluruhan indeks vektor dalam instance.

Untuk informasi yang lebih mendetail, lihat Skema informasi.

Untuk melihat informasi dalam tabel innodb_vector_indexes, jalankan perintah berikut:

SELECT * FROM information_schema.innodb_vector_indexes \ G;

Outputnya terlihat mirip dengan yang berikut ini:

 INDEX_NAME: t1_vec_index
 TABLE_NAME: test.t1
 INDEX_TYPE: TREE_SQ
 DIMENSION: 3
 DIST_MEASURE: COSINE
 STATUS: Ready
 STATE: INDEX_READY_TO_USE
 NUM_LEAVES: 10
 NUM_LEAVES_TO_SEARCH: 10
 QUERIES: 1
 MUTATIONS: 1
 TREE_MEMORY: 443

Langkah berikutnya