Administración de planes de consultas en Aurora PostgreSQL - Amazon Aurora

Administración de planes de consultas en Aurora PostgreSQL

Con la administración de planes de consultas activada para el clúster de base de datos de Aurora PostgreSQL, el optimizador genera y almacena los planes de ejecución de consultas para cualquier sentencia SQL que procese más de una vez. El optimizador siempre establece el estado del primer plan generado de una instrucción administrada en Approved y lo almacena en la vista dba_plans.

Un conjunto de planes aprobados para una instrucción administrada se denomina base de referencia del plan. A medida que la aplicación se ejecuta, puede que el optimizador encuentre planes adicionales para las instrucciones administradas. El optimizador establece el estado de los planes adicionales capturados en Unapproved.

Posteriormente, podrá decidir si los planes Unapproved rinden apropiadamente y cambiarlos a Approved, Rejected o Preferred. Para ello, utilice la función apg_plan_mgmt.evolve_plan_baselines o la función apg_plan_mgmt.set_plan_status.

Cuando el optimizador genera un plan para una sentencia SQL, la administración de planes de consultas guarda el plan en la tabla apg_plan_mgmt.plans. Los usuarios de la base de datos a los que se les ha otorgado el rol de apg_plan_mgmtpueden ver los detalles del plan consultando la vista apg_plan_mgmt.dba_plans. Por ejemplo, la siguiente consulta muestra detalles de los planes que se encuentran actualmente en la vista para un clúster de base de datos de Aurora PostgreSQL que no es de producción.

  • sql_hash: identificador de la sentencia SQL que es el valor de hash del texto normalizado de la sentencia SQL.

  • plan_hash: identificador único del plan que es una combinación del sql_hash y un hash del plan.

  • status: estado del plan. El optimizador puede ejecutar un plan aprobado.

  • enabled: indica si el plan está listo para usarse (verdadero) o no (falso).

  • plan_outline: representación del plan que se utiliza para recrear el plan de ejecución real. Los operadores de la estructura de árbol se asignan a los operadores de la salida EXPLAIN.

La vista apg_plan_mgmt.dba_plans tiene muchas más columnas que contienen todos los detalles del plan, por ejemplo, cuándo se utilizó el plan por última vez. Para ver todos los detalles, consulte Referencia de la vista apg_plan_mgmt.dba_plans para la edición compatible con Aurora PostgreSQL.

Normalización y el hash SQL

En la vista apg_plan_mgmt.dba_plans, puede identificar una instrucción administrada por su valor hash SQL. El hash SQL se calcula sobre una representación normalizada de la instrucción SQL que elimina algunas diferencias, como los valores literales.

El proceso de normalización de cada instrucción SQL conserva el espacio y las mayúsculas, de modo que puede seguir leyendo y entendiendo la esencia de la instrucción SQL. La normalización elimina o reemplaza los siguientes elementos.

  • Comentarios del bloque principal

  • La palabra clave EXPLAIN y las opciones EXPLAIN y EXPLAIN ANALYZE

  • Espacios finales

  • Todos los literales

Por ejemplo, tomemos la siguiente instrucción.

/*Leading comment*/ EXPLAIN SELECT /* Query 1 */ * FROM t WHERE x > 7 AND y = 1;

La administración de planes de consultas estandariza esta instrucción del siguiente modo:

SELECT /* Query 1 */ * FROM t WHERE x > CONST AND y = CONST;

La normalización permite utilizar el mismo hash SQL para instrucciones SQL similares que pueden diferir únicamente en sus valores literales o de parámetro. En otras palabras, pueden existir varios planes para el mismo hash SQL y un plan diferente que resulte óptimo según diferentes condiciones.

nota

Una sola instrucción SQL que se usa con diferentes esquemas tiene diferentes planes porque está vinculada al esquema específico en tiempo de ejecución. El planificador utiliza las estadísticas de enlace de esquemas para elegir el plan óptimo.

Para obtener más información acerca de cómo el optimizador elige un plan, consulte Uso de los planes administrados de Aurora PostgreSQL. En esa sección, puede aprender a usar EXPLAIN y EXPLAIN ANALYZE para previsualizar un plan antes de usarlo realmente. Para obtener más información, consulte Analizar el plan elegido por el optimizador. Para obtener una imagen que describa el proceso de elección de un plan, consulte Cómo elige el optimizador qué plan ejecutar..