Esta página descreve como configurar a memória para índices vetoriais e criar, otimizar, monitorizar e eliminar índices vetoriais.
Antes de começar
Antes de criar um índice vetorial, tem de carregar dados na tabela base com valores de incorporação de vetores. A tabela base tem de ter, pelo menos, 1000 linhas. Se tiver mais pontos de dados disponíveis, pode obter uma melhor partição e preparação do índice.
Configure a atribuição de memória para índices vetoriais
A flag da base de dados cloudsql_vector_max_mem_size
controla a quantidade de memória que a sua instância do Cloud SQL dedica aos índices vetoriais. Esta é uma flag estática que requer o reinício da sua instância. Esta memória tem dois objetivos principais:
Armazenar a estrutura do índice vetorial: a parte não folha do índice vetorial (o
TREE_MEMORY
) reside nesta memória. O tamanho aproximado desta árvore depende do número de nós folha (num_leaves
) e das dimensões dos seus vetores:Approximate TREE_MEMORY = num_leaves * vector dimensions * 4 * 2
Por exemplo, um índice com 1000 folhas e 768 dimensões teria um
TREE_MEMORY
aproximado de 1000 * 768 * 4 * 2 ou 6144000 bytes. Também pode verificar oTREE_MEMORY
real através da tabelainformation_schema.innodb_vector_indexes
. O Cloud SQL gere essa memória. Não precisa de alocar espaço para todos os índices vetoriais em simultâneo, uma vez que os índices inativos são descarregados para dar lugar a outros pedidos.Memória para a criação de índices (dados de preparação): durante a criação do índice de vetores, é necessária memória para processar uma amostra dos dados da tabela base para criar o índice. Esta memória é usada apenas durante o processo de criação do índice e é libertada posteriormente. O tamanho aproximado da memória necessária para a preparação é:
approximate_training_memory = num_rows in base table * 0.1 * 4 * vector dimensions
Por exemplo, com uma tabela de 1 000 000 de linhas e 768 dimensões, o
training_memory
seria 1000000 * 0,1 * 768 * 4 ou 307 200 000 bytes. Apenas 10% dos dados da tabela base são sujeitos a amostragem para calcular os centroides da árvore.Quando ativa a flag
cloudsql_vector
, o Cloud SQL define automaticamente um valorcloudsql_vector_max_mem_size
predefinido com base no tamanho da VM. Normalmente, esta predefinição é suficiente para cargas de trabalho típicas. O Cloud SQL reduz a flaginnodb_buffer_pool_size
para alocar esta memória. O valor máximo predefinido paracloudsql_vector_max_mem_size
é de 16 GB. Se precisar de ajustar o tamanho da memória, pode ajustar dinamicamentecloudsql_vector_max_mem_size
com base na utilização do índice de vetores.Importante: se aumentar
cloudsql_vector_max_mem_size
, tem de diminuirinnodb_buffer_pool_size
em conformidade para evitar problemas de memória.
Valores cloudsql_vector_max_mem_size
Tamanho da VM | cloudsql_vector_max_mem_size |
4 GB | 194MB |
8GB | 515MB |
16GB | 1,2 GB |
32GB | 2,56 GB |
64GB | 5,12 GB |
128GB | 10,24 GB |
256 GB ou mais | 16GB |
O intervalo de memória do índice de vetores alocada é o seguinte:
- Mínimo de 128 MB
- 10% do conjunto de reservas
- Máximo de 16 GB
Pode ajustar a memória mais tarde, conforme necessário. Para mais informações, consulte o artigo Ative a flag da base de dados para incorporações vetoriais.
Para ver informações sobre a monitorização do tamanho do índice vetorial, consulte o artigo Monitorize índices vetoriais.
Para atualizar a memória alocada para os índices vetoriais na instância, use o seguinte comando:
gcloud sql instances patch INSTANCE_NAME \
--database-flags= cloudsql_vector_max_mem_size=NEW_MEMORY_VALUE;
Substitua o seguinte:
- INSTANCE_NAME: o nome da instância na qual está a alterar a atribuição de memória.
- NEW_MEMORY_VALUE: a atribuição de memória atualizada, em bytes, para os seus índices de vetores.
Esta alteração entra em vigor imediatamente após o reinício da base de dados.
Crie um índice vetorial
Existem duas formas de criar um índice vetorial:
CREATE VECTOR INDEX
statement, uma extensão do Cloud SQL à sintaxe padrão do MySQL.- Declaração
ALTER TABLE
com a extensão da cláusulaADD VECTOR INDEX
do Cloud SQL. Não pode executar esta declaração em simultâneo com outras declarações DDL na tabela.
Use a seguinte sintaxe para criar um índice vetorial com 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>' }}];
Seguem-se as opções de índice:
USING SCANN
: opcional. Indica o tipo de índice a usar. SCANN é o único valor suportado.QUANTIZER
: opcional. Mapeia um vetor de alta dimensão para uma representação comprimida. SQ8 é o único valor suportado.DISTANCE_MEASURE
: obrigatório. Especifica uma fórmula matemática a usar para calcular a semelhança de dois vetores. Tem de definir a mesma medida de distância neste parâmetro que a distância definida nasapprox_distance
opções de pesquisa. Os literais suportados são:L2_SQUARED
COSINE
DOT_PRODUCT
NUM_LEAVES
: opcional. Especifica o número de partições (folhas) a criar. Só altere esta definição da predefinição se tiver uma boa compreensão da pesquisa de ANN e do seu conjunto de dados. O número especificado não pode ser superior ao número de incorporações na tabela base.
Por exemplo, para criar um índice vetorial, execute o seguinte:
CREATE
VECTOR INDEX vectorIndex
ON dbname.books(embeddings) DISTANCE_MEASURE = L2_SQUARED;
Enquanto a declaração CREATE
estiver em execução, a tabela base é colocada num modo de leitura e não são permitidos DMLs na tabela base.
Pode usar a seguinte sintaxe para criar um índice numa tabela existente:
ALTER TABLE tbl_name
ADD VECTOR INDEX index_name(key_part)[index_option];
Por exemplo, para criar um índice numa tabela existente:
ALTER TABLE t1 ADD VECTOR INDEX index1(j)
USING SCANN QUANTIZER = SQ8 DISTANCE_MEASURE = l2_squared NUM_LEAVES = 10;
Ajuste o índice de vetores
Esta secção dá mais informações sobre os parâmetros que usa para criar o índice vetorial. Para otimizar o índice vetorial, use estas informações para determinar como influenciar o processo de criação.
Parâmetro | Descrição | Predefinição | Âmbito | Impacto |
cloudsql_vector_max_mem_size |
Memória alocada para a preparação do índice. | Varia | Instância | A memória insuficiente pode levar a falhas de compilação. Consulte o artigo Configure a atribuição de memória para índices vetoriais. |
innodb_ddl_threads |
Grau de paralelismo para a preparação e a criação do índice. | 4 | Sessão | Os valores mais elevados reduzem o tempo de compilação, mas aumentam a carga da CPU. Defina este valor para o número de CPUs que pode dispensar sem afetar negativamente as operações da base de dados. |
Certifique-se de que o cloudsql_vector_max_mem_size
está configurado adequadamente para a preparação.
Ajuste innodb_ddl_threads
para equilibrar o tempo de compilação e o carregamento da CPU, tendo em conta o impacto nas operações de base de dados simultâneas. Monitorize a utilização da CPU durante a compilação.
Elimine um índice de vetores
Para eliminar um índice vetorial, use as declarações SQL DROP INDEX
ou ALTER TABLE
com o nome do índice que quer eliminar, conforme mostrado no seguinte:
DROP INDEX index_name ON books;
ALTER TABLE table_name
DROP INDEX index_name;
Monitorize os índices vetoriais
O Cloud SQL fornece as seguintes tabelas de esquema de informações com informações em tempo real sobre os índices de vetores carregados na respetiva memória:
- O
information_schema.innodb_vector_indexes
apresenta todos os índices vetoriais que são abertos na memória após o reinício. information_schema.innodb_all_vector_indexes
lista todos os índices vetoriais que existem na instância (mesmo que ainda não estejam abertos na memória).information_schema.innodb_vector_indexes_memory
fornece informações sobre a utilização geral de memória dos índices vetoriais na instância.
Para informações mais detalhadas, consulte o esquema de informações.
Para ver informações na tabela innodb_vector_indexes
, execute o seguinte comando:
SELECT * FROM information_schema.innodb_vector_indexes \ G;
O resultado tem um aspeto semelhante ao seguinte:
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
O que se segue?
- Leia a vista geral sobre a pesquisa vetorial no Cloud SQL.
- Saiba como ativar e desativar as incorporações vetoriais na sua instância.
- Saiba como gerar incorporações vetoriais.
- Saiba como fazer pesquisas em incorporações vetoriais.