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 cache em disco no AlloyDB Omni para aumentar a performance 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 em disco do AlloyDB Omni não é persistente, o que significa que os dados armazenados em cache são perdidos na reinicialização.

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

Ativar o cache em disco do AlloyDB Omni

Para ativar o cache em disco, conclua uma das seguintes subseções:

Ativar o cache em 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 AlloyDB Omni no Kubernetes, é necessário ter um volume permanente pronto com antecedência e uma storageClass.

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

  1. Criou um cluster com armazenamento local baseado em SSD.
  2. Formatou o volume para o sistema de arquivos ext4 usando a etapa 1 de Executar o provisionador estático do volume local.
  3. Criou 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 em 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 quando você o criou.
    • 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 storage class do volume de cache ultrarrápido. Por exemplo, local-storage.
  2. Reaplique o manifesto.

Ativar o cache em disco em um volume local

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

Por exemplo, se você usar o GKE e não tiver o volume permanente e a storageClass prontos, verifique se você realizou o seguinte antes de ativar o cache em disco em um volume local:

  1. Criou um cluster com armazenamento local baseado em SSD.

  2. Formatou 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 em disco em um volume local para seu 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 quando você o criou.
    • 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 precisa estar vazia.
      • Se o operador for Gt ou Lt, a matriz de valores precisa ter um único elemento, que será interpretado como um número inteiro.

Ativar o cache em disco em um volume efêmero

É possível ativar o cache em disco usando um volume emptyDir, que fornece armazenamento temporário vinculado diretamente ao ciclo de vida do pod. O volume é criado quando um pod é atribuído a um nó e existe enquanto o pod é executado 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 fornece armazenamento temporário e rápido. Os dados no cache não precisam ser mantidos se o pod for reprogramado.

Para ativar o cache em 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 quando você o criou.
    • DISK_CACHE_SIZE: o tamanho do cache, por exemplo, 200 Gi.
  2. Reaplique o manifesto.

Verificar a configuração do cache em disco

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

Além disso, é possível verificar se o cache em disco do AlloyDB Omni está aberto.

Para verificar a configuração do cache em 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 em disco estiver configurado corretamente, a mensagem Successfully opened omni disk cache ... será exibida nos registros.

A seguir

* Sobre discos SSD locais * Criar e iniciar uma instância de VM