Manter a atualização dos dados do armazenamento de colunas na memória

Selecione uma versão da documentação:

Nesta página, descrevemos como manter a atualização dos dados no repositório de colunas do mecanismo colunar no AlloyDB Omni usando o orquestrador de RPM.

À medida que as linhas da tabela são adicionadas, excluídas ou atualizadas, o mecanismo colunar não atualiza imediatamente os dados no repositório de colunas. Em vez disso, ele marca o conteúdo afetado no repositório de colunas como inválido, e as consultas são planejadas e executadas usando dados orientados a colunas do repositório de colunas e dados orientados a linhas do cache de linhas e do armazenamento de banco de dados.

Com o tempo, à medida que mais e mais blocos de dados se tornam inválidos, as melhorias de performance de consulta fornecidas pelo mecanismo colunar são reduzidas a ponto de os dados colunares precisarem ser atualizados para recuperar as melhorias de performance 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 fornecido 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, potencialmente, melhorar a performance de consulta contínua para a carga de trabalho do aplicativo.

Além disso, é possível atualizar manualmente tabelas e índices do ScaNN carregados no mecanismo colunar a qualquer momento. Normalmente, você realiza uma atualização manual quando quer que as mudanças em uma tabela sejam refletidas no repositório de colunas o mais rápido possível após fazer as mudanças.

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 repositório de colunas como inválidos. É possível verificar a porcentagem de dados inválidos para tabelas e visualizações materializadas consultando 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 repositório 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, siga estas etapas:

  1. Abra o manifesto do cluster de banco de dados DBCluster.

  2. Na seção primarySpec, adicione o parâmetro google_columnar_engine.refresh_threshold_percentage ao bloco parameters:

    DBCluster:
      metadata:
        name: DB_CLUSTER_NAME
      spec:
        # ... existing cluster configuration ...
        primarySpec:
          # ... existing primary configuration ...
          parameters:
            google_columnar_engine.refresh_threshold_percentage: "THRESHOLD"
    

    Substitua:

    • DB_CLUSTER_NAME: o nome do cluster de banco de dados.
    • THRESHOLD: 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.
  3. O orquestrador de RPM reinicia automaticamente o banco de dados para aplicar as mudanças de parâmetro. Aplique o manifesto DBCluster atualizado usando um dos seguintes métodos:

    alloydbctl

    alloydbctl apply -d "DEPLOYMENT_SPEC_PATH" -r "DBCLUSTER_SPECIFICATION"

    Substitua:

    • DEPLOYMENT_SPEC_PATH: o caminho para o diretório de especificação da implantação.
    • DBCLUSTER_SPECIFICATION: o caminho para o manifesto DBCluster que você modificou.

    Ansible

    1. Crie um arquivo de playbook update.yml:

      ---
      - hosts: localhost
        vars:
          update_action: "update_resource_spec"
          ansible_user: SSH_USER
          ansible_ssh_private_key_file: SSH_KEY_PATH
        roles:
          - role: google.alloydbomni_orchestrator.update
      

      Substitua:

      • SSH_USER: o nome de usuário que você usa para se conectar aos nós no cluster usando SSH.
      • SSH_KEY_PATH: o caminho local para o arquivo de chave privada SSH usado para se conectar aos nós.
    2. Execute o playbook no nó de controle, transmitindo a especificação do recurso como uma variável extra:

      ansible-playbook -i "DEPLOYMENT_SPEC_PATH" update.yml \
        -e resource_spec="DBCLUSTER_SPECIFICATION"

      Substitua:

      • DEPLOYMENT_SPEC_PATH: o caminho para o diretório de especificação da implantação.
      • DBCLUSTER_SPECIFICATION: o caminho para o manifesto DBCluster que você modificou.

Atualizar manualmente tabelas e índices de vetor no repositório de colunas

É possível atualizar manualmente tabelas e índices de vetor 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 de vetor 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.