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:
- Creaste un clúster con almacenamiento basado en SSD local.
- Formateaste tu volumen en el sistema de archivos ext4 con el paso 1 de Ejecuta el aprovisionador estático de volumen local.
- Creaste manualmente un volumen persistente para cada SSD de tu clúster con el
storageClassque 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:
Modifica el manifiesto del clúster de la base de datos para agregar el atributo
ultraFastCachea la secciónfeaturesde la secciónspec: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 ashared_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 delstorage classdel volumen de caché ultrarrápida, por ejemplo,local-storage.
- 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:
- Creaste un clúster con almacenamiento basado en SSD local.
- Formateaste tu volumen en el sistema de archivos
ext4con 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:
Modifica el manifiesto del clúster de la base de datos para agregar el atributo
ultraFastCachea la secciónfeaturesde la secciónspec: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 ashared_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/0LABEL_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
InoNotIn, el array de valores no debe estar vacío. - Si el operador es
ExistsoDoesNotExist, el array de valores debe estar vacío. - Si el operador es
GtoLt, el array de valores debe tener un solo elemento, que se interpreta como un número entero.
- Si el operador es
- 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:
Modifica el manifiesto del clúster de la base de datos para agregar el atributo
ultraFastCachea la secciónfeaturesde la secciónspecy especificaemptyDirVolume: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.
- 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?
- Acerca de la administración automática de memoria
- Acerca de los discos SSD locales
- Crea y, luego, inicia una instancia de VM