Todos los productos
Search
Centro de documentos

PolarDB:Automatic IMCI-based query acceleration (AutoIndex)

Última actualización: Oct 10, 2026

PolarDB for MySQL proporciona aceleración automática de consultas mediante el índice de almacenamiento en columnas (IMCI). Esta función mejora el rendimiento de las sentencias SQL lentas sin intervención manual.

Descripción general

La tecnología de índices de almacenamiento en columnas (IMCI) de PolarDB for MySQL está diseñada para consultas complejas sobre grandes volúmenes de datos en escenarios OLAP. Con estos índices, PolarDB for MySQL integra el procesamiento transaccional y el análisis de datos en tiempo real como una solución unificada de base de datos HTAP (procesamiento híbrido transaccional y analítico).

image

De forma tradicional, para acelerar las tablas involucradas en consultas lentas se requiere usar manualmente CREATE TABLE o ALTER TABLE y agregar COLUMNAR=1 al campo COMMENT de la tabla. Así se crea un índice de almacenamiento en columnas. Este enfoque manual resulta ineficiente cuando existen muchas plantillas SQL con lógica compleja.

La aceleración automática de consultas basada en IMCI (AutoIndex) agrega índices de almacenamiento en columnas a las tablas objetivo a partir de las consultas lentas. De este modo, acelera las consultas sin intervención manual.

Contexto técnico

AutoIndex es una técnica que optimiza el rendimiento de SQL mediante la creación automática de índices. Los índices de almacenamiento en filas cuentan con amplia investigación e implementación comercial, por ejemplo, en Oracle y SQL Server. Estos sistemas analizan los índices secundarios que podrían requerirse según los predicados, las cláusulas ORDER BY o las uniones (JOIN). Después recalculan el costo de la consulta asumiendo la creación de dicho índice y generan aquellos que reducen significativamente ese costo.

En el ámbito de los índices de almacenamiento en columnas, sistemas como Redshift, Snowflake, Databricks y Heatwave han adoptado AutoIndex. Los métodos de automatización más comunes incluyen:

  • Carga y descarga automáticas: crea índices de almacenamiento en columnas de forma automática y acelera las consultas lentas según su ejecución. También elimina los índices poco utilizados o que consumen demasiados recursos para reducir el consumo de almacenamiento.

  • Codificación automática: selecciona automáticamente el algoritmo de codificación óptimo según la distribución de datos de cada columna para comprimir aún más el almacenamiento.

  • Selección automática de Distribute Key: equilibra la distribución de datos en escenarios MPP, reduce el sesgo de datos y optimiza la redistribución (shuffling) en operaciones GROUP BY y JOIN distribuidas.

  • Selección automática de Sort Key: utiliza predicados, columnas de unión o columnas de ordenamiento frecuentes para acelerar el filtrado o la clasificación de consultas.

En IMCI, crear un índice de almacenamiento en columnas de forma automática tiene un costo menor y mayor tolerancia a fallos que crear uno de filas. Esto se debe a lo siguiente:

  • Menor impacto en las escrituras: un exceso de índices de almacenamiento en filas afecta significativamente el rendimiento de escritura en el nodo principal. En cambio, IMCI no materializa los datos de columnas en dicho nodo. Al agregar un índice de almacenamiento en columnas, las operaciones de escritura solo necesitan sincronizarse al nodo de solo lectura de índice de columnas mediante Redo, lo cual casi no impacta el rendimiento de escritura.

  • Mayor tasa de compresión: los índices de almacenamiento en columnas suelen alcanzar una tasa de compresión de 3x a 5x, por lo que la sobrecarga de almacenamiento de los nuevos índices es relativamente baja.

  • Impacto limitado en las operaciones del negocio: las estructuras de datos eficientes y sin bloqueos recopilan información de SQL Trace, mientras que Nonblock DDL (DDL sin bloqueo) reduce las interrupciones en las operaciones comerciales.

Funcionamiento

Seguimiento de consultas lentas y generación de sentencias DDL

