Configurar o mecanismo colunar no AlloyDB Omni

Selecione uma versão da documentação:

Nesta página, descrevemos como ativar ou desativar o mecanismo colunar em um cluster de banco de dados do AlloyDB Omni. Também abordamos como configurar um tamanho inicial adequado para o repositório de colunas.

Para uma visão geral conceitual do mecanismo colunar do AlloyDB, consulte Visão geral do mecanismo colunar do AlloyDB Omni.

Ativar o mecanismo colunar

Para usar o mecanismo colunar em uma instância, defina a flag google_columnar_engine.enabled da instância como on.

Servidor único

Para definir google_columnar_engine.enabled como on, siga estas etapas:

  1. Execute o comando ALTER SYSTEM do PostgreSQL:

    ALTER SYSTEM SET google_columnar_engine.enabled = 'on'
    
  2. Se quiser ajustar a configuração do mecanismo colunar, siga as instruções na próxima seção antes de reiniciar o servidor de banco de dados. Caso contrário, conclua a etapa a seguir para reiniciar o servidor de banco de dados agora.

  3. Para que a alteração nos parâmetros de configuração entre em vigor, reinicie o contêiner em execução com o AlloyDB Omni.

    Docker

      sudo docker restart CONTAINER_NAME

    Podman

      sudo podman restart CONTAINER_NAME

Configurar o tamanho do repositório de colunas

Enquanto o mecanismo colunar está ativado em uma instância, o AlloyDB Omni aloca uma parte da memória da instância para armazenar os dados colunares. Dedicar RAM de alta velocidade ao repositório de colunas garante que o AlloyDB Omni possa acessar os dados colunares o mais rápido possível.

A memória e o cache de armazenamento representam juntos a capacidade geral do mecanismo colunar.

Configurar a memória

É possível definir a alocação para um tamanho fixo usando a flag google_columnar_engine.memory_size_in_mb.

Servidor único

Para definir a flag google_columnar_engine.memory_size_in_mb em uma 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 nos parâmetros de configuração entre em vigor, reinicie o contêiner em execução com o AlloyDB Omni.

    Docker

    sudo docker restart CONTAINER_NAME

    Podman

    sudo podman restart CONTAINER_NAME

Configurar o cache de armazenamento

Servidor único

É possível configurar o cache de armazenamento do mecanismo colunar em dispositivos dedicados ou compartilhados.

Dispositivos dedicados

Em dispositivos dedicados, para ativar o cache de armazenamento do mecanismo colunar do AlloyDB Omni em um contêiner de servidor único, é necessário provisionar discos e criar um sistema de arquivos, ativar o diretório de cache no AlloyDB Omni e, por fim, ativar o cache de armazenamento colunar.

Provisionar discos e criar um sistema de arquivos

Para provisionar discos e criar um sistema de arquivos para o cache de armazenamento do mecanismo colunar do AlloyDB Omni, crie um sistema de arquivos em um ou vários discos e ative-o em um contêiner com o AlloyDB Omni. Além disso, é possível usar utilitários como mdadm ou lvm para agrupar a capacidade usando vários discos e qualquer sistema de arquivos. As etapas a seguir demonstram o uso de lvm e ext4 em uma instância do Ubuntu Compute Engine usando SSDs NVMe.

  1. Crie um grupo de volumes com 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 anexados a uma máquina virtual usando a interface de memória não volátil expressa (NVMe). Por exemplo, no Google Cloud, os caminhos de dispositivos NVMe sempre começam com /dev/nvme0n.
    • VOLUME_GROUP: o nome de um grupo de volumes em que seus SSDs estão combinados. Por exemplo, omni-disk-cache-volume.
  2. Para criar um volume lógico com a capacidade livre do grupo de volumes da etapa 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 tratado como uma partição pelo LVM. Por exemplo, omni_disk_cache_device.

  3. Crie o sistema de arquivos ext4 no volume lógico. Se necessário, especifique 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 host e monte o sistema de arquivos, 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 um caminho para o diretório que serve como um ponto de montagem, por exemplo, omni_columnar_storage_cache_directory.

