El optimizador estima los costos de ejecución con base en estadísticas y datos de muestreo. Cuando esas estimaciones se desvían significativamente de los valores reales de tiempo de ejecución, el optimizador puede elegir un plan de ejecución subóptimo. El cambio adaptativo de planes de ejecución detecta esta divergencia en tiempo de ejecución y cambia automáticamente a un mejor plan, sin requerir intervención manual.
Se admiten dos modos compatibles:
Enrutamiento adaptativo de filas y columnas: redirige las consultas lentas de los nodos de almacenamiento de filas a los nodos de almacenamiento de columnas (IMCI) cuando el volumen real de escaneo supera el umbral estimado.
Selección adaptativa de índices ordenados: cuando las filas reales recorridas en un índice ordenado seleccionado por la optimización
prefer_ordering_indexsuperan el umbral, el sistema cambia la ejecución al almacenamiento de columnas y evita una sobrecarga innecesaria de E/S y CPU.
Cómo funciona
Ambos modos siguen el mismo mecanismo de tres fases:
Fase de optimización: el optimizador marca los umbrales de recuento de filas para cada bloque de consulta y para la consulta completa, y luego los agrega a los metadatos de monitoreo. Si el optimizador no selecciona IMCI, o selecciona un índice ordenado debido a
prefer_ordering_index, calcula el umbral para desencadenar un cambio de plan.Fase de ejecución: mientras se ejecuta la consulta, la base de datos rastrea las filas recorridas en la ruta crítica, únicamente con comparaciones de enteros y sin sobrecarga de rendimiento. Cuando el recuento de filas recorridas alcanza el umbral, el sistema evalúa si cambiar a un plan alternativo.
Cambio de plan: antes de cambiar, la base de datos garantiza que no se hayan devuelto resultados parciales al cliente. Después del cambio, borra los resultados intermedios almacenados en caché y continúa la ejecución con el nuevo plan.
Para los clústeres que ejecutan la versión 8.0.1.1.49 o posterior (o la versión 8.0.2.2.29 o posterior), el umbral para el enrutamiento adaptativo de filas y columnas se controla mediante loose_adaptive_cost_threshold_for_imci. Para versiones anteriores, se deriva de loose_cost_threshold_for_imci.
A continuación se ilustra el flujo del enrutamiento adaptativo de filas y columnas.
Requisitos previos
Antes de habilitar el cambio adaptativo de planes de ejecución, asegúrese de que su clúster cumple con los requisitos de versión para el modo que desea usar.
Enrutamiento adaptativo de filas y columnas (imci_chosen=on):
PolarDB for MySQL 8.0.1, versión de revisión 8.0.1.1.39 o posterior
PolarDB for MySQL 8.0.2, versión de revisión 8.0.2.2.29 o posterior
Selección adaptativa de índices ordenados (ordering_index=on):
PolarDB for MySQL 8.0.1, versión de revisión 8.0.1.1.47 o posterior
PolarDB for MySQL 8.0.2, versión de revisión 8.0.2.2.29 o posterior
Habilite o deshabilite el cambio adaptativo de planes de ejecución
Inicie sesión en la consola de PolarDB y vaya a la página Parameters de su clúster. Para conocer los pasos de configuración, consulte Configure los parámetros de clúster y nodo.
Establezca loose_adaptive_plans_switch en uno de los valores que se muestran a continuación:
'imci_chosen=on'— habilita el enrutamiento adaptativo de filas y columnas'ordering_index=on'— habilita la selección adaptativa de índices ordenados'imci_chosen=on,ordering_index=on'— habilita ambos modosEstablezca cualquiera de las subclaves en
'off'para deshabilitar el modo correspondiente
A continuación se describen todos los parámetros configurables.
|
Parámetro |
Ámbito |
Descripción |
Versión mínima |
|
|
Global/Sesión |
Controla qué modos de cambio adaptativo están activos. Subclaves: |
8.0.1.1.39 (imci_chosen) / 8.0.1.1.47 (ordering_index) |
|
|
Global/Sesión |
Umbral de costo para desencadenar el enrutamiento adaptativo de filas y columnas. Valores válidos: 1–18,446,744,073,709,551,615. Valor predeterminado: |
8.0.1.1.49 o 8.0.2.2.29 |
|
|
Global/Sesión |
Tiempo máximo de ejecución (ms) para que una consulta sea elegible para el cambio adaptativo de planes. Si una consulta se ejecuta durante más tiempo que este valor antes de alcanzar el umbral de filas, no se produce ningún cambio de plan. Valores válidos: 0–1,800,000. Valor predeterminado: |
— |
|
|
Global/Sesión |
Punto de control de escaneo de filas para la selección adaptativa de índices ordenados. Un valor más bajo provoca comprobaciones más frecuentes y cambios más tempranos. Valores válidos: 0–4,294,967,295. Valor predeterminado: |
— |
Por qué las soluciones predeterminadas son insuficientes
Antes de que el cambio adaptativo de planes de ejecución estuviera disponible, abordar consultas mal enrutadas o una selección deficiente de índices requería uno de los dos enfoques manuales siguientes:
Reducir el umbral de costo del almacenamiento de columnas de forma global: esto dirige más consultas a los nodos de almacenamiento de columnas, pero también envía consultas cortas y ligeras a IMCI, lo que aumenta la carga en los nodos de almacenamiento de columnas y puede bloquear otras cargas de trabajo.
-
Utilizar statement outline para corregir plantillas de consulta específicas: la función statement outline puede forzar que una consulta específica use el almacenamiento de columnas o deshabilitar
prefer_ordering_index:-- Force a query to use column store CALL dbms_outln.add_optimizer_outline("<schema_name>", "/*+ SET_VAR(cost_threshold_for_imci=0) SET_VAR(imci_ap_threshold=0) */", "<query>"); -- Disable prefer_ordering_index for a specific query template CALL dbms_outln.add_optimizer_outline("<schema_name>", "/*+ SET_VAR(optimizer_switch='prefer_ordering_index=off') */", "<query>");Este enfoque es preciso, pero agrega costos operativos significativos: cada plantilla de consulta problemática debe identificarse y administrarse individualmente.
El cambio adaptativo de planes de ejecución aborda ambos problemas automáticamente: cambia de plan solo cuando los datos reales de tiempo de ejecución confirman que la estimación del optimizador era incorrecta, y no afecta las consultas estimadas correctamente.
Cuándo usar cada enfoque: utilice loose_adaptive_plans_switch (automático) como valor predeterminado; no requiere configuración por consulta y responde a la evidencia en tiempo de ejecución. Utilice statement outline (manual) cuando necesite un comportamiento determinista para una plantilla de consulta específica, independientemente de las estadísticas de tiempo de ejecución.
Compruebe la actividad de cambio adaptativo
Ejecute la instrucción que se muestra a continuación para comprobar el número total de cambios de plan adaptativos desde que se habilitó la función:
SHOW GLOBAL STATUS LIKE 'Adaptive_plan_used';
|
Variable |
Ámbito |
Descripción |
|
|
Global |
Número total de cambios de plan adaptativos realizados desde que se habilitó la función. |