Configure o motor colunar no AlloyDB Omni

Selecione uma versão da documentação:

Esta página descreve como ativar ou desativar o motor de colunas num cluster de base de dados do AlloyDB Omni. Também aborda como configurar um tamanho inicial adequado para o respetivo armazenamento de colunas.

Para uma vista geral conceptual do motor de colunas do AlloyDB, consulte o artigo Vista geral do motor de colunas do AlloyDB Omni.

Ative o motor de colunas

Para usar o motor de colunas numa instância, defina a flag google_columnar_engine.enabled da instância como on.

Os passos que usa para definir esta flag numa instância dependem do facto de executar o AlloyDB Omni num contentor ou num cluster do Kubernetes.

Servidor único

Para definir o valor google_columnar_engine.enabled como on, siga estes passos:

  1. Execute o comando ALTER SYSTEM do PostgreSQL:

    ALTER SYSTEM SET google_columnar_engine.enabled = 'on'
    
  2. Se quiser ajustar a configuração do motor de colunas, siga as instruções na secção seguinte antes de reiniciar o servidor de base de dados. Caso contrário, conclua o passo seguinte para reiniciar o servidor de base de dados agora.

  3. Para que a alteração dos parâmetros de configuração entre em vigor, reinicie o contentor em execução com o AlloyDB Omni.

    Docker

      sudo docker restart CONTAINER_NAME

    Podman

      sudo podman restart CONTAINER_NAME

Kubernetes

Para definir a flag google_columnar_engine.enabled como on, modifique o manifesto do cluster da base de dados para adicionar o atributo parameters à secção primarySpec:

    apiVersion: alloydbomni.dbadmin.goog/v1
    kind: DBCluster
    metadata:
      name: CLUSTER_NAME
    spec:
      databaseVersion: "15.7.0"
      primarySpec:
        parameters:
          google_columnar_engine.enabled: "on"

Substitua CLUSTER_NAME pelo nome do cluster da base de dados. É o mesmo nome do cluster da base de dados que declarou quando o criou.

Configure o tamanho do armazenamento de colunas

Embora o motor de colunas esteja ativado numa instância, o AlloyDB Omni atribui uma parte da memória da instância para armazenar os respetivos dados de colunas. A dedicação de RAM de alta velocidade ao seu armazenamento de colunas garante que o AlloyDB Omni pode aceder aos dados em formato de colunas o mais rapidamente possível.

A memória e a cache de armazenamento representam em conjunto a capacidade geral do motor de colunas.

Configure a memória

Pode definir a atribuição para um tamanho fixo através da flag google_columnar_engine.memory_size_in_mb.

Os passos que usa para definir esta flag numa instância dependem do facto de executar o AlloyDB Omni num contentor ou num cluster do Kubernetes.

Servidor único

Para definir a flag google_columnar_engine.memory_size_in_mb numa instância, faça o seguinte:

  1. Configure a memória executando o comando ALTER SYSTEM do PostgreSQL:

    ALTER SYSTEM SET google_columnar_engine.memory_size_in_mb = COLUMN_MEMORY_SIZE;
    

    Substitua COLUMN_MEMORY_SIZE pelo novo tamanho do armazenamento da coluna, em megabytes. Por exemplo, 256.

  2. Para que a alteração dos parâmetros de configuração entre em vigor, reinicie o contentor em execução com o AlloyDB Omni.

    Docker

    sudo docker restart CONTAINER_NAME

    Podman

    sudo podman restart CONTAINER_NAME

Kubernetes

Para definir a flag google_columnar_engine.memory_size_in_mb, modifique o manifesto do cluster da base de dados para adicionar o atributo parameters à secção primarySpec:

    apiVersion: alloydbomni.dbadmin.goog/v1
    kind: DBCluster
    metadata:
      name: CLUSTER_NAME
    spec:
      databaseVersion: "15.7.0"
      primarySpec:
        parameters:
          google_columnar_engine.memory_size_in_mb: "COLUMN_MEMORY_SIZE"

Substitua o seguinte:

  • CLUSTER_NAME: o nome do cluster da base de dados. É o mesmo nome do cluster da base de dados que declarou quando o criou.
  • COLUMN_MEMORY_SIZE: o novo tamanho do armazenamento de colunas, em megabytes, por exemplo, 256.

Configure a cache de armazenamento

Antes de configurar a cache de armazenamento, tem de ativar a cache de disco do AlloyDB Omni.

Os passos que usa para definir esta flag numa instância dependem do facto de executar o AlloyDB Omni num contentor ou num cluster do Kubernetes.

Servidor único

  1. Configure a cache de armazenamento da seguinte forma:

    ALTER SYSTEM SET google_columnar_engine.storage_cache_size = STORAGE_CACHE_SIZE;
    

    Substitua STORAGE_CACHE_SIZE pelo tamanho da cache de armazenamento pretendido, em megabytes. Por predefinição, 5% da cache de disco é atribuída ao motor de colunas. O valor máximo permitido para esta flag é 50% da cache de disco total ou 1000 * google_columnar_engine.memory_size_in_mb, consoante o que for mínimo.

  2. Para que a alteração dos parâmetros de configuração entre em vigor, reinicie o contentor em execução com o AlloyDB Omni.

    Docker

    sudo docker restart CONTAINER_NAME

    Podman

    sudo podman restart CONTAINER_NAME

Kubernetes

Para ativar a cache de armazenamento para a sua base de dados, modifique o manifesto do cluster da base de dados para adicionar o atributo columnarSpillToDisk à secção features da secção primarySpec:

apiVersion: alloydbomni.dbadmin.goog/v1
kind: DBCluster
metadata:
  name: CLUSTER_NAME
