Acelerar el rendimiento de la base de datos mediante la caché de disco

Selecciona una versión de la documentación:

En esta página se describe cómo aprovisionar, configurar y usar el almacenamiento en caché de disco en AlloyDB Omni para aumentar el rendimiento de tu instalación de AlloyDB Omni.

Además de los búferes compartidos en memoria de PostgreSQL estándar, la caché de disco de AlloyDB Omni permite almacenar búferes en un almacenamiento rápido, como las unidades de estado sólido (SSD). El almacenamiento en caché de disco acelera la recuperación de datos en las instalaciones de AlloyDB Omni con directorios de datos ubicados en un almacenamiento más lento.

Al igual que los búferes compartidos de PostgreSQL, la caché de disco de AlloyDB Omni no es persistente, lo que significa que los datos almacenados en caché se pierden al reiniciar.

De forma predeterminada, la caché de disco de AlloyDB Omni usa todo el almacenamiento que indica el sistema de archivos. Puede definir la cantidad de almacenamiento reservada para almacenar datos en caché mediante el parámetro omni_disk_cache_file_size.

Habilitar la caché de disco de AlloyDB Omni

Los pasos que debes seguir para habilitar la caché de disco en AlloyDB Omni dependen de si ejecutas AlloyDB Omni en un contenedor o en un clúster de Kubernetes.

Habilitar la caché de disco en un volumen genérico

Puedes habilitar la caché de disco mediante un volumen genérico.

Para habilitar la caché de disco en un volumen genérico del operador de Kubernetes de AlloyDB Omni, necesitas un volumen persistente preparado con antelación y un storageClass.

Por ejemplo, si usas GKE y no tienes el volumen persistente y storageClass listos, asegúrate de haber realizado lo siguiente antes de habilitar la caché de disco en un volumen genérico:

  1. Ha creado un clúster con almacenamiento basado en SSD local.
  2. Has formateado el volumen con el sistema de archivos ext4 siguiendo el paso 1 de Ejecutar el aprovisionador estático de volumen local.
  3. Crear manualmente un volumen persistente para cada SSD de tu clúster con storageClass, que define el almacenamiento persistente en un dispositivo de almacenamiento.

Para habilitar la caché de disco en un volumen genérico de tu base de datos, sigue estos pasos:

  1. Modifica el archivo de manifiesto del clúster de base de datos para añadir el atributo ultraFastCache a la sección features de la sección 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"
          ...
          

    Haz los cambios siguientes:

    • DB_CLUSTER_NAME: el nombre de tu clúster de bases de datos. Es el mismo nombre de clúster de base de datos que declaraste cuando lo creaste.
    • DISK_CACHE_SIZE: el tamaño de la caché (por ejemplo, 100Gi). Debe ser superior a shared_buffers. Este campo es opcional. Si no especifica el valor de este campo, AlloyDB Omni usará todo el espacio que quede en el disco, lo que se aplica tanto a AlloyDB Omni en un contenedor como en un clúster de Kubernetes.
    • STORAGE_CLASS_NAME: el nombre del storage class del volumen de caché ultrarrápido, por ejemplo, local-storage.
  2. Vuelve a aplicar el archivo de manifiesto.

Habilitar la caché de disco en un volumen local

Si quieres usar un volumen local, no tienes que crear un volumen persistente. En su lugar, puede usar la siguiente optimización.

Por ejemplo, si usas GKE y no tienes el volumen persistente y storageClass listos, asegúrate de haber realizado lo siguiente antes de habilitar la caché de disco en un volumen local:

  1. Ha creado un clúster con almacenamiento basado en SSD local.
  2. Has formateado el volumen con el sistema de archivos ext4 siguiendo el paso 1 de Ejecutar el aprovisionador estático de volumen local.

