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 em 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 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

As etapas usadas para ativar o cache de disco do AlloyDB Omni dependem de você executar o AlloyDB Omni em um contêiner ou em um cluster do Kubernetes.

Ativar o cache de disco em um volume genérico

É possível ativar o cache em disco usando um volume genérico.

Para ativar o cache em disco em um volume genérico no operador do Kubernetes do AlloyDB Omni, é necessário ter um volume permanente pronto com antecedência e um storageClass.

Por exemplo, se você usa o GKE e não tem o volume permanente e o storageClass prontos, verifique se você fez o seguinte antes de ativar o cache de disco em um volume genérico:

  1. Criou um cluster com armazenamento baseado em SSD local.
  2. Formate o volume para o sistema de arquivos ext4 usando a etapa 1 de Executar o provisionador estático do volume local.
  3. Crie manualmente um volume permanente para cada SSD no cluster com o storageClass que define o armazenamento permanente em um dispositivo de armazenamento.

Para ativar o cache de disco em um volume genérico para seu banco de dados, siga estas etapas:

  1. Modifique o manifesto do cluster de banco de dados para adicionar o atributo ultraFastCache à seção features da seção spec:

          apiVersion: alloydbomni.dbadmin.goog/v1
          kind: DBCluster
          metadata:
            name: CLUSTER_NAME
          spec:
            databaseVersion: "17.5.0"
            primarySpec:
              features:
                ultraFastCache:
                  cacheSize: DISK_CACHE_SIZE
                  genericVolume:
                    storageClass: "STORAGE_CLASS_NAME"
          ...
          

    Substitua:

    • DB_CLUSTER_NAME: o nome do cluster de banco de dados. É o mesmo nome de cluster de banco de dados que você declarou ao criá-lo.
    • DISK_CACHE_SIZE: o tamanho do cache, por exemplo, 100Gi. Precisa ser um valor maior do que shared_buffers. Esse campo é opcional. Se você não especificar o valor desse campo, o AlloyDB Omni vai usar todo o espaço restante no disco, o que se aplica ao AlloyDB Omni em um contêiner e em um cluster do Kubernetes.
    • STORAGE_CLASS_NAME: o nome do storage class do volume de cache ultrarrápido. Por exemplo, local-storage.
  2. Reaplique o manifesto.

Ativar o cache de disco em um volume local

Se você quiser usar um volume local, não é necessário criar um volume permanente. Em vez disso, use a seguinte otimização.

Por exemplo, se você usa o GKE e não tem o volume permanente e o storageClass prontos, verifique se você fez o seguinte antes de ativar o cache de disco em um volume local:

  1. Criou um cluster com armazenamento baseado em SSD local.
  2. Formate o volume para o sistema de arquivos ext4 usando a etapa 1 de Executar o provisionador estático do volume local.

Para ativar o cache de disco em um volume local do banco de dados, faça o seguinte:

  1. Modifique o manifesto do cluster de banco de dados para adicionar o atributo ultraFastCache à seção features da seção spec:

        apiVersion: alloydbomni.dbadmin.goog/v1
        kind: DBCluster
        metadata:
          name: CLUSTER_NAME
        spec:
          databaseVersion: "17.5.0"
          primarySpec:
            features:
              ultraFastCache:
                cacheSize: DISK_CACHE_SIZE
                localVolume:
                  path: "LOCAL_VOLUME_PATH"
                  nodeAffinity:
                    required:
                      nodeSelectorTerms:
                      - matchExpressions:
                        - key: "LABEL_KEY"
                          operator: "OPERATOR_VALUE"
                          values:
                          - "LABEL_KEY_VALUE"
        ...
          

    Substitua:

    • CLUSTER_NAME: o nome do cluster de banco de dados. É o mesmo nome de cluster de banco de dados que você declarou ao criá-lo.
    • DISK_CACHE_SIZE: o tamanho do cache, por exemplo, 100Gi. Precisa ser um valor maior do que shared_buffers. Esse campo é opcional. Se você não especificar o valor desse campo, o AlloyDB Omni vai usar todo o espaço restante no disco, o que se aplica ao AlloyDB Omni em um contêiner e em um cluster do Kubernetes.
    • STORAGE_CLASS_NAME: o nome da classe de armazenamento.
    • LOCAL_VOLUME_PATH: o caminho para o volume local, por exemplo, /mnt/disks/raid/0.
    • LABEL_KEY: o rótulo do nó para a chave que serve como um indicador de local e facilita a distribuição uniforme de pods no cluster, por exemplo, cloud.google.com/gke-local-nvme-ssd.
    • OPERATOR_VALUE: a relação da chave com um conjunto de valores, por exemplo, In. Defina o parâmetro como um dos seguintes:
      • In: a matriz de valores não pode estar vazia.
      • NotIn: a matriz de valores não pode estar vazia.
      • Exists: a matriz de valores precisa estar vazia.
      • DoesNotExist: a matriz de valores precisa estar vazia.
      • Gt: a matriz de valores precisa ter um único elemento, que será interpretado como um número inteiro.
      • Lt: a matriz de valores precisa ter um único elemento, que será interpretado como um número inteiro.
    • LABEL_KEY_VALUE: o valor da chave do rótulo, por exemplo, true. Defina o parâmetro como uma matriz de valores de string da seguinte maneira:
      • Se o operador for In ou NotIn, a matriz de valores não poderá estar vazia.
      • Se o operador for Exists ou DoesNotExist, a matriz de valores precisará estar vazia.
      • Se o operador for Gt ou Lt, a matriz de valores precisará ter um único elemento, que será interpretado como um número inteiro.
  2. Reaplique o manifesto.

Ativar o cache de disco em um volume temporário

É possível ativar o cache em disco usando um volume emptyDir, que fornece armazenamento temporário vinculado diretamente ao ciclo de vida do seu pod. O volume é criado quando um pod é atribuído a um nó e existe enquanto o pod estiver em execução nesse nó.

Quando um pod é removido de um nó, os dados no emptyDir são excluídos permanentemente. Esse tipo de volume é adequado para um cache porque oferece armazenamento temporário e rápido. Os dados no cache não precisam ser persistidos se o pod for reagendado.

Para ativar o cache de disco em um volume efêmero para seu banco de dados, siga estas etapas:

  1. Modifique o manifesto do cluster de banco de dados para adicionar o atributo ultraFastCache à seção features da seção spec e especifique emptyDirVolume:

          apiVersion: alloydbomni.dbadmin.goog/v1
          kind: DBCluster
          metadata:
            name: CLUSTER_NAME
          spec:
            databaseVersion: "17.5.0"
            primarySpec:
              features:
                ultraFastCache:
                  cacheSize: DISK_CACHE_SIZE
                  emptyDirVolume: {}
            ...
          

    Substitua:

    • CLUSTER_NAME: o nome do cluster de banco de dados. É o mesmo nome de cluster de banco de dados que você declarou ao criá-lo.
    • DISK_CACHE_SIZE: o tamanho do cache, por exemplo, 200Gi.
  2. Reaplique o manifesto.

Verificar a configuração do cache de disco

Depois de ativar o cache em disco do AlloyDB Omni, verifique se ele está sendo acessado monitorando a atividade de leitura e gravação nos discos usando utilitários disponíveis, 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, use o seguinte comando.

  kubectl exec -i $DATABASE_POD -c database -n $DBCLUSTER_NAMESPACE -- cat /obs/diagnostic/postgresql.log | 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