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.

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

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 verifica 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.

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

Configure a cache de armazenamento

Servidor único

Pode configurar a cache de armazenamento do motor colunar em dispositivos dedicados ou partilhados.

Dispositivos dedicados

Em dispositivos dedicados, para ativar a cache de armazenamento do motor de colunas do AlloyDB Omni para um contentor de servidor único, tem de aprovisionar discos e criar um sistema de ficheiros, montar o diretório da cache no AlloyDB Omni e, finalmente, ativar a cache de armazenamento de colunas.

Aprovisione discos e crie um sistema de ficheiros

Para aprovisionar discos e criar um sistema de ficheiros para a cache de armazenamento do motor colunar do AlloyDB Omni, cria um sistema de ficheiros num disco ou em vários discos e monta-o num contentor com o AlloyDB Omni. Além disso, pode usar utilitários como mdadm ou lvm para agrupar a capacidade através de vários discos e usar qualquer sistema de ficheiros. Os passos seguintes demonstram a utilização de lvm e ext4 numa instância do Ubuntu Compute Engine com SSDs NVMe.

  1. Crie um grupo de volume a partir de todos os dispositivos físicos disponíveis:

    nvme_prefix="STORAGE_PREFIX"
    nvme_list=$(ls "$nvme_prefix"*)
    sudo vgcreate VOLUME_GROUP ${nvme_list}

    Substitua o seguinte:

    • STORAGE_PREFIX: o prefixo do caminho dos discos locais de destino que estão anexados a uma máquina virtual através da interface nonvolatile memory express (NVMe). Por exemplo, no Google Cloud, os caminhos dos dispositivos NVMe começam sempre com /dev/nvme0n.
    • VOLUME_GROUP: o nome de um grupo de volumes onde os seus SSDs estão combinados, por exemplo, omni-disk-cache-volume.
  2. Para criar um volume lógico a partir da capacidade livre do grupo de volumes do passo anterior, use o seguinte comando:

    sudo lvcreate -n LOGICAL_VOLUME -l 100%FREE VOLUME_GROUP

    Substitua LOGICAL_VOLUME pelo nome de um volume lógico que é tratado como uma partição pelo LVM, por exemplo, omni_disk_cache_device.

  3. Crie o sistema de ficheiros ext4 no volume lógico. Se necessário, pode especificar outras opções de ext4 sujeitas à segurança dos dados.
    sudo mkfs.ext4 /dev/VOLUME_GROUP/LOGICAL_VOLUME
  4. Para criar um diretório que sirva como ponto de montagem na máquina anfitriã e montar o sistema de ficheiros, use o seguinte comando:

    sudo mkdir /OMNI_COLUMNAR_STORAGE_CACHE_DIRECTORY
    sudo mount /dev/VOLUME_GROUP/LOGICAL_VOLUME /OMNI_COLUMNAR_STORAGE_CACHE_DIRECTORY

    Substitua OMNI_COLUMNAR_STORAGE_CACHE_DIRECTORY pelo nome do diretório ou por um caminho para o diretório que serve como ponto de montagem, por exemplo, omni_columnar_storage_cache_directory.

Monte o diretório da cache de armazenamento colunar no AlloyDB Omni

Antes de ativar a cache de disco para o AlloyDB Omni em execução num contentor, tem de montar o diretório de cache no AlloyDB Omni.

Para obter informações sobre como instalar o AlloyDB Omni a partir de uma imagem do Docker e personalizá-lo, consulte o artigo Personalize a sua instalação do AlloyDB Omni.

Para montar o OMNI_COLUMNAR_STORAGE_CACHE_DIRECTORY no contentor Docker que executa o AlloyDB Omni, use o seguinte comando:

Docker

  sudo docker run --name CONTAINER_NAME 
-e POSTGRES_PASSWORD=PASSWORD
-e PGDATA=/var/lib/postgresql/data/pgdata
-v DATA_DIR:/var/lib/postgresql/data
-v /OMNI_COLUMNAR_STORAGE_CACHE_DIRECTORY:/CACHE_DIRECTORY_PATH_INSIDE_CONTAINER
-d google/alloydbomni

