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 dalam tabel dasar dengan nilai embedding vektor. Tabel dasar Anda harus memiliki minimal 1.000 baris. Jika Anda memiliki lebih banyak titik data yang tersedia, 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 didedikasikan instance Cloud SQL Anda untuk indeks vektor. Ini adalah tanda statis
yang memerlukan instance Anda untuk dimulai ulang. Memori ini memiliki dua tujuan utama:
Menyimpan struktur indeks vektor: bagian non-leaf 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 leaf dan 768 dimensi akan memiliki
TREE_MEMORY
sekitar 1.000 * 768 * 4 * 2 atau 6.144.000 byte. Anda juga dapat memeriksaTREE_MEMORY
yang sebenarnya menggunakan tabelinformation_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 akan dibongkar untuk memberi ruang bagi permintaan lain.Memori untuk pembuatan indeks (data pelatihan): selama pembuatan indeks vektor, memori diperlukan untuk memproses sampel data dari tabel dasar Anda guna membuat indeks. Memori ini hanya digunakan selama proses pembuatan indeks dan dikosongkan 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 1.000.000 baris dan 768 dimensi,
training_memory
adalah 1000000 * 0,1 * 768 * 4 atau 307.200.000 byte. Hanya 10% data tabel dasar yang diambil sampelnya untuk menghitung sentroid untuk pohon.Saat Anda mengaktifkan flag
cloudsql_vector
, Cloud SQL akan otomatis menetapkancloudsql_vector_max_mem_size
default berdasarkan ukuran VM Anda. Setelan default ini biasanya sudah cukup untuk workload umum. Cloud SQL mengurangi flaginnodb_buffer_pool_size
untuk mengalokasikan memori ini. Nilai maksimum default untukcloudsql_vector_max_mem_size
adalah 16 GB. Jika perlu menyesuaikan ukuran memori, Anda dapat menyesuaikancloudsql_vector_max_mem_size
secara dinamis berdasarkan penggunaan indeks vektor.Penting: Jika Anda meningkatkan
cloudsql_vector_max_mem_size
, Anda harus mengurangiinnodb_buffer_pool_size
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% dari kumpulan buffer
- Maksimum 16 GB
Anda dapat menyesuaikan memori nanti, sesuai kebutuhan. Untuk mengetahui informasi selengkapnya, lihat Mengaktifkan flag database untuk penyematan vektor.
Untuk mengetahui 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:
- pernyataan
CREATE VECTOR INDEX
, ekstensi Cloud SQL untuk sintaksis MySQL standar. - Pernyataan
ALTER TABLE
dengan ekstensi klausaADD VECTOR INDEX
Cloud SQL. Anda tidak dapat menjalankan pernyataan ini secara bersamaan dengan pernyataan DDL lainnya di tabel.
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 ukuran jarak yang sama dalam parameter ini dengan jarak yang Anda tetapkan di opsi penelusuranapprox_distance
. Literal yang didukung adalah:L2_SQUARED
COSINE
DOT_PRODUCT
NUM_LEAVES
: opsional. Menentukan jumlah partisi (daun) yang akan dibuat. Ubah setelan ini dari setelan defaultnya hanya jika Anda memiliki pemahaman yang baik tentang penelusuran ANN dan set data Anda. Jumlah yang ditentukan tidak boleh lebih besar daripada jumlah sematan dalam 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 mode hanya baca dan tidak ada DML yang diizinkan pada 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 sudah 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 membuat 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 mencukupi dapat menyebabkan kegagalan build. Lihat Mengonfigurasi alokasi memori untuk indeks vektor. |
innodb_ddl_threads |
Tingkat paralelisme untuk pelatihan dan pembuatan indeks. | 4 | Sesi | Nilai yang lebih tinggi akan mengurangi waktu build, tetapi meningkatkan beban CPU. Tetapkan nilai ini ke jumlah CPU yang dapat Anda cadangkan tanpa memengaruhi operasi database secara negatif. |
Pastikan cloudsql_vector_max_mem_size
dikonfigurasi dengan tepat untuk pelatihan.
Sesuaikan innodb_ddl_threads
untuk menyeimbangkan waktu build dan beban CPU, dengan mempertimbangkan
dampak pada operasi database serentak. Pantau pemakaian CPU selama
build.
Menghapus indeks vektor
Untuk menghapus indeks vektor, gunakan pernyataan SQL DROP INDEX
atau ALTER TABLE
dengan nama indeks yang ingin Anda hapus, seperti yang ditunjukkan 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 mengetahui 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
- Baca ringkasan tentang penelusuran vektor di Cloud SQL.
- Pelajari cara mengaktifkan dan menonaktifkan penyematan vektor di instance Anda.
- Pelajari cara membuat embedding vektor.
- Pelajari cara melakukan penelusuran pada embedding vektor.