En esta página, se describe cómo aprovisionar, configurar y usar el almacenamiento en caché en disco en AlloyDB Omni para aumentar el rendimiento de tu instalación de AlloyDB Omni.
Además de los búferes compartidos en memoria estándar de PostgreSQL, la caché en disco de AlloyDB Omni permite almacenar búferes en almacenamiento rápido, como unidades de estado sólido (SSD). La caché en disco acelera la recuperación de datos en las instalaciones de AlloyDB Omni con directorios de datos ubicados en 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 durante el reinicio.
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 almacenar en caché los datos con el parámetro omni_disk_cache_file_size
.
Habilita la caché de disco de AlloyDB Omni
Los pasos que debes seguir para habilitar la caché en disco para AlloyDB Omni dependen de si ejecutas AlloyDB Omni en un contenedor o en un clúster de Kubernetes.
Servidor único
Aprovisiona discos y crea un sistema de archivos
Para la caché de disco de AlloyDB Omni, creas un sistema de archivos en uno o varios discos y lo activas dentro de un contenedor con AlloyDB Omni. Además, puedes usar utilidades como mdadm
o lvm
para agrupar la capacidad con varios discos y usar cualquier sistema de archivos.
En los siguientes pasos, se muestra cómo usar lvm
y ext4
en una instancia de Ubuntu Compute Engine con SSD NVMe.
Crea un grupo de volúmenes a partir de todos los dispositivos físicos disponibles:
nvme_prefix="STORAGE_PREFIX" nvme_list=$(ls "$nvme_prefix"*) sudo vgcreate VOLUME_GROUP ${nvme_list}
Reemplaza lo siguiente:
STORAGE_PREFIX
: Es el prefijo de la ruta de acceso de los discos locales de destino que están conectados a una máquina virtual a través de la interfaz de memoria no volátil express (NVMe). Por ejemplo, en Google Cloud, las rutas de acceso de los dispositivos NVMe siempre comienzan con/dev/nvme0n
.VOLUME_GROUP
: Es el nombre de un grupo de volúmenes en el que se combinan tus SSD, por ejemplo,omni-disk-cache-volume
.
-
Para crear un volumen lógico a partir de la capacidad libre del grupo de volúmenes del paso anterior, usa el siguiente comando:
sudo lvcreate -n LOGICAL_VOLUME -l 100%FREE VOLUME_GROUP
Reemplaza
LOGICAL_VOLUME
por el nombre de un volumen lógico que el LVM considera una partición, por ejemplo,omni_disk_cache_device
. - Crea el sistema de archivos
ext4
en el volumen lógico. Si es necesario, puedes especificar otras opciones deext4
sujetas a la seguridad de los datos.sudo mkfs.ext4 /dev/VOLUME_GROUP/LOGICAL_VOLUME
Para crear un directorio que sirva como punto de activación en la máquina host y activar el sistema de archivos, usa el siguiente comando:
sudo mkdir /OMNI_DISK_CACHE_DIRECTORY sudo mount /dev/VOLUME_GROUP/LOGICAL_VOLUME /OMNI_DISK_CACHE_DIRECTORY
Reemplaza
OMNI_DISK_CACHE_DIRECTORY
por el nombre del directorio o una ruta de acceso al directorio que funciona como punto de activación, por ejemplo,omni_disk_cache_directory
.
Activa el directorio de caché dentro de AlloyDB Omni
Antes de habilitar la caché en disco para AlloyDB Omni que se ejecuta en un contenedor, debes activar el directorio de caché dentro de AlloyDB Omni.
Para obtener información sobre cómo instalar AlloyDB Omni desde una imagen de Docker y personalizarlo, consulta Cómo personalizar tu instalación de AlloyDB Omni.
Para activar OMNI_DISK_CACHE_DIRECTORY
dentro de tu contenedor de Docker que ejecuta AlloyDB Omni, usa el siguiente comando:
Docker
sudo docker run --name CONTAINER_NAME \ -e POSTGRES_PASSWORD=PASSWORD \ -e PGDATA=/var/lib/postgresql/data/pgdata \ -v DATA_DIR:/var/lib/postgresql/data \ -v /OMNI_DISK_CACHE_DIRECTORY:/CACHE_DIRECTORY_PATH_INSIDE_CONTAINER \ -d google/alloydbomni
Reemplaza lo siguiente:
CONTAINER_NAME
: Es el nombre que se asignará al nuevo contenedor de AlloyDB Omni, por ejemplo,my-omni
.PASSWORD
: Es la contraseña del administrador raíz de la base de datos de PostgreSQL.DATA_DIR
: Es la ruta de acceso del sistema de archivos que deseas que AlloyDB Omni use para su directorio de datos.CACHE_DIRECTORY_PATH_INSIDE_CONTAINER
: Es el directorio de caché dentro del contenedor de AlloyDB Omni que se asigna al punto de activación en la máquina anfitrión. Por ejemplo, según el valor del directorio de caché dentro del contenedor,/omni_disk_cache_directory
, similar aOMNI_DISK_CACHE_DIRECTORY
o/disk/cache/inside/container
.
Podman
podman run --name CONTAINER_NAME \ -e POSTGRES_PASSWORD=PASSWORD \ -e PGDATA=/var/lib/postgresql/data/pgdata \ -v DATA_DIR:/var/lib/postgresql/data \ -v /OMNI_DISK_CACHE_DIRECTORY:/CACHE_DIRECTORY_PATH_INSIDE_CONTAINER \ -d docker.io/google/alloydbomni
Reemplaza lo siguiente:
CONTAINER_NAME
: Es el nombre que se asignará al nuevo contenedor de AlloyDB Omni, por ejemplo,my-omni
.PASSWORD
: Es la contraseña del administrador raíz de la base de datos de PostgreSQL.CACHE_DIRECTORY_PATH_INSIDE_CONTAINER
: Es el directorio de caché dentro del contenedor de AlloyDB Omni que se asigna al punto de activación en la máquina anfitrión. Por ejemplo, según el valor del directorio de caché dentro del contenedor,/omni_disk_cache_directory
, similar aOMNI_DISK_CACHE_DIRECTORY
o/disk/cache/inside/container
.
Para otorgar permisos de acceso completo al OMNI_DISK_CACHE_DIRECTORY
activado, usa los siguientes comandos:
Docker
sudo docker exec -it CONTAINER_NAME chown postgres:postgres /CACHE_DIRECTORY_PATH_INSIDE_CONTAINER sudo docker exec -it CONTAINER_NAME chmod -R a+rw /CACHE_DIRECTORY_PATH_INSIDE_CONTAINER
Podman
sudo podman exec -it CONTAINER_NAME chown postgres:postgres /CACHE_DIRECTORY_PATH_INSIDE_CONTAINER sudo podman exec -it CONTAINER_NAME chmod -R a+rw /CACHE_DIRECTORY_PATH_INSIDE_CONTAINER
Habilita la caché de disco de AlloyDB Omni para que se ejecute en un contenedor
Para habilitar la caché en disco de AlloyDB Omni para tu base de datos, establece los parámetros de configuración unificada general (GUC) adecuados después de asegurarte de que se pueda acceder al directorio de caché activado desde el contenedor de Docker.
-
Para conectarte a la base de datos de AlloyDB Omni en contenedor como superusuario, usa el siguiente comando:
Docker
sudo docker exec -it CONTAINER_NAME psql -h localhost -U postgres
Podman
sudo podman exec -it CONTAINER_NAME psql -h localhost -U postgres
-
Para establecer el valor de los parámetros, usa los siguientes comandos dentro de la base de datos AlloyDB Omni:
alter system set omni_disk_cache_enabled=on; alter system set omni_disk_cache_directory='/CACHE_DIRECTORY_PATH_INSIDE_CONTAINER';
-
De forma predeterminada, AlloyDB Omni usa todo el espacio disponible en el sistema de archivos. Si es necesario, puedes anular el valor predeterminado con el parámetro
omni_disk_cache_file_size
.alter system set omni_disk_cache_file_size=SIZE_IN_MB;
-
Para que se aplique el cambio en los parámetros de configuración de almacenamiento en caché, reinicia el contenedor en ejecución con AlloyDB Omni:
Docker
sudo docker restart CONTAINER_NAME
Podman
sudo podman restart CONTAINER_NAME
Kubernetes
Habilita la caché de disco en un volumen genérico
Puedes habilitar la caché en el disco con un volumen genérico.
Para habilitar la caché en 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 listo el volumen persistente ni storageClass
, asegúrate de haber realizado lo siguiente antes de habilitar la caché en disco en un volumen genérico:
- Creaste un clúster con almacenamiento basado en SSD local.
- Formateaste el volumen con el sistema de archivos ext4 mediante el paso 1 de Ejecuta el aprovisionador estático de volumen local.
- Creaste un volumen persistente de forma manual para cada SSD de tu clúster con el
storageClass
que define el almacenamiento persistente en un dispositivo de almacenamiento.
Para habilitar la caché en disco en un volumen genérico para tu base de datos, completa los siguientes pasos:
Modifica el manifiesto del clúster de bases de datos para agregar el atributo
ultraFastCache
a la secciónfeatures
de la secciónspec
:apiVersion: alloydbomni.dbadmin.goog/v1 kind: DBCluster metadata: name: CLUSTER_NAME spec: databaseVersion: "15.7.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 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 ashared_buffers
. Este campo es opcional. Si no especificas el valor de este campo, AlloyDB Omni usará todo el espacio restante en el disco, lo que se aplica a AlloyDB Omni en un contenedor y en un clúster de Kubernetes.STORAGE_CLASS_NAME
: Es el nombre delstorage class
del volumen de caché ultrarrápida, por ejemplo,local-storage
.
- Vuelve a aplicar el manifiesto.
Habilita la caché en disco en un volumen local
Si quieres usar un volumen local, no es necesario que crees un volumen persistente. En su lugar, 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 lo siguiente antes de habilitar la caché en disco en un volumen local:
- Creaste un clúster con almacenamiento basado en SSD local.
- Formateaste el volumen con el sistema de archivos ext4 mediante el paso 1 de Ejecuta el aprovisionador estático de volumen local.
Para habilitar la caché en disco en un volumen local para tu base de datos, haz lo siguiente:
Modifica el manifiesto del clúster de bases de datos para agregar el atributo
ultraFastCache
a la secciónfeatures
de la secciónspec
:apiVersion: alloydbomni.dbadmin.goog/v1 kind: DBCluster metadata: name: CLUSTER_NAME spec: databaseVersion: "15.7.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 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 ashared_buffers
. Este campo es opcional. Si no especificas el valor de este campo, AlloyDB Omni usará todo el espacio restante en el disco, lo que se aplica a AlloyDB Omni en un contenedor y 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 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 etiqueta, por ejemplo,true
. Establece el parámetro en un array de valores de cadena de la siguiente manera:- Si el operador es
In
oNotIn
, el array de valores no debe estar vacío. - Si el operador es
Exists
oDoesNotExist
, el array de valores debe estar vacío. - Si el operador es
Gt
oLt
, 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.
Verifica la configuración de la caché en el 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 las utilidades disponibles, como iotop
o iostat
.
Además, puedes verificar si la caché de disco de AlloyDB Omni está abierta.
Los pasos que debes seguir para verificar la configuración de la caché en disco de AlloyDB Omni dependen de si ejecutas AlloyDB Omni en un contenedor o en un clúster de Kubernetes.
Servidor único
Docker
sudo docker logs CONTAINER_NAME 2>&1 | grep "opened omni disk cache"
Podman
sudo podman logs CONTAINER_NAME 2>&1 | grep "opened omni disk cache"
Kubernetes
kubectl exec -i $DATABASE_POD -c database -n $DBCLUSTER_NAMESPACE -- cat /obs/diagnostic/postgresql.log | grep "opened omni disk cache"
Si la caché en el disco está configurada correctamente, el mensaje Successfully opened omni disk cache ...
se mostrará en los registros.
¿Qué sigue?
- Acerca de la administración automática de la memoria
- Acerca de los discos SSD locales
- Crea y, luego, inicia una instancia de VM