Además de los búferes compartidos en memoria de PostgreSQL estándar, la memoria caché del 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 memoria caché del 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 memoria caché del disco de AlloyDB Omni usa todo el almacenamiento que informa el sistema de archivos. Puedes definir la cantidad de almacenamiento reservado para almacenar datos en caché con el parámetro omni_disk_cache_file_size.
Habilita la memoria caché del disco de AlloyDB Omni
Para habilitar la memoria caché del disco, completa una de las siguientes subsecciones:
- Habilita la memoria caché del disco en un volumen genérico
- Habilita la memoria caché del disco en un volumen local
- Habilita la memoria caché del disco en un volumen efímero
Habilita la memoria caché del disco en un volumen genérico
Puedes habilitar la memoria caché del disco con un volumen genérico.
Para habilitar la caché de disco en un volumen genérico en el operador de AlloyDB Omni Kubernetes, 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 lo siguiente antes de habilitar la memoria caché del disco en un volumen genérico:
- Creaste un clúster con almacenamiento basado en SSD local.
- Formateaste tu volumen al sistema de archivos ext4 con el paso 1 de Ejecuta el aprovisionador estático de volumen local.
- Creaste de forma manual un volumen persistente para cada SSD de tu clúster con la
storageClassque define el almacenamiento persistente en un dispositivo de almacenamiento.
Para habilitar la memoria caché del disco en un volumen genérico para tu base de datos, completa los siguientes pasos:
Modifica el manifiesto del clúster de 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 de clúster de base de datos que declaraste cuando lo creaste.DISK_CACHE_SIZE: Es 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 que queda 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 lastorage classdel volumen de caché ultrarrápido, por ejemplo,local-storage.
- Vuelve a aplicar el manifiesto.
Habilita la memoria caché del disco en un volumen local
Si quieres usar un volumen local, no tienes que crear un volumen persistente. En su lugar, puedes 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 memoria caché del disco en un volumen local:
- Creaste un clúster con almacenamiento basado en SSD local.
- Formateaste tu volumen al sistema de archivos
ext4con el paso 1 de Ejecuta el aprovisionador estático de volumen local.
Para habilitar la memoria caché del disco en un volumen local para tu base de datos, haz lo siguiente:
Modifica el manifiesto del clúster de 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 de clúster de base de datos que declaraste cuando lo creaste.DISK_CACHE_SIZE: Es 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 que queda 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: Es la ruta de acceso al volumen local, por ejemplo,/mnt/disks/raid/0.LABEL_KEY: Es la etiqueta del nodo para la clave que sirve como indicador de ubicación y facilita la distribución uniforme de 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. Configura 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 etiqueta, por ejemplo,true. Configura 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 memoria caché del disco en un volumen efímero
Puedes habilitar la memoria caché del disco con un volumen emptyDir, que proporciona almacenamiento temporal que está 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 borran 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 en la caché si se reprograma el pod.
Para habilitar la memoria caché del disco en un volumen efímero para tu base de datos, completa los siguientes pasos:
Modifica el manifiesto del clúster de 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 de clúster de 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 memoria caché del disco
Después de habilitar la memoria caché del disco de AlloyDB Omni, verifica que se acceda a la memoria caché del disco mediante la supervisión de la actividad de lectura y escritura en los discos con utilidades disponibles como iotop o iostat.
Además, puedes verificar si la memoria caché del disco de AlloyDB Omni está abierta.
Para verificar la configuración de la memoria caché del 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é de disco está configurado correctamente, el mensaje Successfully opened omni disk cache ... se muestra 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