Montar o diretório de cache de armazenamento colunar no AlloyDB Omni

Antes de ativar o cache em disco para o AlloyDB Omni em execução em um contêiner, é necessário montar o diretório de cache dentro do AlloyDB Omni.

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

Para montar o OMNI_COLUMNAR_STORAGE_CACHE_DIRECTORY dentro do contêiner do 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 ser atribuído ao novo contêiner do AlloyDB Omni. Por exemplo, my-omni.
  • PASSWORD: a senha do administrador raiz do banco de dados PostgreSQL.
  • DATA_DIR: o caminho do sistema de arquivos que você quer que o AlloyDB Omni use para o diretório de dados.
  • CACHE_DIRECTORY_PATH_INSIDE_CONTAINER: o diretório de cache dentro do contêiner do AlloyDB Omni que é mapeado para o ponto de montagem na máquina host. Por exemplo, com base no valor do diretório de cache dentro do contêiner, /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 ser atribuído ao novo contêiner do AlloyDB Omni. Por exemplo, my-omni.
  • PASSWORD: a senha do administrador raiz do banco de dados PostgreSQL.
  • CACHE_DIRECTORY_PATH_INSIDE_CONTAINER: o diretório de cache dentro do contêiner do AlloyDB Omni que é mapeado para o ponto de montagem na máquina host. Por exemplo, com base no valor do diretório de cache dentro do contêiner, /omni_columnar_storage_cache_directory, semelhante a OMNI_COLUMNAR_STORAGE_CACHE_DIRECTORY, ou /disk/cache/inside/container.

Para conceder permissõ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
  

Ativar o cache de armazenamento colunar do AlloyDB Omni para o AlloyDB Omni em execução em um contêiner

Para ativar o cache de armazenamento colunar do AlloyDB Omni em dispositivos dedicados para seu banco de dados, defina os parâmetros apropriados da Grand Unified Configuration (GUC) depois de verificar se o diretório de cache montado está acessível de dentro do contêiner do Docker.

  1. Defina o diretório de cache de armazenamento colunar:

    ALTER SYSTEM SET google_columnar_engine.omni_storage_cache_directory = OMNI_COLUMNAR_STORAGE_CACHE_DIRECTORY;
    

    Substitua OMNI_COLUMNAR_STORAGE_CACHE_DIRECTORY pelo caminho absoluto do diretório dedicado em que você quer que o AlloyDB Omni armazene os arquivos de cache de armazenamento do mecanismo colunar. Verifique se esse diretório existe e tem as permissões de gravação adequadas para o usuário do banco de dados.

  2. Configure o tamanho do cache de armazenamento:

    ALTER SYSTEM SET google_columnar_engine.storage_cache_size = STORAGE_CACHE_SIZE;
    

    Substitua STORAGE_CACHE_SIZE pelo tamanho desejado do cache de armazenamento colunar, em megabytes. Por padrão, todo o tamanho do dispositivo dedicado é alocado para o mecanismo colunar, sem afetar o cache em disco. O valor máximo permitido para essa flag é 1.000 * google_columnar_engine.memory_size_in_mb, o que for menor.

  3. Para que a alteração nos parâmetros de configuração entre em vigor, reinicie o contêiner em execução com o AlloyDB Omni.

    Docker

    sudo docker restart CONTAINER_NAME

    Podman

    sudo podman restart CONTAINER_NAME

Dispositivos compartilhados

Antes de configurar o cache de armazenamento colunar para dispositivos compartilhados com cache em disco, ative o cache em disco do AlloyDB Omni.