Para habilitar la caché de disco en un volumen local de tu base de datos, haz lo siguiente:

  1. Modifica el archivo de manifiesto del clúster de base de datos para añadir el atributo ultraFastCache a la sección features de la sección 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"
        ...
          

    Haz los cambios siguientes:

    • CLUSTER_NAME: el nombre de tu clúster de bases de datos. Es el mismo nombre de clúster de base de datos que declaraste cuando lo creaste.
    • DISK_CACHE_SIZE: el tamaño de la caché (por ejemplo, 100Gi). Debe ser superior a shared_buffers. Este campo es opcional. Si no especifica el valor de este campo, AlloyDB Omni usará todo el espacio que quede en el disco, lo que se aplica tanto a AlloyDB Omni en un contenedor como en un clúster de Kubernetes.
    • STORAGE_CLASS_NAME: el nombre de la clase de almacenamiento.
    • LOCAL_VOLUME_PATH: la ruta al volumen local. Por ejemplo, /mnt/disks/raid/0.
    • LABEL_KEY: la etiqueta del nodo de la clave que sirve como indicador de ubicación y facilita la distribución uniforme de los pods en el clúster. Por ejemplo, cloud.google.com/gke-local-nvme-ssd.
    • OPERATOR_VALUE: la relación de la clave con un conjunto de valores, por ejemplo, In. Asigna al parámetro uno de los siguientes valores:
      • In: la matriz de valores no puede estar vacía.
      • NotIn: la matriz de valores no puede estar vacía.
      • Exists: el array de valores debe estar vacío.
      • DoesNotExist: el array de valores debe estar vacío.
      • Gt: el array de valores debe tener un solo elemento, que se interpreta como un número entero.
      • Lt: el array de valores debe tener un solo elemento, que se interpreta como un número entero.
    • LABEL_KEY_VALUE: el valor de la clave de tu etiqueta. Por ejemplo, true. Defina el parámetro como una matriz de valores de cadena de la siguiente manera:
      • Si el operador es In o NotIn, la matriz de valores no puede estar vacía.
      • Si el operador es Exists o DoesNotExist, la matriz de valores debe estar vacía.
      • Si el operador es Gt o Lt, la matriz de valores debe tener un solo elemento, que se interpreta como un número entero.
  2. Vuelve a aplicar el archivo de manifiesto.

Habilitar la caché de disco en un volumen efímero

Puedes habilitar la caché de disco mediante un volumen emptyDir, que proporciona almacenamiento temporal vinculado directamente al ciclo de vida de tu pod. El volumen se crea cuando se asigna un pod a un nodo y existe mientras el pod se ejecuta en ese nodo.

Cuando se quita un pod de un nodo, los datos de emptyDir se eliminan de forma permanente. Este tipo de volumen es adecuado para una caché porque proporciona almacenamiento temporal y rápido. No es necesario conservar los datos de la caché si se vuelve a programar el pod.

Para habilitar la caché de disco en un volumen efímero de tu base de datos, sigue estos pasos:

  1. Modifica el archivo de manifiesto de tu clúster de base de datos para añadir el atributo ultraFastCache a la sección features de la sección spec y especifica 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: {}
            ...
          

    Haz los cambios siguientes:

    • CLUSTER_NAME: el nombre de tu clúster de bases de datos. Es el mismo nombre de clúster de base de datos que declaraste cuando lo creaste.
    • DISK_CACHE_SIZE: tamaño de la caché (por ejemplo, 200 Gi).
  2. Vuelve a aplicar el archivo de manifiesto.

Verificar la configuración de la caché de disco

Después de habilitar la caché de disco de AlloyDB Omni, comprueba que se accede a ella monitorizando la actividad de lectura y escritura en los discos con las utilidades disponibles, como iotop o iostat.

Además, puedes comprobar si la caché de disco de AlloyDB Omni está abierta.

Para verificar la configuración de la caché de disco de AlloyDB Omni, usa el siguiente comando.

  kubectl exec -i $DATABASE_POD -c database -n $DBCLUSTER_NAMESPACE -- cat /obs/diagnostic/postgresql.log | grep "opened omni disk cache"

Si el almacenamiento en caché en disco está configurado correctamente, se mostrará el mensaje Successfully opened omni disk cache ... en los registros.

Siguientes pasos