Configura el motor de columnas en AlloyDB Omni

En esta página, se describe cómo habilitar o inhabilitar el motor de columnas en un clúster de bases 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 de columnas en una instancia, establece la marca google_columnar_engine.enabled de la instancia en on.

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

Servidor único

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 de columnas, sigue las instrucciones de la siguiente sección antes de reiniciar el servidor de bases de datos. De lo contrario, completa el siguiente paso para reiniciar el servidor de base de datos ahora.

  3. Para que se aplique el cambio de los parámetros de configuración, 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 bases 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: "15.7.0"
      primarySpec:
        parameters:
          google_columnar_engine.enabled: "on"

Reemplaza CLUSTER_NAME por el nombre del clúster de bases de datos. Es el mismo nombre de clúster de 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. Si dedicas RAM de alta velocidad a tu almacén de columnas, se garantiza que AlloyDB Omni pueda acceder a los datos de columnas lo más rápido posible.

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

Configura 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 usas para configurar la memoria del almacén de columnas de AlloyDB Omni dependen de si ejecutas AlloyDB Omni en un contenedor o en un clúster de Kubernetes.

Servidor único

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

  1. Ejecuta el comando ALTER SYSTEM de PostgreSQL para configurar la memoria:

    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 se aplique el cambio de los parámetros de configuración, 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: "15.7.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 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.

Configura la caché de almacenamiento

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

Los pasos que debes seguir para habilitar la caché de almacenamiento de AlloyDB Omni dependen de si ejecutas AlloyDB Omni en un contenedor o en un clúster de Kubernetes.

Servidor único

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

    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 deseas, en megabytes. De forma predeterminada, el 5% de la caché en disco se asigna al motor de columnas. 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, lo que sea menor.

  2. Para que se aplique el cambio de los parámetros de configuración, 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 para 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: "15.7.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 bases de datos. Es el mismo nombre de clúster de base de datos que declaraste cuando lo creaste.
  • STORAGE_CACHE_SIZE: Es el tamaño de la caché de almacenamiento en columnas, por ejemplo, 5Gi. Si no especificas un valor para este campo, el 5% de la caché de disco se asigna al motor de columnas 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 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. 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ápida, 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 que cumplen con los requisitos.

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 hash estándar de PostgreSQL. Para tomar esta decisión, el planificador compara 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';

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

Actualiza manualmente el motor de columnas

De forma predeterminada, cuando se habilita el motor de columnas, se 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');

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

Servidor único

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 se aplique el cambio de los parámetros de configuración, 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 bases 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: "15.7.0"
    primarySpec:
      parameters:
        google_columnar_engine.enabled: "off"

Reemplaza CLUSTER_NAME por el nombre del clúster de bases de datos. Es el mismo nombre de clúster de base de datos que declaraste cuando lo creaste.

Soluciona problemas relacionados con el motor de columnas

Soluciona el error insufficient shared memory

Si ejecutas AlloyDB Omni sin suficiente memoria compartida para que el motor de columnas la use, 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 difiere según el sistema operativo del host.

Linux

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

macOS

Instala un nuevo contenedor de AlloyDB Omni y especifica un valor de memoria compartida más grande para la marca --shm-size.

Se corrigió el problema por el que no se propagaban las columnas

Si las columnas no se propagan en el motor de columnas, es posible que se cumpla una de las siguientes afirmaciones:

  • Las columnas que deseas agregar incluyen un tipo de datos no admitido.

  • No se cumplen los requisitos del motor de columnas.

Para solucionar este problema, prueba lo siguiente:

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

¿Qué sigue?