Cada nodo del clúster usa SQL Trace para recopilar consultas lentas y genera automáticamente sentencias DDL que crean índices de almacenamiento en columnas para las sentencias SQL que cumplen los requisitos. El proceso es el siguiente:

  1. SQL Trace: utiliza plantillas SQL como claves y la tabla hash oficial de MySQL sin bloqueo para rastrear y registrar la información de ejecución de SQL. Este diseño es adecuado para escenarios de alta concurrencia con gran cantidad de plantillas SQL. En pruebas de Sysbench, SQL Trace afecta el rendimiento de la base de datos en no más del 3 %.

  2. Condición de activación: cuando el número de filas escaneadas por una consulta lenta alcanza el umbral configurado (100 000 filas de manera predeterminada), AutoIndex genera una sentencia DDL para agregar un índice de almacenamiento en columnas a la tabla correspondiente.

  3. Diseño de baja sobrecarga: para evitar analizar repetidamente sentencias SQL, abrir tablas y obtener bloqueos MDL, AutoIndex usa directamente la lista de tablas almacenada en caché del THD (Thread Handler). Esto prácticamente no añade sobrecarga al sistema.

Para consultar la información de las consultas lentas rastreadas que ya tienen sentencias DDL generadas, conéctese directamente a cada nodo y consulte la tabla del sistema information_schema.imci_autoindex. Por ejemplo:

SELECT * FROM information_schema.imci_autoindex

Combine esta tabla con information_schema.sql_sharing para obtener información más detallada sobre la ejecución de SQL:

SELECT *
FROM information_schema.imci_autoindex autoindex, information_schema.sql_sharing share
WHERE autoindex.sql_id = share.sql_id
  AND share.type = 'SQL'

Recopilación y agregación de consultas lentas, y ejecución de DDL

El nodo de solo lectura de índice de columnas del clúster recopila y agrega las consultas lentas con recomendaciones de índices de almacenamiento en columnas provenientes de todos los nodos. Si existen varios nodos de este tipo, uno de ellos actúa como líder. Este nodo ordena las recomendaciones por tiempo de ejecución en orden descendente y ejecuta las sentencias DDL sugeridas de forma secuencial hasta alcanzar el límite de ejecución de DDL por ronda.

  • Instant DDL

    Agregar un índice de almacenamiento en columnas en el nodo principal es una operación de Instant DDL. Solo modifica el diccionario de datos y no realiza cambios reales en la base de datos principal. El registro Redo se replica al nodo de solo lectura de índice de columnas, el cual construye el índice en segundo plano.

  • Nonblock DDL (DDL sin bloqueo)

    Un DDL estándar bloquea las nuevas transacciones mientras espera obtener un bloqueo MDL-X. Si Nonblock DDL no logra obtenerlo, primero permite que las nuevas transacciones continúen y luego reintenta la obtención del bloqueo de forma continua. En escenarios de AutoIndex, el DDL no es una operación urgente. Si falla en la ronda actual, se puede reintentar en la siguiente ronda de programación automática.

    Consulte la tabla del sistema information_schema.imci_autoindex_executed desde el endpoint del clúster para ver las sentencias de recomendación de índices de almacenamiento en columnas ejecutadas recientemente y sus consultas lentas asociadas. Se conservan hasta 128 registros.

  • Límites de programación y ejecución

    • De manera predeterminada, el intervalo entre rondas es de 1 minuto y se pueden ejecutar como máximo 5 sentencias DDL en cada ronda.

    • Los índices de almacenamiento en columnas no procesados en la ronda actual se reintentan únicamente cuando consultas lentas posteriores vuelven a requerirlos.

    • La gobernanza de recursos se aplica cuando el nodo de solo lectura de índice de columnas construye los índices. Las métricas de recursos aumentan, pero los recursos del nodo no se saturan.

    • La siguiente ronda se programa solo después de que los índices de almacenamiento en columnas de la ronda actual se hayan construido en el nodo de solo lectura de índice de columnas.

Activación y uso del índice de almacenamiento en columnas

