À medida que as linhas da tabela são adicionadas, excluídas ou atualizadas, o mecanismo colunar não atualiza imediatamente os dados no armazenamento de colunas. Em vez disso, ele marca o conteúdo afetado no armazenamento de colunas como inválido, e as consultas são planejadas e executadas usando dados orientados a colunas do armazenamento de colunas e dados orientados a linhas do cache de linhas e do armazenamento do banco de dados.
Com o tempo, à medida que mais e mais blocos de dados se tornam inválidos, as melhorias de desempenho de consulta fornecidas pelo mecanismo colunar são reduzidas ao ponto em que os dados colunares precisam ser atualizados para recuperar as melhorias de desempenho de consulta. Quando esse limite de atualização é atingido, o mecanismo colunar usa um job em segundo plano para atualizar os dados inválidos no repositório de colunas. Por padrão, o mecanismo colunar usa um limite de atualização de 50, indicando que o conteúdo no repositório de colunas é marcado para atualização quando 50% do conteúdo se torna inválido. É possível mudar esse limite de atualização para ajustar a sobrecarga da atualização automática e, possivelmente, melhorar o desempenho contínuo das consultas para a carga de trabalho do aplicativo.
Além disso, é possível atualizar manualmente as tabelas e os índices ScaNN carregados no mecanismo colunar a qualquer momento. Normalmente, você realiza uma atualização manual quando quer que as alterações em uma tabela sejam refletidas no armazenamento de colunas o mais rápido possível após as alterações.
Verificar a porcentagem de dados inválidos
À medida que o aplicativo adiciona, exclui ou atualiza linhas em uma tabela, o mecanismo colunar marca os dados afetados no armazenamento de colunas como inválidos. Para verificar a porcentagem de dados inválidos nas tabelas e visualizações materializadas, consulte a visualização g_columnar_relations. Isso ajuda a decidir se é necessário realizar uma atualização manual ou ajustar o limite de atualização automática.
Para conferir a porcentagem de invalidação de todas as relações no armazenamento colunar, execute a seguinte consulta:
SELECT relation_name, invalid_percentage FROM g_columnar_relations;
Para verificar a porcentagem de invalidação de uma tabela específica, adicione uma cláusula WHERE à consulta.
SELECT relation_name,
CASE
WHEN total_block_count > 0 THEN (invalid_block_count * 100.0 / total_block_count)
ELSE 0.0
END AS invalid_block_percentage
FROM
g_columnar_relations;
WHERE
relation_name = TABLE_NAME
Substitua TABLE_NAME por uma string que contenha o nome da tabela ou da visualização materializada. Se o recurso estiver em um esquema diferente de public, especifique o nome do esquema usando o formato SCHEMA_NAME.TABLE_NAME, por exemplo, myschema.mytable.
Para verificar a porcentagem de invalidação de um índice específico, adicione uma cláusula WHERE à consulta.
SELECT index_name,
CASE
WHEN total_block_count > 0 THEN (invalid_block_count * 100.0 / total_block_count)
ELSE 0.0
END AS invalid_block_percentage
FROM
g_columnar_indexes;
WHERE
index_name = INDEX_NAME
Mudar o limite de atualização do mecanismo colunar
Para mudar o limite de atualização do mecanismo colunar, modifique o
valor da flag de banco de dados google_columnar_engine.refresh_threshold_percentage.
ALTER SYSTEM SET google_columnar_engine.refresh_threshold_percentage=THRESHOLD;
Substitua THRESHOLD por um
valor inteiro entre 1 e 100. Esse valor especifica a porcentagem de blocos de dados
no conteúdo que precisam se tornar inválidos para que o conteúdo seja marcado para
atualização.
Atualizar manualmente tabelas e índices vetoriais no armazenamento de colunas
É possível atualizar manualmente tabelas e índices vetoriais no mecanismo colunar a qualquer momento usando funções SQL dedicadas. Os tipos de índice compatíveis são ScaNN e HNSW.
Para atualizar os dados de uma tabela no mecanismo colunar, execute a função google_columnar_engine_refresh.
SELECT google_columnar_engine_refresh(TABLE_NAME);
Substitua TABLE_NAME por uma string que contenha o nome da tabela ou da visualização materializada. Se o recurso estiver em um esquema diferente de public, especifique o nome do esquema usando o formato SCHEMA_NAME.TABLE_NAME, por exemplo, myschema.mytable.
Da mesma forma, para atualizar manualmente um índice vetorial no mecanismo colunar, execute a função google_columnar_engine_refresh_index.
SELECT google_columnar_engine_refresh_index(index => INDEX_NAME);
Substitua INDEX_NAME por uma string que contenha o nome do índice a ser atualizado.