Configura el motor de columnas en AlloyDB Omni

Selecciona una versión de la documentación:

En esta página, se describe cómo habilitar o inhabilitar el motor de columnas en un clúster de base de datos de AlloyDB Omni. También se explica cómo configurar un tamaño inicial adecuado para su almacén de columnas.

Para obtener una descripción general conceptual del motor de columnas de AlloyDB, consulta Descripción general del motor de columnas de AlloyDB Omni.

Habilita el motor de columnas

Para usar el motor columnar en una instancia, establece la marca google_columnar_engine.enabled de la instancia en on.

Los pasos que uses para configurar esta marca en una instancia dependen de si ejecutas AlloyDB Omni en un contenedor o en un clúster de Kubernetes.

Un solo servidor

Para configurar google_columnar_engine.enabled como on, sigue estos pasos:

  1. Ejecuta el comando ALTER SYSTEM de PostgreSQL:

    ALTER SYSTEM SET google_columnar_engine.enabled = 'on'
    
  2. Si deseas ajustar la configuración del motor columnar, sigue las instrucciones de la siguiente sección antes de reiniciar el servidor de la base de datos. De lo contrario, completa el siguiente paso para reiniciar el servidor de la base de datos ahora.

  3. Para que el cambio en los parámetros de configuración surta efecto, reinicia el contenedor en ejecución con AlloyDB Omni.

    Docker

      sudo docker restart CONTAINER_NAME

    Podman

      sudo podman restart CONTAINER_NAME

Kubernetes

Para establecer la marca google_columnar_engine.enabled en on, modifica el manifiesto del clúster de la base de datos para agregar el atributo parameters a la sección primarySpec:

    apiVersion: alloydbomni.dbadmin.goog/v1
    kind: DBCluster
    metadata:
      name: CLUSTER_NAME
    spec:
      databaseVersion: "16.8.0"
      primarySpec:
        parameters:
          google_columnar_engine.enabled: "on"

Reemplaza CLUSTER_NAME por 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.

Configura el tamaño del almacén de columnas

Mientras el motor de columnas está habilitado en una instancia, AlloyDB Omni asigna una parte de la memoria de la instancia para almacenar sus datos de columnas. Dedicar RAM de alta velocidad a tu almacén de columnas verifica que AlloyDB Omni pueda acceder a los datos de columnas lo más rápido posible.

La memoria y la caché de almacenamiento juntas representan la capacidad general del motor de columnas.

Cómo configurar la memoria

Puedes establecer la asignación en un tamaño fijo con la marca google_columnar_engine.memory_size_in_mb.

Los pasos que uses para configurar la memoria del almacén de columnas para AlloyDB Omni dependen de si ejecutas AlloyDB Omni en un contenedor o en un clúster de Kubernetes.

Un solo servidor

Para establecer la marca google_columnar_engine.memory_size_in_mb en una instancia, haz lo siguiente:

  1. Para configurar la memoria, ejecuta el comando ALTER SYSTEM de PostgreSQL:

    ALTER SYSTEM SET google_columnar_engine.memory_size_in_mb = COLUMN_MEMORY_SIZE;
    

    Reemplaza COLUMN_MEMORY_SIZE por el nuevo tamaño del almacenamiento de la columna, en megabytes, por ejemplo, 256.

  2. Para que el cambio en los parámetros de configuración surta efecto, reinicia el contenedor en ejecución con AlloyDB Omni.

    Docker

    sudo docker restart CONTAINER_NAME

    Podman

    sudo podman restart CONTAINER_NAME

Kubernetes

Para establecer la marca google_columnar_engine.memory_size_in_mb, modifica el manifiesto del clúster de la base de datos para agregar el atributo parameters a la sección primarySpec:

    apiVersion: alloydbomni.dbadmin.goog/v1
    kind: DBCluster
    metadata:
      name: CLUSTER_NAME
    spec:
      databaseVersion: "16.8.0"
      primarySpec:
        parameters:
          google_columnar_engine.memory_size_in_mb: "COLUMN_MEMORY_SIZE"

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.
  • COLUMN_MEMORY_SIZE: Es el nuevo tamaño del almacenamiento de la columna, en megabytes; por ejemplo, 256.

Configura la caché de almacenamiento

Los pasos que uses para configurar el caché de almacenamiento del motor de columnas para AlloyDB Omni dependen de si ejecutas AlloyDB Omni en un contenedor o en un clúster de Kubernetes.

Un solo servidor

Puedes configurar la caché de almacenamiento del motor columnar en dispositivos dedicados o compartidos.

Dispositivos de uso específico

En dispositivos dedicados, para habilitar la caché de almacenamiento del motor de columnas de AlloyDB Omni para un contenedor de un solo servidor, debes aprovisionar discos y crear un sistema de archivos, luego activar el directorio de caché dentro de AlloyDB Omni y, por último, habilitar la caché de almacenamiento de columnas.

Aprovisiona discos y crea un sistema de archivos

