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

Os passos que usa para ativar a cache de disco para o AlloyDB Omni dependem do facto de executar o AlloyDB Omni num contentor ou num cluster do Kubernetes.

Ative a cache de disco num volume genérico

Pode ativar a cache de disco através de um volume genérico.

Para ativar a cache de disco num volume genérico no operador do AlloyDB Omni Kubernetes, precisa de um volume persistente preparado antecipadamente e de um storageClass.

Por exemplo, se usar o GKE e não tiver o volume persistente e storageClass prontos, certifique-se de que realizou o seguinte antes de ativar a cache de disco num volume genérico:

  1. Criou um cluster com armazenamento baseado em SSD local.
  2. Formatou o volume para o sistema de ficheiros ext4 através do passo 1 de Executar o aprovisionador estático de volumes locais.
  3. Criou manualmente um volume persistente para cada SSD no seu cluster com o storageClass que define o armazenamento persistente num dispositivo de armazenamento.

Para ativar a cache de disco num volume genérico para a sua base de dados, conclua os passos seguintes:

  1. Modifique o manifesto do cluster da base de dados para adicionar o atributo ultraFastCache à secção features da secçã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 o seguinte:

    • DB_CLUSTER_NAME: o nome do cluster da base de dados. É o mesmo nome do cluster da base de dados que declarou quando o criou.
    • DISK_CACHE_SIZE: o tamanho da cache, por exemplo, 100Gi. Tem de ser superior a shared_buffers. Este campo é opcional. Se não especificar o valor deste campo, o AlloyDB Omni usa todo o espaço restante no disco, o que se aplica ao AlloyDB Omni num contentor e num cluster do Kubernetes.
    • STORAGE_CLASS_NAME: o nome do storage class do volume de cache ultrarrápido, por exemplo, local-storage.
  2. Volte a aplicar o manifesto.

Ative a cache de disco num volume local

Se quiser usar um volume local, não tem de criar um volume persistente. Em alternativa, pode usar a seguinte otimização.

Por exemplo, se usar o GKE e não tiver o volume persistente e o storageClass prontos, certifique-se de que realizou o seguinte antes de ativar a cache de disco num volume local:

  1. Criou um cluster com armazenamento baseado em SSD local.
  2. Formatou o volume para o sistema de ficheiros ext4 através do passo 1 de Executar o aprovisionador estático de volume local.

Para ativar a cache de disco num volume local para a sua base de dados, faça o seguinte:

  1. Modifique o manifesto do cluster da base de dados para adicionar o atributo ultraFastCache à secção features da secçã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 o seguinte:

    • CLUSTER_NAME: o nome do cluster da base de dados. É o mesmo nome do cluster da base de dados que declarou quando o criou.
    • DISK_CACHE_SIZE: o tamanho da cache, por exemplo, 100Gi. Tem de ser superior a shared_buffers. Este campo é opcional. Se não especificar o valor deste campo, o AlloyDB Omni usa todo o espaço restante no disco, o que se aplica ao AlloyDB Omni num contentor e num 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: a etiqueta do nó para a chave que serve como indicador de localização 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 para uma das seguintes opções:
      • 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 tem de estar vazia.
      • DoesNotExist: a matriz de valores tem de estar vazia.
      • Gt: a matriz de valores tem de ter um único elemento, que é interpretado como um número inteiro.
      • Lt: a matriz de valores tem de ter um único elemento, que é interpretado como um número inteiro.
    • LABEL_KEY_VALUE: o valor da chave da etiqueta, por exemplo, true. Defina o parâmetro como uma matriz de valores de string da seguinte forma:
      • Se o operador for In ou NotIn, a matriz de valores não pode estar vazia.
      • Se o operador for Exists ou DoesNotExist, a matriz de valores tem de estar vazia.
      • Se o operador for Gt ou Lt, a matriz de valores tem de ter um único elemento, que é interpretado como um número inteiro.
  2. Volte a aplicar o manifesto.

Ative a cache de disco num volume efémero

Pode ativar a cache de disco através de um volume emptyDir, que oferece armazenamento temporário diretamente associado ao ciclo de vida do seu pod. O volume é criado quando um pod é atribuído a um nó e existe enquanto o pod for executado nesse nó.

Quando um pod é removido de um nó, os dados no emptyDir são eliminados permanentemente. Este tipo de volume é adequado para uma cache porque oferece armazenamento temporário e rápido. Não é necessário manter os dados na cache se o pod for reagendado.

Para ativar a cache de disco num volume efémero para a sua base de dados, conclua os seguintes passos:

  1. Modifique o manifesto do cluster da base de dados para adicionar o atributo ultraFastCache à secção features da secçã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 o seguinte:

    • CLUSTER_NAME: o nome do cluster da base de dados. É o mesmo nome do cluster da base de dados que declarou quando o criou.
    • DISK_CACHE_SIZE: o tamanho da cache, por exemplo, 200Gi.
  2. Volte a aplicar o manifesto.

Valide a configuração da cache de 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 disponíveis, 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, 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 armazenamento em cache no disco estiver configurado corretamente, a mensagem Successfully opened omni disk cache ... é apresentada nos registos.

O que se segue?