Acelere o desempenho da base de dados com a cache de disco

Selecione uma versão da documentação:

Esta página descreve como aprovisionar, configurar e usar a colocação em cache de disco no AlloyDB Omni para aumentar o desempenho da sua instalação do AlloyDB Omni.

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

Tal como as buffers partilhados do PostgreSQL, a cache de disco do AlloyDB Omni não é persistente, o que significa que os dados em cache são perdidos no reinício.

Por predefinição, a cache de disco do AlloyDB Omni usa todo o armazenamento comunicado pelo sistema de ficheiros. Pode definir a quantidade de armazenamento reservada para dados de colocação em cache através do parâmetro omni_disk_cache_file_size.

Ative a cache do disco do AlloyDB Omni

Para ativar a cache de disco para o AlloyDB Omni num contentor, siga estes passos.

Aprovisione discos e crie um sistema de ficheiros

Para a cache de disco 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_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 por um caminho para o diretório que serve como ponto de montagem, por exemplo, omni_disk_cache_directory.

Monte o diretório da cache 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_DISK_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_DISK_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_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 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_disk_cache_directory, semelhante a OMNI_DISK_CACHE_DIRECTORY, ou /disk/cache/inside/container.

Para conceder autorizaçõ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
      

Ative a cache de disco do AlloyDB Omni

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

  1. Para estabelecer ligação à base de dados AlloyDB Omni contentorizada como superutilizador, 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 na base de dados AlloyDB Omni:

            alter system set omni_disk_cache_enabled=on;
            alter system set omni_disk_cache_directory='/CACHE_DIRECTORY_PATH_INSIDE_CONTAINER';
          
  3. Por predefinição, o AlloyDB Omni usa todo o espaço disponível no sistema de ficheiros. Pode substituir o valor predefinido através do parâmetro omni_disk_cache_file_size, se necessário.

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

Valide a configuração da cache do disco

Depois de ativar a cache de disco do AlloyDB Omni, verifique se a cache de disco é acedida monitorizando a atividade de leitura e escrita nos discos através de utilitários como iotop ou iostat.

Além disso, pode verificar se a cache de disco do AlloyDB Omni está aberta.

Para validar a configuração da cache de disco do AlloyDB Omni num contentor, siga estes passos:

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 armazenamento em cache no disco estiver configurado corretamente, a mensagem "Successfully opened omni disk cache" (Cache no disco omni aberta com êxito) é apresentada nos registos.

O que se segue?