Esta página descreve como gerenciar manualmente o conteúdo do mecanismo colunar para acelerar o desempenho da consulta. Ela explica como adicionar e remover tabelas, visualizações materializadas e índices do ScaNN.
Gerenciar tabelas, visualizações materializadas e índices do ScaNN
Com base na sua carga de trabalho, é possível adicionar colunas manualmente ao repositório de colunas ou descartar algumas ou todas as colunas de uma tabela ou visualização materializada do repositório de colunas. A avaliação de consulta usa automaticamente os dados colunares armazenados para responder às consultas.
Da mesma forma, é possível adicionar manualmente um índice do ScaNN ao mecanismo colunar para acelerar a pesquisa vetorial. Isso permite pesquisas eficientes de vizinhos mais próximos em grandes conjuntos de dados de embeddings de vetor.
Ao escolher quais tabelas, visualizações materializadas e colunas adicionar ao repositório de colunas, considere o tamanho do repositório de colunas e o formato da carga de trabalho. Bons candidatos para seleção incluem tabelas ou visualizações grandes que são verificadas com frequência. Nessas tabelas ou visualizações, identifique grandes índices não exclusivos usados pela carga de trabalho OLAP. É possível adicionar as colunas desses índices ao repositório de colunas e, potencialmente, descartar os índices, eliminando o custo de desempenho associado à manutenção deles na instância principal.
Use um dos métodos a seguir para gerenciar o conteúdo do mecanismo colunar:
- Gerenciar o conteúdo do repositório de colunas atualizando as flags do banco de dados
- Gerenciar o conteúdo do repositório de colunas usando funções SQL
Antes de começar
- Você precisa ter um destes papéis do IAM no Google Cloud projeto que está sendo usado:
roles/alloydb.admin(o papel predefinido do IAM de Admin do AlloyDB)roles/owner(o papel básico do IAM de Proprietário)roles/editor(o papel básico do IAM de Editor)
Se você não tiver nenhum desses papéis, entre em contato com o Administrador da organização para solicitar acesso.
Gerenciar o conteúdo do repositório de colunas atualizando as flags do banco de dados
É possível gerenciar o conteúdo do repositório de colunas manualmente atualizando a flag do banco de dados google_columnar_engine.relations. A flag tem um único valor que especifica todas as fontes de dados do repositório de colunas. Durante a reinicialização, as colunas especificadas nessa flag são preenchidas automaticamente no repositório de colunas.
É possível usar essa flag com a columnarização automática. Se o mecanismo colunar tiver memória disponível após preencher as colunas especificadas pela flag google_columnar_engine.relations, a columnarização automática vai adicionar mais colunas ao repositório de colunas, conforme necessário.
Para mais informações sobre como definir as flags do banco de dados de uma instância usando a Google Cloud CLI ou o Google Cloud console, consulte Configurar as flags do banco de dados de uma instância.
Adicionar colunas usando flags
Para adicionar colunas ao repositório de colunas, defina a flag google_columnar_engine.relations de uma instância. Defina o valor como uma lista de itens separados por vírgulas, com cada item especificando uma lista de colunas a serem incluídas em uma tabela específica, neste formato:
DATABASE_NAME.SCHEMA_NAME.TABLE_NAME(COLUMN_LIST)
Substitua:
DATABASE_NAME: o banco de dados que contém as colunas a serem adicionadas ao repositório de colunas.
SCHEMA_NAME: o esquema que identifica as tabelas ou as visualizações materializadas a serem adicionadas ao repositório de colunas, por exemplo,
public.TABLE_NAME: a tabela ou a visualização materializada que contém as colunas a serem adicionadas ao repositório de colunas.
COLUMN_LIST: uma lista separada por vírgulas das colunas a serem adicionadas ao repositório de colunas.
Para adicionar todas as colunas de uma tabela ou visualização materializada, omita a lista de colunas:
DATABASE_NAME.SCHEMA_NAME.TABLE_NAME
Para mais informações sobre como definir as flags do banco de dados em uma instância, consulte Configurar as flags do banco de dados de uma instância.
Sintaxe da CLI do Google Cloud ao usar google_columnar_engine.relations
Se você usar a Google Cloud CLI para definir a flag google_columnar_engine.relations, será necessário usar uma sintaxe de delimitador alternativa para separar as flags do banco de dados definidas. Isso ocorre porque a lista de colunas é separada por vírgulas, exigindo que você use um caractere que não seja vírgula ao especificar flags no mesmo argumento de linha de comando.
O exemplo a seguir demonstra o uso da CLI gcloud para adicionar duas colunas no esquema public ao repositório de colunas. O exemplo define uma flag separada
para ativar o mecanismo colunar, porque o uso do
gcloud alloydb instance update comando para definir qualquer flag do banco de dados também precisa definir todas as outras flags do banco de dados que você quer ter valores não padrão, mesmo que já estejam definidas.
gcloud alloydb instances update INSTANCE_NAME \
--database-flags=^:^\
google_columnar_engine.relations='DATABASE_NAME.public.TABLE_NAME(COLUMN_1,COLUMN_2)'\
:google_columnar_engine.enabled=on\
[:FLAG_3=VALUE_3 ...] \
--region=REGION_ID \
--cluster=CLUSTER_IDDescartar colunas usando flags
Para descartar colunas do repositório de colunas, defina um novo valor para a flag google_columnar_engine.relations descrita na seção anterior, deixando de fora as colunas que você quer descartar.
Para descartar todas as colunas do repositório de colunas, desative a flag google_columnar_engine.relations da instância.
Para mais informações sobre como definir flags do banco de dados em uma instância, consulte Configurar as flags do banco de dados de uma instância.
Gerenciar o conteúdo do repositório de colunas usando funções SQL
É possível gerenciar o conteúdo do repositório de colunas manualmente usando funções SQL.
Estimar os requisitos de espaço do repositório de colunas
Execute a função SQL google_columnar_engine_estimate para estimar o espaço total necessário para uma relação no mecanismo colunar.
Cliente psql
SELECT google_columnar_engine_estimate(
relation => 'TABLE_NAME',
columns => 'COLUMN_LIST'
);
-
Replace the following:
-
TABLE_NAME: uma string que contém o nome da tabela ou da visualização materializada. Se a tabela ou a visualização estiver em um esquema diferente de público, especifique o nome do esquema, um ponto e o nome da tabela ou da visualização. Por exemplo,'myschema.mytable'. -
COLUMN_LIST: uma string que contém uma lista separada por vírgulas e sensível a maiúsculas e minúsculas dos nomes das colunas que você quer adicionar. Se você quiser adicionar todas as colunas da tabela ou da visualização materializada ao repositório de colunas, omita esse parâmetro.
Adicionar colunas usando funções SQL
Execute a função SQL google_columnar_engine_add para adicionar colunas ao repositório de colunas.
Esse método adiciona as colunas especificadas ao repositório de colunas e gerencia as colunas apenas no nó conectado. As novas colunas não são mantidas no repositório em reinicializações de instâncias.
Esse método não altera a
google_columnar_engine.relations
flag do banco de dados. A
columnarização
automática não considera as colunas adicionadas por essa função SQL.
Cliente psql
SELECT google_columnar_engine_add(
relation => 'TABLE_NAME',
columns => 'COLUMN_LIST'
);
-
Replace the following:
- 'TABLE_NAME': uma string que contém o nome da tabela ou da
visualização materializada. Se a tabela ou a visualização estiver em um esquema diferente de
public, especifique o nome do esquema, um ponto e o nome da tabela ou da visualização. Por exemplo,'myschema.mytable'. - 'COLUMN_LIST': uma string que contém uma lista separada por vírgulas, sensível a maiúsculas e minúsculas dos nomes das colunas que você quer adicionar. Se você quiser adicionar todas as colunas da tabela ou da visualização materializada ao repositório de colunas, omita esse parâmetro.
Descartar colunas usando funções SQL
Execute a função SQL google_columnar_engine_drop da seguinte maneira:
Cliente psql
SELECT google_columnar_engine_drop(
relation => 'TABLE_NAME',
columns => 'COLUMN_LIST'
);
- 'TABLE_NAME': uma string que contém o nome da tabela ou da
visualização materializada. Se a tabela ou a visualização estiver em um esquema diferente de
public, especifique o nome do esquema, um ponto e o nome da tabela ou da visualização. Por exemplo,'myschema.mytable'. - 'COLUMN_LIST': uma string que contém uma lista separada por vírgulas, sensível a maiúsculas e minúsculas dos nomes das colunas que você quer adicionar. Se você quiser adicionar todas as colunas da tabela ou da visualização materializada ao repositório de colunas, omita esse parâmetro.
É possível usar a função google_columnar_engine_drop para remover colunas adicionadas editando a flag do banco de dados google_columnar_engine.relations. No entanto, quando você faz isso, essas colunas são adicionadas de volta ao repositório colunar quando a instância é reiniciada.
Gerenciar índices do ScaNN no mecanismo colunar
Para acelerar a pesquisa vetorial, é possível carregar índices do ScaNN no cache de índice do mecanismo colunar.
Adicionar, remover e verificar índices do ScaNN usando funções SQL
É possível adicionar, remover e verificar manualmente os índices do ScaNN no cache de índice usando funções SQL. A adição de um índice ao cache pode acelerar as consultas de pesquisa vetorial.
Adicionar um índice do ScaNN
Para adicionar um índice específico ao cache de índice do mecanismo colunar, use a seguinte função SQL:
SELECT google_columnar_engine_add_index(index => 'SCANN_INDEX_NAME');
Substitua SCANN_INDEX_NAME pelo nome do índice do ScaNN que você quer adicionar ao cache de índice do mecanismo colunar.
Remover um índice do ScaNN
Para descartar um índice específico do ScaNN do mecanismo colunar, use a seguinte função SQL:
SELECT google_columnar_engine_drop_index(index => 'SCANN_INDEX_NAME');
Substitua SCANN_INDEX_NAME pelo nome do índice do ScaNN que você quer remover.
Verificar o uso do mecanismo colunar
Para verificar se as verificações de índice vetorial usam o mecanismo colunar, execute o comando EXPLAIN ANALYZE com a opção COLUMNAR_ENGINE:
EXPLAIN (ANALYZE TRUE, SCANN TRUE, COSTS FALSE, TIMING FALSE, SUMMARY FALSE, VERBOSE FALSE, COLUMNAR_ENGINE TRUE)
SELECT * FROM t ORDER BY val <=> '[0.5,0.5,0.5,0.5]' LIMIT 100;
O comando retorna um plano de consulta semelhante ao seguinte:
Index Scan using t_ix3 on t t_1 (actual rows=100 loops=1)
Order By: (val <=> '[0.5,0.5,0.5,0.5]'::vector)
Limit: 100
ScaNN Info: (... columnar engine nodes hit=6...)
Columnar Engine ScaNN Info: (index found=true)
A presença de columnar engine nodes hit e Columnar Engine ScaNN Info: (index found=true) na saída confirma que o mecanismo colunar é usado para a consulta.