Uso de los planes administrados de Aurora PostgreSQL - Amazon Aurora

Uso de los planes administrados de Aurora PostgreSQL

Para que el optimizador use los planes capturados para sus instrucciones administradas, establezca el parámetro apg_plan_mgmt.use_plan_baselines en true. A continuación figura el ejemplo de una instancia local.

SET apg_plan_mgmt.use_plan_baselines = true;

Mientras se ejecuta la aplicación, esta configuración hace que el optimizador utilice el plan de costo mínimo, preferido o aprobado que sea válido y esté habilitado para cada instrucción administrada.

Analizar el plan elegido por el optimizador

Cuando el parámetro apg_plan_mgmt.use_plan_baselines está establecido en true, puede utilizar instrucciones SQL EXPLAIN ANALYZE para hacer que el optimizador muestre el plan que usaría si fuera a ejecutar la consulta. A continuación, se muestra un ejemplo.

EXPLAIN ANALYZE EXECUTE rangeQuery (1,10000);
QUERY PLAN -------------------------------------------------------------------------- Aggregate (cost=393.29..393.30 rows=1 width=8) (actual time=7.251..7.251 rows=1 loops=1) -> Index Only Scan using t1_pkey on t1 t (cost=0.29..368.29 rows=10000 width=0) (actual time=0.061..4.859 rows=10000 loops=1) Index Cond: ((id >= 1) AND (id <= 10000)) Heap Fetches: 10000 Planning time: 1.408 ms Execution time: 7.291 ms Note: An Approved plan was used instead of the minimum cost plan. SQL Hash: 1984047223, Plan Hash: 512153379

El resultado muestra el plan aprobado a partir de la línea de base que se ejecutaría. Sin embargo, el resultado también muestra que ha encontrado un plan con un coste menor. En ese caso, capture este plan de costo mínimo activando la captura de planes automática, como se describe en Captura de planes automática.

El optimizador siempre captura los nuevos planes como Unapproved. Utilice la función apg_plan_mgmt.evolve_plan_baselines para comparar planes y cambiarlos a aprobado, rechazado o deshabilitado. Para obtener más información, consulte Evaluación del rendimiento de los planes .

Cómo elige el optimizador qué plan ejecutar.

El costo de un plan de ejecución es un cálculo que realiza el optimizador para comparar planes distintos. Al calcular el costo de un plan, el optimizador incluye factores tales como las operaciones de CPU y E/S requeridas por ese plan. Para obtener más información acerca de las estimaciones de costos del planificador de consultas de PostgreSQL, consulte el tema sobre planificación de consultas en la documentación de PostgreSQL.

En la siguiente imagen se muestra cómo se elige un plan para una instrucción SQL determinada cuando la administración de planes de consultas está activa y cuándo no.

Flujo de trabajo de la administración de planes de consultas en Aurora PostgreSQL