Para aprovisionar discos y crear un sistema de archivos para la caché de almacenamiento del motor columnar de AlloyDB Omni, debes crear un sistema de archivos en un disco o en varios y activarlo 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 Compute Engine de Ubuntu con SSD NVMe.

  1. 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 se conectan a una máquina virtual con la interfaz de memoria no volátil express (NVMe). Por ejemplo, en Google Cloud, las rutas de acceso del dispositivo 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.
  2. 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 LVM trata como una partición, por ejemplo, omni_disk_cache_device.

  3. Crea el sistema de archivos ext4 en el volumen lógico. Si es necesario, puedes especificar otras opciones de ext4 sujetas a la seguridad de los datos.
    sudo mkfs.ext4 /dev/VOLUME_GROUP/LOGICAL_VOLUME
  4. Para crear un directorio que sirva como punto de activación en la máquina anfitrión y activar el sistema de archivos, usa el siguiente comando:

    sudo mkdir /OMNI_COLUMNAR_STORAGE_CACHE_DIRECTORY
    sudo mount /dev/VOLUME_GROUP/LOGICAL_VOLUME /OMNI_COLUMNAR_STORAGE_CACHE_DIRECTORY

    Reemplaza OMNI_COLUMNAR_STORAGE_CACHE_DIRECTORY por el nombre del directorio o una ruta de acceso al directorio que actúa como punto de activación, por ejemplo, omni_columnar_storage_cache_directory.

Cómo activar el directorio de caché de almacenamiento columnar en AlloyDB Omni

Antes de habilitar la caché de 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 personalizarla, consulta Cómo personalizar tu instalación de AlloyDB Omni.

Para montar OMNI_COLUMNAR_STORAGE_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_COLUMNAR_STORAGE_CACHE_DIRECTORY:/CACHE_DIRECTORY_PATH_INSIDE_CONTAINER
-d google/alloydbomni

Reemplaza lo siguiente:

  • CONTAINER_NAME: Es el nombre que se le 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, ya sea /omni_disk_cache_directory, similar a OMNI_COLUMNAR_STORAGE_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_COLUMNAR_STORAGE_CACHE_DIRECTORY:/CACHE_DIRECTORY_PATH_INSIDE_CONTAINER
-d docker.io/google/alloydbomni

Reemplaza lo siguiente:

  • CONTAINER_NAME: Es el nombre que se le 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, ya sea /omni_columnar_storage_cache_directory, similar a OMNI_COLUMNAR_STORAGE_CACHE_DIRECTORY, o /disk/cache/inside/container.

Para otorgar permisos de acceso completo al OMNI_COLUMNAR_STORAGE_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 almacenamiento columnar de AlloyDB Omni para AlloyDB Omni que se ejecuta en un contenedor

Para habilitar la caché de almacenamiento columnar de AlloyDB Omni en dispositivos dedicados para tu base de datos, establece los parámetros de configuración unificada general (GUC) adecuados después de verificar que se pueda acceder al directorio de caché activado desde el interior del contenedor de Docker.

  1. Establece el directorio de caché de almacenamiento columnar:

    ALTER SYSTEM SET google_columnar_engine.omni_storage_cache_directory = OMNI_COLUMNAR_STORAGE_CACHE_DIRECTORY;
    

    Reemplaza OMNI_COLUMNAR_STORAGE_CACHE_DIRECTORY por la ruta de acceso absoluta al directorio dedicado en el que deseas que AlloyDB Omni almacene los archivos de caché de almacenamiento del motor columnar. Verifica que este directorio exista y tenga los permisos de escritura adecuados para el usuario de la base de datos.

  2. Configura el tamaño de la caché de almacenamiento:

    ALTER SYSTEM SET google_columnar_engine.storage_cache_size = STORAGE_CACHE_SIZE;
    

    Reemplaza STORAGE_CACHE_SIZE por el tamaño de la caché de almacenamiento columnar que desees, en megabytes. De forma predeterminada, el tamaño total del dispositivo dedicado se asigna al motor columnar, sin afectar la caché de disco. El valor máximo permitido para esta marca es 1,000 * google_columnar_engine.memory_size_in_mb, el que sea menor.

  3. Para que el cambio en los parámetros de configuración surta efecto, reinicia el contenedor en ejecución con AlloyDB Omni.

    Docker

    sudo docker restart CONTAINER_NAME

    Podman

    sudo podman restart CONTAINER_NAME

Dispositivos compartidos

Antes de configurar la caché de almacenamiento columnar en dispositivos compartidos con caché de disco, debes habilitar la caché de disco de AlloyDB Omni.

