Acerca del motor de columnas de AlloyDB

En esta página, se proporciona una descripción general del motor columnar que ofrece AlloyDB para PostgreSQL y se muestra cómo usarlo.

El motor de columnas de AlloyDB acelera el procesamiento de consulta en SQL de análisis, uniones y agregaciones, ya que proporciona los siguientes componentes:

  • Es un almacén de columnas que contiene datos de tablas y vistas materializadas para las columnas seleccionadas, reorganizados en un formato orientado a columnas.

  • Un motor de ejecución y un planificador de consultas columnar para admitir el uso del almacén de columnas en las consultas

El motor columnar se puede usar en la instancia principal, en una instancia de grupo de lectura o en ambas. También puedes usar la conversión automática en columnas para analizar tu carga de trabajo y completar automáticamente el almacén de columnas con las columnas que proporcionan la mejor ganancia de rendimiento.

Para usar el motor columnar con una consulta específica, todas las columnas de los fragmentos de esa consulta, como las uniones y los análisis, deben estar en el almacén de columnas.

De forma predeterminada, el motor columnar está configurado para usar el 30% de la memoria de tu instancia. Según tu carga de trabajo, el uso de memoria y si tienes configurado un grupo de lectura, puedes optar por reducir la asignación de memoria del motor columnar en tu instancia principal y asignar más memoria a la instancia del grupo de lectura. Para ver y supervisar el uso de memoria del motor columnar, consulta Cómo ver el uso de memoria del almacén de columnas. Para modificar el tamaño de la memoria que usa el almacén de columnas, consulta Cómo configurar el tamaño del almacén de columnas. Para encontrar el tamaño de memoria recomendado del motor de columnas para tu instancia, consulta Cómo recomendar el tamaño de la memoria del almacén de columnas.

Tipos de consultas que se benefician del motor de columnas

Algunas consultas pueden beneficiarse del motor de columnas. A continuación, se incluye una lista de las operaciones y sus patrones de consultas que se benefician más del motor columnar:

  • Análisis de tablas

    • Tiene filtros selectivos, como las cláusulas WHERE.
    • Usa una pequeña cantidad de columnas de una tabla o vista materializada más grande.
    • Utiliza expresiones como LIKE, SUBSTR o `TRIM`.
  • Funciones de agregación

    • Solo usan las siguientes expresiones: SUM, MIN, MAX, AVG y COUNT.
    • Se encuentran al comienzo de la búsqueda de un análisis columnar.
    • No están agrupadas o son columnas de agrupación.
  • ORDER-BY y SORT: Solo cuando ORDER-BY o SORT se encuentran en los resultados de la búsqueda de las columnas a las que se accede desde el motor columnar.

  • LIMIT: Solo si el operador está al principio de la búsqueda de una columna y antes de cualquier operador SORT o GROUP BY.

  • INNER HASH JOIN solo si las claves utilizadas son columnas y no se usan calificadores de unión.

  • Uniones selectivas solo si las uniones se encuentran al comienzo de la consulta de un análisis columnar.

Para obtener más información sobre qué consultas funcionan mejor con el motor de columnas, si una consulta usó el motor de columnas y cómo lo usó, consulta Verifica el uso del motor de columnas con EXPLAIN.

Cómo usar el motor de columnas

Para usar el motor de columnas en una instancia de AlloyDB, sigue estos pasos generales:

  1. Habilita el motor en la instancia.

    Habilitar el motor es una operación única que requiere un reinicio.

  2. Agrega columnas al almacén de columnas.

    Para agregar columnas al almacén de columnas, usa uno de los siguientes métodos:

  3. Puedes hacer un seguimiento de lo que hay en el almacén de columnas con la vista g_columnar_relations y, después de agregar columnas, puedes usar la instrucción EXPLAIN para verificar el uso del motor columnar en las consultas de SQL.

Para obtener instrucciones detalladas sobre cómo usar el motor de columnas, consulta Configura el motor de columnas.

Qué datos puedes agregar al almacén de columnas

Existen algunas limitaciones en los tipos de datos y las fuentes de datos que puedes usar cuando agregas columnas al almacén de columnas.

Tipos de datos admitidos

El motor columnar solo admite columnas con los siguientes tipos de datos integrados:

  • array
  • bigint
  • boolean
  • bytea
  • char
  • date
  • decimal
  • double precision
  • enum
  • float4
  • float8
  • integer
  • json
  • jsonb
  • numeric
  • real
  • serial
  • short
  • smallint
  • text
  • timestamp
  • timestamptz
  • uuid
  • varchar
  • vector (vista previa)

El motor de columnas ignora cualquier intento de agregar manualmente columnas con tipos de datos no admitidos al almacén de columnas.

Fuentes de datos no compatibles

El motor columnar no admite tablas ni vistas materializadas con los siguientes atributos como fuentes de datos:

  • Tablas particionadas que no son hojas

  • Tablas externas

  • Tablas o vistas con menos de 5,000 filas

Limitaciones del motor de columnas

  • Si ejecutas una consulta analítica en una columna que tiene un índice, el optimizador de AlloyDB puede optar por usar el almacén de filas.
  • Las columnas que se agregan manualmente al almacén de columnas no se quitan automáticamente. Para forzar la eliminación de las columnas agregadas manualmente, usa google_columnar_engine_drop() en tu instancia.
  • La columnarización automática puede agregar y quitar columnas de forma dinámica según el uso de las consultas.
  • El motor columnar no admite todos los tipos de datos. Para ver los tipos de datos admitidos, consulta Tipos de datos admitidos.
  • Las actualizaciones frecuentes de las filas invalidan los datos de las columnas. Para validar una tabla o una vista materializada en el almacén columnar, puedes reducir la frecuencia de actualización o programar actualizaciones más frecuentes del motor columnar.

    Puedes comparar las columnas invalid_block_count y total_block_count en g_columnar_relations para verificar si tu tabla o vista se ven afectadas. Si realizas cambios frecuentes o de gran volumen en tu tabla o vista, el valor de invalid_block_count será alto.

¿Qué sigue?