El flujo es el siguiente:

  1. El optimizador genera un plan de costo mínimo para la instrucción SQL.

  2. Si la administración de planes de consultas no está activa, el plan del optimizador se ejecuta inmediatamente (A. Run Optimizer's plan [Ejecutar el plan del optimizador]). La administración de planes de consultas está inactiva cuando los parámetros apg_plan_mgmt.capture_plan_baselines y apg_plan_mgmt.use_plan_baselines tienen su configuración predeterminada (“off” y “false”, respectivamente).

    De lo contrario, la administración de planes de consultas estará activa. En este caso, la instrucción SQL y el plan del optimizador se evalúan más a fondo antes de elegir un plan.

    sugerencia

    Los usuarios de bases de datos con el rol apg_plan_mgmt pueden comparar planes de forma proactiva, cambiar el estado de los planes y forzar el uso de planes específicos según sea necesario. Para obtener más información, consulte Mejora de los planes de consultas en Aurora PostgreSQL .

  3. Es posible que la instrucción SQL ya tenga planes almacenados previamente por la administración de planes de consultas. Los planes se almacenan en apg_plan_mgmt.dba_plans, junto con información sobre las instrucciones SQL que se usaron para crearlas. La información sobre un plan incluye su estado. El estado de un plan puede determinar si se usa o no, de la siguiente manera.

    1. Si el plan no está entre los planes almacenados para la instrucción SQL, significa que es la primera vez que el optimizador genera este plan en particular para la instrucción SQL dada. El plan se envía a Capture Plan Processing (Procesamiento del plan de captura) (4).

    2. Si el plan se encuentra entre los planes almacenados y su estado es Aprobado o Preferido, se ejecuta el plan (A. Ejecutar el plan del optimizador).

      Si el plan se encuentra entre los planes almacenados pero no está Aprobado ni es Preferido, el plan se envía a Procesamiento del plan de captura (4).

  4. Cuando se captura un plan por primera vez para una instrucción SQL determinada, el estado del plan siempre se establece en Aprobado (P1). Si el optimizador genera posteriormente el mismo plan para la misma instrucción SQL, el estado de ese plan cambia a No aprobado (P1+n).

    Con el plan capturado y su estado actualizado, la evaluación continúa en el siguiente paso (5).

  5. Una base de referencia de un plan consiste en el historial de la instrucción SQL y sus planes en varios estados. La administración de planes de consultas puede tener en cuenta la base de referencia al elegir un plan, en función de si la opción usar base de referencia del plan está activada o no, de la siguiente manera.

    • Usar base de referencia del plan está “off” (desactivado) cuando apg_plan_mgmt.use_plan_baselines se establece con su valor predeterminado (false). El plan no se compara con la base de referencia antes de ejecutarse (A. Ejecutar el plan del optimizador).

    • Usar la base de referencia del plan está “on” (activado) cuando apg_plan_mgmt.use_plan_baselines se establece con su valor predeterminado (true). El plan se evalúa más a fondo con la base de referencia (6).

  6. El plan se compara con otros planes para la instrucción en la base de referencia.

    1. Si el plan del optimizador se encuentra entre los planes de la base de referencia, se comprueba su estado (7a).

    2. Si el plan del optimizador no está entre los planes de la base de referencia, el plan se agrega a los planes para la instrucción como un plan Unapproved nuevo.

  7. El estado del plan se verifica para determinar únicamente si no está aprobado.

    1. Si el estado del plan es No aprobado, el costo estimado del plan se compara con el costo estimado especificado para el umbral del plan de ejecución no aprobado.

      • Si el costo estimado del plan está por debajo del umbral, el optimizador lo usa aunque sea un plan no aprobado (A. Ejecutar el plan del optimizador). Por lo general, el optimizador no ejecutará un plan no aprobado. Sin embargo, cuando el parámetro apg_plan_mgmt.unapproved_plan_execution_threshold especifica un valor de umbral de costo, el optimizador compara el costo del plan no aprobado con el umbral. Si el costo estimado es de menos del umbral, el optimizador ejecuta el plan. Para obtener más información, consulte apg_plan_mgmt.unapproved_plan_execution_threshold .

      • Si el costo estimado del plan no está por debajo del umbral, se comprueban los demás atributos del plan (8a).

    2. Si el estado del plan no está aprobado, se comprueban sus otros atributos (8a).

  8. El optimizador no utilizará un plan desactivado. Es decir, el plan que tenga su atributo enable establecido en “f” (false). El optimizador tampoco utilizará un plan que tenga el estado Rechazado.

    El optimizador no puede usar ningún plan que no sea válido. Los planes pueden dejar de ser válidos cuando se eliminan los objetos de los que dependen, como índices o particiones de tabla.

    1. Si la instrucción tiene algún plan preferido habilitado y válido, el optimizador elige el que tenga costo mínimo de entre los planes preferidos almacenados para dicha instrucción SQL. A continuación, el optimizador ejecuta el plan preferido con costo mínimo.

    2. Si el estado de cuenta no tiene ningún plan preferido habilitado y válido, se evalúa en el siguiente paso (9).

  9. Si la instrucción tiene algún plan aprobado habilitado y válido, el optimizador elige el que tenga costo mínimo de entre los planes preferidos almacenados para dicha instrucción SQL. A continuación, el optimizador ejecuta el plan aprobado con costo mínimo.

    Si la instrucción no tiene ningún plan aprobado válido y habilitado, el optimizador utiliza el plan de costo mínimo (A. Ejecutar el plan del optimizador).