Acelera el rendimiento de la base de datos con la caché del 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 la instalación de AlloyDB Omni.

Además de los búferes compartidos en la memoria de PostgreSQL estándar, la caché de disco de AlloyDB Omni permite almacenar búferes en un almacenamiento rápido, como 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 cuando se reinicia.

De forma predeterminada, la caché de disco de AlloyDB Omni usa todo el almacenamiento que informa el sistema de archivos. Puedes definir la cantidad de almacenamiento reservado para los datos de la caché con el parámetro omni_disk_cache_file_size.

Habilita la caché de disco de AlloyDB Omni

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

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

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

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

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

  1. Creaste un clúster con almacenamiento basado en SSD local.
  2. Formateaste tu volumen en el sistema de archivos ext4 con el paso 1 de Ejecuta el aprovisionador estático de volumen local.
  3. Creaste manualmente un volumen persistente para cada SSD de tu clúster con el storageClass que define el almacenamiento persistente en un dispositivo de almacenamiento.

Para habilitar la caché de disco en un volumen genérico para tu base de datos, completa los siguientes pasos:

  1. Modifica el manifiesto del clúster de la base de datos para agregar 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"
          ...
          

    Reemplaza lo siguiente:

    • DB_CLUSTER_NAME: Es el nombre de tu clúster de base de datos. Es el mismo nombre del clúster de la 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 especificas el valor de este campo, AlloyDB Omni usa todo el espacio restante en el disco, lo que se aplica tanto a AlloyDB Omni en un contenedor como en un clúster de Kubernetes.
    • STORAGE_CLASS_NAME: Es el nombre del storage class del volumen de caché ultrarrápida, por ejemplo, local-storage.
  2. Vuelve a aplicar el manifiesto.

Cómo habilitar la caché de disco en un volumen local

Si deseas usar un volumen local, no es necesario que crees un volumen persistente. En cambio, puedes usar la siguiente optimización.

Por ejemplo, si usas GKE y no tienes listo el volumen persistente ni storageClass, asegúrate de haber realizado las siguientes acciones antes de habilitar la caché de disco en un volumen local:

  1. Creaste un clúster con almacenamiento basado en SSD local.
  2. Formateaste tu volumen en el sistema de archivos ext4 con el paso 1 de Ejecuta el aprovisionador estático de volumen local.

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

  1. Modifica el manifiesto del clúster de la base de datos para agregar 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"
        ...
          

    Reemplaza lo siguiente:

    • CLUSTER_NAME: Es el nombre de tu clúster de base de datos. Es el mismo nombre del clúster de la 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 especificas el valor de este campo, AlloyDB Omni usa todo el espacio restante en el disco, lo que se aplica tanto a AlloyDB Omni en un contenedor como en un clúster de Kubernetes.
    • STORAGE_CLASS_NAME: Es el nombre de la clase de almacenamiento.
    • LOCAL_VOLUME_PATH: La ruta de acceso al volumen local, por ejemplo, /mnt/disks/raid/0
    • LABEL_KEY: Es la etiqueta del nodo para la clave que funciona 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: Es la relación de la clave con un conjunto de valores, por ejemplo, In. Establece el parámetro en uno de los siguientes valores:
      • In: El array de valores no debe estar vacío.
      • NotIn: El array de valores no debe estar vacío.
      • 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: Es el valor de la clave de tu etiqueta, por ejemplo, true. Establece el parámetro en un array de valores de cadena de la siguiente manera:
      • Si el operador es In o NotIn, el array de valores no debe estar vacío.
      • Si el operador es Exists o DoesNotExist, el array de valores debe estar vacío.
      • Si el operador es Gt o Lt, el array de valores debe tener un solo elemento, que se interpreta como un número entero.
  2. Vuelve a aplicar el manifiesto.

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

Puedes habilitar la caché de disco con 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 en emptyDir se borran de forma permanente. Este tipo de volumen es adecuado para una caché porque proporciona almacenamiento rápido y temporal. No es necesario conservar los datos en la caché si se reprograma el pod.

Para habilitar la caché de disco en un volumen efímero para tu base de datos, completa los siguientes pasos:

  1. Modifica el manifiesto del clúster de la base de datos para agregar 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: {}
            ...
          

    Reemplaza lo siguiente:

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

Verifica la configuración de la caché de disco

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

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

Para verificar la configuración de la caché de disco para 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, el mensaje Successfully opened omni disk cache ... se mostrará en los registros.

¿Qué sigue?