Configura la caché de almacenamiento en dispositivos compartidos de la siguiente manera:

  1. Configura la caché de almacenamiento:

    ALTER SYSTEM SET google_columnar_engine.storage_cache_size = STORAGE_CACHE_SIZE;
    

    Reemplaza STORAGE_CACHE_SIZE por el tamaño de la caché de almacenamiento que desees, en megabytes. De forma predeterminada, el 5% de la caché de disco se asigna al motor columnar. El valor máximo permitido para esta marca es el 50% de la caché de disco total o 1,000 * google_columnar_engine.memory_size_in_mb, el que sea menor.

  2. Para que el cambio en los parámetros de configuración surta efecto, reinicia el contenedor en ejecución con AlloyDB Omni.

    Docker

    sudo docker restart CONTAINER_NAME

    Podman

    sudo podman restart CONTAINER_NAME

Kubernetes

Para habilitar la caché de almacenamiento de tu base de datos, modifica el manifiesto del clúster de la base de datos para agregar el atributo columnarSpillToDisk a la sección features de la sección primarySpec:

apiVersion: alloydbomni.dbadmin.goog/v1
kind: DBCluster
metadata:
  name: CLUSTER_NAME
spec:
  databaseVersion: "16.8.0"
  primarySpec:
    features:
      columnarSpillToDisk:
        cacheSize: STORAGE_CACHE_SIZE
      ultraFastCache:
        cacheSize: ULTRAFAST_CACHE_SIZE
        genericVolume:
          storageClass: "STORAGE_CLASS_NAME"
...

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.
  • STORAGE_CACHE_SIZE: Es el tamaño de la caché de almacenamiento columnar, por ejemplo, 5Gi. Si no especificas un valor para este campo, se asigna el 5% de la caché de disco al motor columnar de forma predeterminada.
  • ULTRAFAST_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. Para obtener más información sobre las unidades de medida, consulta Unidades de recursos de memoria.
  • STORAGE_CLASS_NAME: Es el nombre de la clase de almacenamiento del volumen de caché ultrarrápido, por ejemplo, local-storage.

Habilita la unión vectorizada

El motor de columnas tiene una función de unión vectorizada que puede mejorar el rendimiento de las uniones aplicando el procesamiento vectorizado a las consultas aptas.

Después de habilitar la unión vectorizada, el optimizador de consultas de AlloyDB tiene la opción de aplicar el operador de unión vectorizada en lugar del operador de unión hash estándar de PostgreSQL. El optimizador toma esta decisión comparando el costo de ejecutar la consulta con cada método.

Para habilitar la unión vectorizada en una instancia, establece la marca google_columnar_engine.enable_vectorized_join de la instancia en on.

Para establecer esta marca en una instancia, ejecuta el comando ALTER SYSTEM de PostgreSQL:

ALTER SYSTEM SET google_columnar_engine.enable_vectorized_join = 'on';

De forma predeterminada, AlloyDB Omni asigna un subproceso a la función de unión vectorizada. Puedes aumentar la cantidad de subprocesos disponibles para esta función configurando la marca google_columnar_engine.vectorized_join_threads en un valor mayor. El valor máximo es cpu_count * 2.

Actualiza manualmente tu motor de columnas

De forma predeterminada, cuando el motor de columnas está habilitado, actualiza el almacén de columnas en segundo plano.

Para actualizar manualmente el motor de columnas, ejecuta la siguiente consulta en SQL:

SELECT google_columnar_engine_refresh(relation =>'TABLE_NAME');

Reemplaza TABLE_NAME por el nombre de la tabla o la vista materializada que deseas actualizar de forma manual.

Inhabilita el motor de columnas

Para inhabilitar el motor de Columbar en una instancia, establece la marca google_columnar_engine.enabled en off.

Los pasos que uses para configurar esta marca en una instancia dependen de si ejecutas AlloyDB Omni en un contenedor en un solo servidor o en un clúster de Kubernetes.

Un solo servidor

Para configurar google_columnar_engine.enabled como off, sigue estos pasos:

  1. Ejecuta el comando ALTER SYSTEM de PostgreSQL:
ALTER SYSTEM SET google_columnar_engine.enabled = 'off'
  1. Para que el cambio en los parámetros de configuración surta efecto, reinicia el contenedor en ejecución con AlloyDB Omni.

Docker

Para reiniciar un contenedor de AlloyDB Omni, ejecuta el comando docker container restart:

  sudo docker restart CONTAINER_NAME

Reemplaza CONTAINER_NAME por el nombre que le asignaste al contenedor de AlloyDB Omni cuando lo instalaste.

Podman

Para reiniciar un contenedor de AlloyDB Omni, ejecuta el comando podman container start:

  sudo podman restart CONTAINER_NAME

Reemplaza CONTAINER_NAME por el nombre que le asignaste al contenedor de AlloyDB Omni cuando lo instalaste.

Kubernetes

Para establecer la marca google_columnar_engine.enabled en off, modifica el manifiesto del clúster de la base de datos para agregar el atributo parameters a la sección primarySpec:

  apiVersion: alloydbomni.dbadmin.goog/v1
  kind: DBCluster
  metadata:
    name: CLUSTER_NAME
  spec:
    databaseVersion: "16.8.0"
    primarySpec:
      parameters:
        google_columnar_engine.enabled: "off"

Reemplaza CLUSTER_NAME por 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.

¿Qué sigue?