Para aprovechar al máximo AutoIndex, vincule el nodo de solo lectura de índice de columnas al endpoint del clúster y habilite la distribución automática de solicitudes entre los nodos de almacenamiento en filas y en columnas. Durante la reproducción del tráfico real del servicio, las consultas lentas activan AutoIndex para crear índices de almacenamiento en columnas. Una vez que el nodo de solo lectura termina de construirlos, el mecanismo de distribución automática enruta las consultas correspondientes hacia ese nodo según el costo de la consulta, lo cual las acelera.

Si el tráfico del servicio se conecta directamente a un nodo de solo lectura normal, cambie manualmente el tráfico al nodo de solo lectura de índice de columnas después de crear el índice. Para obtener información sobre las consultas de estado de los índices de almacenamiento en columnas y las políticas de distribución de solicitudes, consulte IMCI FAQ.

Resultados de las pruebas

El siguiente ejemplo se basa en el conjunto de pruebas TPC-H de 100 GB.

Nota

La implementación de TPC-H en este tema se basa en las pruebas de referencia de TPC-H. Estos resultados no se pueden comparar con los resultados oficiales publicados de TPC-H porque las pruebas no cumplen completamente con todos los requisitos de TPC-H.

  • Configuración del entorno: ejecute las 22 consultas de prueba de TPC-H una vez por minuto. Habilite HTAP Optimization (Transactional/Analytical Processing Splitting) para el endpoint del clúster y establezca el grado de paralelismo del almacenamiento en filas en 8, principalmente para acortar el tiempo de la prueba.

  • Resultados de la prueba: la siguiente tabla muestra que el rendimiento de las consultas mejora considerablemente en las rondas posteriores. Durante la última parte de la primera ronda, aproximadamente a partir de la duodécima consulta, AutoIndex ya había creado índices de almacenamiento en columnas para la mayoría de las tablas y el optimizador enruto automáticamente esas consultas al nodo de solo lectura de índice de columnas.

Ronda de ejecución

Tiempo total (s)

Planes de almacenamiento en filas/planes de almacenamiento en columnas

Mejora de rendimiento

1

8293

10/12

-

2

118

1/21

Aprox. 70x

3

110

0/22

Aprox. 75x

Beneficios

Los índices de almacenamiento en columnas ofrecen diversos beneficios, con mejoras significativas en compatibilidad, rendimiento y costos:

  • Compatibilidad total con MySQL: admite todos los tipos de datos de MySQL y es completamente compatible con el protocolo de MySQL.

  • Excelente rendimiento HTAP: por lo general, mejora el rendimiento en escenarios analíticos entre uno y dos órdenes de magnitud.

  • Almacenamiento híbrido de filas y columnas con menor costo: garantiza la consistencia transaccional mediante almacenamiento híbrido. Además, los índices de almacenamiento en columnas ofrecen mejor rendimiento a menor costo en ciertos escenarios de consulta.

  • Aceleración automática sencilla: permite habilitar la aceleración automática del rendimiento con un solo clic, sin configuraciones ni ajustes complejos.

  • Reducción de la carga operativa: crea automáticamente índices de almacenamiento en columnas para las consultas lentas, lo que disminuye el trabajo manual de optimización.

  • Reducción de costos de TI: optimiza únicamente las consultas lentas en lugar de crear índices de almacenamiento en columnas para todas las bases de datos y tablas. Esto ahorra recursos de memoria y almacenamiento.

Versiones compatibles

  • Los clústeres de **Enterprise Edition** deben cumplir con las siguientes condiciones:

    • Series: Cluster Edition.

    • Versión del motor de base de datos:

      • MySQL 8.0.1, y la versión secundaria del motor debe ser 8.0.1.1.45.2 o posterior.

      • MySQL 8.0.2, y la versión secundaria del motor debe ser 8.0.2.2.27 o posterior.

  • Los clústeres de **Standard Edition** deben cumplir con las siguientes condiciones:

    • CPU architecture: x86.

    • Versión del motor de base de datos: MySQL 8.0.1, y la versión secundaria del motor debe ser 8.0.1.1.45.2 o posterior.

