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.

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

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.

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

Configurar la caché de almacenamiento

Un solo servidor

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

Dispositivos especializados

En los dispositivos dedicados, para habilitar la caché de almacenamiento del motor de columnas de AlloyDB Omni en un contenedor de un solo servidor, debes aprovisionar discos y crear un sistema de archivos. A continuación, monta el directorio de caché en AlloyDB Omni y, por último, habilita la caché de almacenamiento de columnas.

Aprovisionar discos y crear un sistema de archivos

Para aprovisionar discos y crear un sistema de archivos para la caché de almacenamiento del motor columnar de AlloyDB Omni, crea un sistema de archivos en un disco o en varios y móntalo en 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 SSDs 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}

    Haz los cambios siguientes:

    • STORAGE_PREFIX: prefijo de la ruta de los discos locales de destino que están conectados a una máquina virtual mediante la interfaz Non-Volatile Memory Express (NVMe). Por ejemplo, en Google Cloud, las rutas de los dispositivos NVMe siempre empiezan por /dev/nvme0n.
    • VOLUME_GROUP: nombre de un grupo de volúmenes en el que se combinan tus SSDs. 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

    Sustituye LOGICAL_VOLUME por el nombre de un volumen lógico que el 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 montaje en la máquina host y montar 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

    Sustituye OMNI_COLUMNAR_STORAGE_CACHE_DIRECTORY por el nombre del directorio o la ruta al directorio que sirve como punto de montaje (por ejemplo, omni_columnar_storage_cache_directory).

Montar el directorio de caché de almacenamiento en columnas en AlloyDB Omni

Antes de habilitar la caché de disco en AlloyDB Omni que se ejecuta en un contenedor, debes montar el directorio de caché en AlloyDB Omni.

Para obtener información sobre cómo instalar AlloyDB Omni desde una imagen de Docker y personalizarlo, consulta Personalizar la instalación de AlloyDB Omni.

Para montar el OMNI_COLUMNAR_STORAGE_CACHE_DIRECTORY en el 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

Haz los cambios siguientes:

  • CONTAINER_NAME: el nombre que se asignará al nuevo contenedor de AlloyDB Omni. Por ejemplo, my-omni.
  • PASSWORD: la contraseña del administrador raíz de tu base de datos PostgreSQL.
  • DATA_DIR: la ruta del sistema de archivos que quieres que AlloyDB Omni use para su directorio de datos.
  • CACHE_DIRECTORY_PATH_INSIDE_CONTAINER: el directorio de caché del contenedor de AlloyDB Omni que se asigna al punto de montaje de la máquina host. Por ejemplo, en función del valor del directorio de caché del contenedor, puede ser /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

Haz los cambios siguientes:

  • CONTAINER_NAME: el nombre que se asignará al nuevo contenedor de AlloyDB Omni. Por ejemplo, my-omni.
  • PASSWORD: la contraseña del administrador raíz de tu base de datos PostgreSQL.
  • CACHE_DIRECTORY_PATH_INSIDE_CONTAINER: el directorio de caché del contenedor de AlloyDB Omni que se asigna al punto de montaje de la máquina host. Por ejemplo, en función del valor del directorio de caché del contenedor, puede ser /omni_columnar_storage_cache_directory, similar a OMNI_COLUMNAR_STORAGE_CACHE_DIRECTORY, o /disk/cache/inside/container.

Para conceder permisos de acceso completo al OMNI_COLUMNAR_STORAGE_CACHE_DIRECTORY montado, 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
  

Habilitar 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, define los parámetros de configuración unificada general (GUC) adecuados después de asegurarte de que se puede acceder al directorio de caché montado desde el contenedor Docker.

  1. Define el directorio de la caché de almacenamiento en columnas:

    ALTER SYSTEM SET google_columnar_engine.omni_storage_cache_directory = OMNI_COLUMNAR_STORAGE_CACHE_DIRECTORY;
    

    Sustituye OMNI_COLUMNAR_STORAGE_CACHE_DIRECTORY por la ruta absoluta al directorio dedicado en el que quieras que AlloyDB Omni almacene los archivos de caché de almacenamiento del motor columnar. Asegúrate de 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;
    

    Sustituye STORAGE_CACHE_SIZE por el tamaño de la caché de almacenamiento en columnas que quieras (en megabytes). De forma predeterminada, se asigna todo el tamaño del dispositivo dedicado al motor columnar, sin que esto afecte a la caché de disco. El valor máximo permitido de esta marca es 1000 * google_columnar_engine.memory_size_in_mb, o el valor mínimo.

  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;
    

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

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 de palomares en una instancia, asigna el valor off a la marca google_columnar_engine.enabled.

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.

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