Substitua o seguinte:

  • CONTAINER_NAME: o nome a atribuir ao novo contentor do AlloyDB Omni, por exemplo, my-omni.
  • PASSWORD: a palavra-passe do administrador principal da sua base de dados PostgreSQL.
  • DATA_DIR: o caminho do sistema de ficheiros que quer que o AlloyDB Omni use para o respetivo diretório de dados.
  • CACHE_DIRECTORY_PATH_INSIDE_CONTAINER: o diretório da cache no contentor do AlloyDB Omni que é mapeado para o ponto de montagem na máquina anfitriã, por exemplo, com base no valor do diretório da cache no contentor, /omni_disk_cache_directory, semelhante a OMNI_COLUMNAR_STORAGE_CACHE_DIRECTORY, ou /disk/cache/inside/container.

Podman

  podman run --name CONTAINER_NAME 
-e POSTGRES_PASSWORD=PASSWORD
-e PGDATA=/var/lib/postgresql/data/pgdata
-v DATA_DIR:/var/lib/postgresql/data
-v /OMNI_COLUMNAR_STORAGE_CACHE_DIRECTORY:/CACHE_DIRECTORY_PATH_INSIDE_CONTAINER
-d docker.io/google/alloydbomni

Substitua o seguinte:

  • CONTAINER_NAME: o nome a atribuir ao novo contentor do AlloyDB Omni, por exemplo, my-omni.
  • PASSWORD: a palavra-passe do administrador principal da sua base de dados PostgreSQL.
  • CACHE_DIRECTORY_PATH_INSIDE_CONTAINER: o diretório da cache no contentor do AlloyDB Omni que é mapeado para o ponto de montagem na máquina anfitriã, por exemplo, com base no valor do diretório da cache no contentor, /omni_columnar_storage_cache_directory, semelhante a OMNI_COLUMNAR_STORAGE_CACHE_DIRECTORY, ou /disk/cache/inside/container.

Para conceder autorizações de acesso total ao OMNI_COLUMNAR_STORAGE_CACHE_DIRECTORY montado, use os seguintes comandos:

Docker

  sudo docker exec -it CONTAINER_NAME chown postgres:postgres /CACHE_DIRECTORY_PATH_INSIDE_CONTAINER
  sudo docker exec -it CONTAINER_NAME chmod -R a+rw  /CACHE_DIRECTORY_PATH_INSIDE_CONTAINER
  

Podman

  sudo podman exec -it CONTAINER_NAME chown postgres:postgres /CACHE_DIRECTORY_PATH_INSIDE_CONTAINER
  sudo podman exec -it CONTAINER_NAME chmod -R a+rw  /CACHE_DIRECTORY_PATH_INSIDE_CONTAINER
  

Ative a cache de armazenamento em colunas do AlloyDB Omni para o AlloyDB Omni em execução num contentor

Para ativar a cache de armazenamento colunar do AlloyDB Omni em dispositivos dedicados para a sua base de dados, defina os parâmetros de configuração unificada geral (GUC) adequados depois de verificar se o diretório da cache montada está acessível a partir do contentor Docker.

  1. Defina o diretório da cache de armazenamento em colunas:

    ALTER SYSTEM SET google_columnar_engine.omni_storage_cache_directory = OMNI_COLUMNAR_STORAGE_CACHE_DIRECTORY;
    

    Substitua OMNI_COLUMNAR_STORAGE_CACHE_DIRECTORY pelo caminho absoluto para o diretório dedicado onde quer que o AlloyDB Omni armazene os ficheiros de cache de armazenamento do motor de colunas. Verifique se este diretório existe e tem as autorizações de escrita adequadas para o utilizador da base de dados.

  2. Configure o tamanho da cache de armazenamento:

    ALTER SYSTEM SET google_columnar_engine.storage_cache_size = STORAGE_CACHE_SIZE;
    

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

  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

Dispositivos partilhados

Antes de configurar a cache de armazenamento em colunas para dispositivos partilhados com cache de disco, tem de ativar a cache de disco do AlloyDB Omni.

Configure a cache de armazenamento em dispositivos partilhados da seguinte forma:

  1. Configure a cache de armazenamento:

    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

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 de colunas numa instância, defina a flag google_columnar_engine.enabled como off.

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.

O que se segue?