Configurar 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.

Habilitar el motor columnar

Para usar el motor de columnas en una instancia, define la marca google_columnar_engine.enabled de la instancia en on.

Los pasos que sigas para definir 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 definir el google_columnar_engine.enabled en on, sigue estos pasos:

  1. Ejecuta el ALTER SYSTEM comando de PostgreSQL:

    ALTER SYSTEM SET google_columnar_engine.enabled = 'on'
    
  2. Si quieres ajustar la configuración del motor columnar, sigue las instrucciones de la sección siguiente 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 asignar el valor on a la marca google_columnar_engine.enabled, modifica el manifiesto del clúster de base de datos para añadir el atributo parameters a la sección primarySpec:

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

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

Configurar el tamaño del almacén de columnas

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

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

Configurar la memoria

Puede asignar un tamaño fijo mediante la marca google_columnar_engine.memory_size_in_mb.

Los pasos que sigas para definir 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 definir la marca google_columnar_engine.memory_size_in_mb en una instancia, haz lo siguiente:

  1. Configura la memoria ejecutando el comando de PostgreSQL ALTER SYSTEM:

    ALTER SYSTEM SET google_columnar_engine.memory_size_in_mb = COLUMN_MEMORY_SIZE;
    

    Sustituye 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 definir la marca google_columnar_engine.memory_size_in_mb, modifica el manifiesto del clúster de base de datos para añadir el atributo parameters a la sección primarySpec:

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

Haz los cambios siguientes:

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

Configurar la caché de almacenamiento

Antes de configurar la caché de almacenamiento, debes habilitar la caché de disco de AlloyDB Omni.

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

Un solo servidor

  1. Configure la caché de almacenamiento de la siguiente manera:

    ALTER SYSTEM SET google_columnar_engine.storage_cache_size = STORAGE_CACHE_SIZE;
    

    Sustituye STORAGE_CACHE_SIZE por el tamaño de la caché de almacenamiento que quieras, en megabytes. De forma predeterminada, se asigna un 5% de la caché de disco al motor columnar. El valor máximo permitido de esta marca es el 50% de la caché de disco total o 1000 * google_columnar_engine.memory_size_in_mb (el valor 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 añadir 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: "15.7.0"
  primarySpec:
    features:
      columnarSpillToDisk:
        cacheSize: STORAGE_CACHE_SIZE
      ultraFastCache:
        cacheSize: ULTRAFAST_CACHE_SIZE
        genericVolume:
          storageClass: "STORAGE_CLASS_NAME"
...

Haz los cambios siguientes:

  • CLUSTER_NAME: 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.
  • STORAGE_CACHE_SIZE: tamaño de la caché de almacenamiento en columnas (por ejemplo, 5Gi). Si no especifica ningún valor para este campo, se asignará de forma predeterminada el 5% de la caché de disco al motor columnar.
  • ULTRAFAST_CACHE_SIZE: el tamaño de la caché (por ejemplo, 100Gi). Debe ser superior a shared_buffers. Este campo es opcional. Si no especifica el valor de este campo, AlloyDB Omni usará todo el espacio que quede 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: el nombre de la clase de almacenamiento del volumen de caché ultrarrápido, por ejemplo, local-storage.

Habilitar la combinación vectorizada

El motor en 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 planificador de consultas de AlloyDB tiene la opción de aplicar el operador de unión vectorizada en lugar del operador de unión de hash estándar de PostgreSQL. El planificador toma esta decisión comparando el coste de ejecutar la consulta con cada método.

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

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

ALTER SYSTEM SET google_columnar_engine.enable_vectorized_join = 'on';

AlloyDB Omni asigna un subproceso a la función de unión vectorizada de forma predeterminada. Puedes aumentar el número de hilos disponibles para esta función asignando un valor mayor a la marca google_columnar_engine.vectorized_join_threads. El valor máximo es cpu_count * 2.

Actualizar manualmente el motor de columnas

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

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

SELECT google_columnar_engine_refresh(relation =>'TABLE_NAME');

Sustituye TABLE_NAME por el nombre de la tabla o de la vista materializada que quieras actualizar manualmente.

Inhabilitar el motor columnar

Para inhabilitar el motor columnar en una instancia, asigna el valor off a la marca google_columnar_engine.enabled.

Los pasos que sigas para definir 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 definir el google_columnar_engine.enabled en off, sigue estos pasos:

  1. Ejecuta el ALTER SYSTEM comando 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

Sustituye CONTAINER_NAME por el nombre que asignaste al contenedor de AlloyDB Omni al instalarlo.

Podman

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

  sudo podman restart CONTAINER_NAME

Sustituye CONTAINER_NAME por el nombre que asignaste al contenedor de AlloyDB Omni al instalarlo.

Kubernetes

Para asignar el valor off a la marca google_columnar_engine.enabled, modifica el manifiesto del clúster de base de datos para añadir el atributo parameters a la sección primarySpec:

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

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

Solucionar problemas del motor en columnas

Corregir el error insufficient shared memory

Si ejecutas AlloyDB Omni sin suficiente memoria compartida para que la use el motor de columnas, es posible que veas este error:

Insufficient shared memory for generating the columnar formats.

Para solucionar este problema, especifica la cantidad de memoria compartida que está disponible para el contenedor de AlloyDB Omni. La forma de hacerlo varía en función del sistema operativo del host.

Linux

Aumenta el tamaño de la partición /dev/shm de tu máquina host con una técnica como la edición del archivo /etc/fstab.

macOS

Instala un nuevo contenedor AlloyDB Omni especificando un valor de memoria compartida mayor para la marca --shm-size.

Corregir el problema de que no se rellenan las columnas

Si las columnas no se rellenan en el motor columnar, puede que se cumpla una de las siguientes condiciones:

  • Las columnas que quiere añadir incluyen un tipo de datos no admitido.

  • No se cumplen los requisitos del motor en columnas.

Para solucionar este problema, prueba lo siguiente:

  • Confirma que las tablas o las vistas materializadas de la consulta estén en el motor de columnas.
  • Verifica el uso del motor de columnas con la instrucción EXPLAIN.

Siguientes pasos