Acelerar o desempenho do banco de dados usando o cache do disco

Selecione uma versão da documentação:

Nesta página, descrevemos como provisionar, configurar e usar o armazenamento em cache de disco no AlloyDB Omni para aumentar o desempenho da instalação do AlloyDB Omni.

Além dos buffers compartilhados na memória do PostgreSQL padrão, o cache de disco do AlloyDB Omni permite armazenar buffers em armazenamento rápido, como unidades de estado sólido (SSDs). O cache em disco acelera a recuperação de dados em instalações do AlloyDB Omni com diretórios de dados localizados em um armazenamento mais lento.

Assim como os buffers compartilhados do PostgreSQL, o cache de disco do AlloyDB Omni não é permanente, o que significa que os dados armazenados em cache são perdidos na reinicialização.

Por padrão, o cache de disco do AlloyDB Omni usa todo o armazenamento informado pelo sistema de arquivos. É possível definir a quantidade de armazenamento reservada para dados de cache usando o parâmetro omni_disk_cache_file_size.

Ativar o cache de disco do AlloyDB Omni

Para ativar o cache de disco do AlloyDB Omni em um contêiner, siga estas etapas.

Provisionar discos e criar um sistema de arquivos

Para o cache de disco 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:

    • STORAGE_PREFIX: o prefixo do caminho dos discos locais de destino anexados a uma máquina virtual usando a interface nonvolatile memory express (NVMe). Por exemplo, em 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 de 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 ative o sistema de arquivos, use o seguinte comando:

      sudo mkdir /OMNI_DISK_CACHE_DIRECTORY
      sudo mount /dev/VOLUME_GROUP/LOGICAL_VOLUME /OMNI_DISK_CACHE_DIRECTORY

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

Monte o diretório de cache no AlloyDB Omni

Antes de ativar o cache de 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 do Docker e personalizar, consulte Personalizar a instalação do AlloyDB Omni.

Para montar o OMNI_DISK_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_DISK_CACHE_DIRECTORY:/CACHE_DIRECTORY_PATH_INSIDE_CONTAINER
-d google/alloydbomni

Substitua:

  • 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_DISK_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_DISK_CACHE_DIRECTORY:/CACHE_DIRECTORY_PATH_INSIDE_CONTAINER
-d docker.io/google/alloydbomni

Substitua:

  • 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_disk_cache_directory, semelhante a OMNI_DISK_CACHE_DIRECTORY, ou /disk/cache/inside/container.

Para conceder permissões de acesso total ao OMNI_DISK_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 disco do AlloyDB Omni

Para ativar o cache de disco do AlloyDB Omni no seu banco de dados, defina os parâmetros apropriados da configuração unificada geral (GUC, na sigla em inglês) depois de verificar se o diretório de cache montado está acessível de dentro do contêiner do Docker.

  1. Para se conectar ao banco de dados em contêiner do AlloyDB Omni como superusuário, use o seguinte comando:

    Docker

          sudo docker exec -it CONTAINER_NAME psql -h localhost -U postgres
          

    Podman

          sudo podman exec -it CONTAINER_NAME psql -h localhost -U postgres
          
  2. Para definir o valor dos parâmetros, use os seguintes comandos no banco de dados do AlloyDB Omni:

            alter system set omni_disk_cache_enabled=on;
            alter system set omni_disk_cache_directory='/CACHE_DIRECTORY_PATH_INSIDE_CONTAINER';
          
  3. Por padrão, o AlloyDB Omni usa todo o espaço disponível no sistema de arquivos. Se necessário, substitua o valor padrão usando o parâmetro omni_disk_cache_file_size.

          alter system set omni_disk_cache_file_size=SIZE_IN_MB;
          
  4. Para que a mudança nos parâmetros de configuração de cache 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
          

Verificar a configuração do cache de disco

Depois de ativar o cache de disco do AlloyDB Omni, verifique se ele está sendo acessado monitorando a atividade de leitura e gravação nos discos usando utilitários como iotop ou iostat.

Além disso, você pode verificar se o cache de disco do AlloyDB Omni está aberto.

Para verificar a configuração do cache de disco do AlloyDB Omni em um contêiner, siga estas etapas:

Docker

sudo docker logs CONTAINER_NAME 2>&1 | grep "opened omni disk cache"

Podman

sudo podman logs CONTAINER_NAME 2>&1 | grep "opened omni disk cache"

Se o cache de disco estiver configurado corretamente, a mensagem "Successfully opened omni disk cache ..." vai aparecer nos registros.

A seguir