Configure o cache de armazenamento em dispositivos compartilhados da seguinte maneira:

  1. Configure o cache de armazenamento:

    ALTER SYSTEM SET google_columnar_engine.storage_cache_size = STORAGE_CACHE_SIZE;
    

    Substitua STORAGE_CACHE_SIZE pelo tamanho do cache de armazenamento desejado, em megabytes. Por padrão, 5% do cache em disco são alocados para o mecanismo colunar. O valor máximo permitido para essa flag é 50% do cache em disco total ou 1.000 * google_columnar_engine.memory_size_in_mb, o que for menor.

  2. Para que a alteração nos parâmetros de configuração entre em vigor, reinicie o contêiner em execução com o AlloyDB Omni.

    Docker

    sudo docker restart CONTAINER_NAME

    Podman

    sudo podman restart CONTAINER_NAME

Ativar a mesclagem vetorizada

O mecanismo colunar tem um recurso de mesclagem vetorizada que pode melhorar o desempenho das mesclagens aplicando o processamento vetorizado a consultas qualificadas.

Depois que você ativa a mesclagem vetorizada, o planejador de consultas do AlloyDB tem a opção de aplicar o operador de mesclagem vetorizada em vez do operador de mesclagem de hash padrão do PostgreSQL. O planejador toma essa decisão comparando o custo de execução da consulta usando cada método.

Para ativar a mesclagem vetorizada em uma instância, defina a flag google_columnar_engine.enable_vectorized_join da instância como on.

Para definir essa flag em uma instância, execute o comando ALTER SYSTEM do PostgreSQL:

ALTER SYSTEM SET google_columnar_engine.enable_vectorized_join = 'on';

O AlloyDB Omni aloca uma linha de execução para o recurso de mesclagem vetorizada por padrão. Aumente o número de linhas de execução disponíveis para esse recurso definindo a flag google_columnar_engine.vectorized_join_threads com um valor maior. O valor máximo é cpu_count * 2.

Atualizar manualmente o mecanismo colunar

Por padrão, quando o mecanismo colunar está ativado, ele atualiza o repositório de colunas em segundo plano.

Para atualizar manualmente o mecanismo colunar, execute a seguinte consulta SQL:

SELECT google_columnar_engine_refresh(relation =>'TABLE_NAME');

Substitua TABLE_NAME pelo nome da tabela ou da visualização materializada que você quer atualizar manualmente.

Desativar o mecanismo colunar

Para desativar o mecanismo columbar em uma instância, defina a flag google_columnar_engine.enabled como off.

Servidor único

Para definir google_columnar_engine.enabled como off, siga estas etapas:

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

Docker

Para reiniciar um contêiner do AlloyDB Omni, execute o comando docker container restart:

  sudo docker restart CONTAINER_NAME

Substitua CONTAINER_NAME pelo nome que você atribuiu ao contêiner do AlloyDB Omni ao instalá-lo.

Podman

Para reiniciar um contêiner do AlloyDB Omni, execute o comando podman container start:

  sudo podman restart CONTAINER_NAME

Substitua CONTAINER_NAME pelo nome que você atribuiu ao contêiner do AlloyDB Omni ao instalá-lo.

Resolver problemas do mecanismo colunar

Corrigir o erro insufficient shared memory

Se você executar o AlloyDB Omni sem memória compartilhada suficiente para o uso do mecanismo colunar, poderá ver este erro:

Insufficient shared memory for generating the columnar formats.

Para resolver esse problema, especifique a quantidade de memória compartilhada disponível para o contêiner do AlloyDB Omni. A maneira de fazer isso varia de acordo com o sistema operacional do host.

Linux

Aumente o tamanho da partição /dev/shm da máquina host usando uma técnica como editar o arquivo /etc/fstab.

macOS

Instale um novo contêiner do AlloyDB Omni, especificando um valor maior de memória compartilhada para a flag --shm-size.

Corrigir colunas que não estão sendo preenchidas

Se as colunas não forem preenchidas no mecanismo colunar, uma das seguintes situações pode ser verdadeira:

  • As colunas que você quer adicionar incluem um tipo de dados não compatível.

  • Os requisitos do mecanismo colunar não estão sendo atendidos.

Para resolver esse problema, tente o seguinte:

  • Confirme se as tabelas ou visualizações materializadas na consulta estão no mecanismo colunar.
  • Verifique o uso do mecanismo de colunas usando a instrução EXPLAIN.

A seguir