Nota

Para consultar la versión del clúster, consulte Query the engine version.

Notas de uso

  • Los clústeres Multi-master Cluster (Limitless) EditionSeries y Serverless no admiten la aceleración automática de consultas basada en IMCI.

  • Después de habilitar la aceleración automática de consultas basada en IMCI:

    • Los cargos por los nodos de solo lectura de índice de columnas agregados siguen las reglas de billing de los nodos de cómputo normales.

    • El sistema crea automáticamente índices de almacenamiento en columnas a partir de sus sentencias SQL lentas (los datos de estos índices ocupan espacio de almacenamiento).

    • El sistema utiliza la función SQL Trace para registrar el historial de ejecución de las sentencias SQL lentas. En la mayoría de los casos, esto consume no más del 3 % del rendimiento del nodo de base de datos.

  • La aceleración automática de consultas basada en IMCI usa internamente Nonblock DDL para agregar índices de almacenamiento en columnas. Nonblock DDL permite que las nuevas transacciones accedan a la tabla objetivo incluso cuando no se puede obtener un bloqueo MDL-X, lo que mantiene estable todo el sistema empresarial. Para obtener más información, consulte Nonblocking DDL statements.

Habilitar la aceleración automática de consultas basada en IMCI

  1. Inicie sesión en la consola de PolarDB. En el panel de navegación izquierdo, haga clic en Clusters. Seleccione la Region donde se despliega el clúster y luego haga clic en el ID del clúster para ir a la página de detalles.

  2. En la página Basic Information, busque el campo Automatic IMCI-based Query Acceleration y haga clic en Enable.

  3. Los pasos siguientes varían según si el clúster actual cuenta con un nodo de solo lectura de índice de columnas:

    • Si el clúster actual ya tiene un nodo de solo lectura de índice de columnas, en el cuadro de diálogo Enable Automatic IMCI-based Query Acceleration, haga clic en OK para habilitar la aceleración automática de consultas basada en IMCI.

    • Si el clúster actual no tiene un nodo de solo lectura de índice de columnas, en el cuadro de diálogo Enable Automatic IMCI-based Query Acceleration, haga clic en OK. El sistema lo redirigirá a la página para agregar un nodo de solo lectura de índice de columnas.

      Nota
      • Después de hacer clic en OK, puede Add a read-only IMCI node de inmediato o hacerlo manualmente (Add a read-only IMCI node) más adelante.

      • Una vez habilitada la aceleración automática de consultas basada en IMCI, el clúster actual debe contener como mínimo un nodo de solo lectura de índice de columnas. De lo contrario, aunque Automatic IMCI-based Query Acceleration esté configurado en Enable, el servicio de aceleración no estará disponible.

      • Si habilita la aceleración automática de consultas basada en IMCI pero no ha agregado un nodo de solo lectura de índice de columnas, el sistema usará la función SQL Trace para registrar el historial de ejecución de las sentencias SQL lentas, pero no creará índices de almacenamiento en columnas. Por lo tanto, no se proporcionará el servicio de aceleración.

Deshabilitar la aceleración automática de consultas basada en IMCI

  1. Inicie sesión en la consola de PolarDB. En el panel de navegación izquierdo, haga clic en Clusters. Seleccione la Region donde se despliega el clúster y luego haga clic en el ID del clúster para ir a la página de detalles.

  2. En la página Basic Information, busque el campo Automatic IMCI-based Query Acceleration y haga clic en Close.

  3. En el cuadro de diálogo Disable Automatic IMCI-based Query Acceleration, haga clic en OK para deshabilitar la aceleración automática de consultas basada en IMCI.

Nota

Deshabilitar la aceleración automática de consultas basada en IMCI solo desactiva los parámetros relacionados con esta función. Los nodos de solo lectura de índice de columnas y sus datos se conservan. Si ya no necesita mantener dichos nodos ni los índices de almacenamiento en columnas que contienen, puede delete the read-only columnstore index nodes en la consola o delete columnstore indexes by using SQL statements.