spec:
  databaseVersion: "15.7.0"
  primarySpec:
    features:
      columnarSpillToDisk:
        cacheSize: STORAGE_CACHE_SIZE
      ultraFastCache:
        cacheSize: ULTRAFAST_CACHE_SIZE
        genericVolume:
          storageClass: "STORAGE_CLASS_NAME"
...

Substitua o seguinte:

  • CLUSTER_NAME: o nome do cluster da base de dados. É o mesmo nome do cluster da base de dados que declarou quando o criou.
  • STORAGE_CACHE_SIZE: o tamanho da cache de armazenamento em colunas, por exemplo, 5Gi. Se não especificar um valor para este campo, 5% da cache de disco é atribuída ao motor de colunas por predefinição.
  • ULTRAFAST_CACHE_SIZE: o tamanho da cache, por exemplo, 100Gi. Tem de ser superior a shared_buffers. Este campo é opcional. Se não especificar o valor deste campo, o AlloyDB Omni usa todo o espaço restante no disco, o que se aplica ao AlloyDB Omni num contentor e num cluster do Kubernetes. Para mais informações sobre as unidades de medida, consulte o artigo Unidades de recursos de memória.
  • STORAGE_CLASS_NAME: o nome da classe de armazenamento do volume de cache ultrarrápido, por exemplo, local-storage.

Ative a junção vetorizada

O motor de colunas tem uma funcionalidade de junção vetorizada que pode melhorar o desempenho das junções aplicando o processamento vetorizado a consultas qualificadas.

Depois de ativar a junção vetorizada, o planeador de consultas do AlloyDB tem a opção de aplicar o operador de junção vetorizada em vez do operador de junção hash do PostgreSQL padrão. O planeador toma esta decisão comparando o custo de execução da consulta usando cada método.

Para ativar a junção vetorizada numa instância, defina a flag google_columnar_engine.enable_vectorized_join da instância como on.

Para definir esta flag numa instância, execute o comando ALTER SYSTEM PostgreSQL:

ALTER SYSTEM SET google_columnar_engine.enable_vectorized_join = 'on';

Por predefinição, o AlloyDB Omni atribui um segmento à funcionalidade de junção vetorizada. Pode aumentar o número de threads disponíveis para esta funcionalidade definindo a flag google_columnar_engine.vectorized_join_threads para um valor superior. O valor máximo é cpu_count * 2.

Atualize manualmente o motor de colunas

Por predefinição, quando o motor de colunas está ativado, atualiza o armazenamento de colunas em segundo plano.

Para atualizar manualmente o motor da coluna, execute a seguinte consulta SQL:

SELECT google_columnar_engine_refresh(relation =>'TABLE_NAME');

Substitua TABLE_NAME pelo nome da tabela ou da vista materializada que quer atualizar manualmente.

Desative o motor de colunas

Para desativar o motor colunar numa instância, defina a flag google_columnar_engine.enabled como off.

Os passos que usa para definir esta flag numa instância dependem do facto de executar o AlloyDB Omni num contentor ou num cluster do Kubernetes.

Servidor único

Para definir o valor google_columnar_engine.enabled como off, siga estes passos:

  1. Execute o comando ALTER SYSTEM do PostgreSQL:
ALTER SYSTEM SET google_columnar_engine.enabled = 'off'
  1. Para que a alteração dos parâmetros de configuração entre em vigor, reinicie o contentor em execução com o AlloyDB Omni.

Docker

Para reiniciar um contentor do AlloyDB Omni, execute o comando docker container restart:

  sudo docker restart CONTAINER_NAME

Substitua CONTAINER_NAME pelo nome que atribuiu ao contentor do AlloyDB Omni quando o instalou.

Podman

Para reiniciar um contentor do AlloyDB Omni, execute o comando podman container start:

  sudo podman restart CONTAINER_NAME

Substitua CONTAINER_NAME pelo nome que atribuiu ao contentor do AlloyDB Omni quando o instalou.

Kubernetes

Para definir a flag google_columnar_engine.enabled como off, modifique o manifesto do cluster da base de dados para adicionar o atributo parameters à secção primarySpec:

  apiVersion: alloydbomni.dbadmin.goog/v1
  kind: DBCluster
  metadata:
    name: CLUSTER_NAME
  spec:
    databaseVersion: "15.7.0"
    primarySpec:
      parameters:
        google_columnar_engine.enabled: "off"

Substitua CLUSTER_NAME pelo nome do cluster da base de dados. É o mesmo nome do cluster da base de dados que declarou quando o criou.

Resolva problemas do motor de colunas

Corrija o erro insufficient shared memory

Se executar o AlloyDB Omni sem memória partilhada suficiente para o motor de colunas usar, pode ver este erro:

Insufficient shared memory for generating the columnar formats.

Pode resolver este problema especificando a quantidade de memória partilhada disponível para o contentor do AlloyDB Omni. A forma como o faz varia consoante o sistema operativo do anfitrião.

Linux

Aumente o tamanho da partição /dev/shm da máquina anfitriã através de uma técnica como a edição do ficheiro /etc/fstab.

macOS

Instale um novo contentor do AlloyDB Omni, especificando um valor de memória partilhada maior para a flag --shm-size.

Corrija o problema de colunas que não são preenchidas

Se as colunas não forem preenchidas no motor de colunas, uma das seguintes afirmações pode ser verdadeira:

  • As colunas que quer adicionar incluem um tipo de dados não suportado.

  • Os requisitos do motor de colunas não estão a ser cumpridos.

Para resolver este problema, experimente o seguinte:

  • Confirme que as tabelas ou as vistas materializadas na consulta estão no motor de colunas.
  • Valide a utilização do motor de colunas através da declaração EXPLAIN.

O que se segue?