Administra los planes de consultas

La administración del plan de consultas en AlloyDB para PostgreSQL te permite mejorar y estabilizar el rendimiento de las consultas, ya que controla qué planes de ejecución usa el optimizador de consultas para tus consultas. La administración del plan de consultas hace un seguimiento continuo de todos los planes de consultas y sus estadísticas de ejecución en tu base de datos. Después de revisar los planes y sus costos, puedes aprobar los planes que deseas que AlloyDB use para una consulta. Esto te ayuda a evitar las ralentizaciones que se producen cuando el optimizador cambia a un plan menos rentable.

Cómo funciona

En PostgreSQL, un optimizador de consultas selecciona un plan de ejecución para cada consulta en función de los costos estimados. Muchos factores influyen en el costo de la consulta, por ejemplo, los parámetros de consulta, la complejidad de la consulta, el tamaño de la tabla, los índices disponibles y los recursos del sistema.

Como los parámetros de consulta pueden cambiar con cada ejecución de consulta, seleccionar un plan de consulta de forma dinámica no siempre produce resultados óptimos. Cuando se procesa una consulta, el optimizador evalúa varios planes de ejecución y trata de elegir el más rentable.

Un cambio de parámetro puede provocar un cambio de plan. Si bien el plan seleccionado suele ser la opción más rentable, puede haber casos en los que se elija un plan menos rentable, lo que genera un rendimiento deficiente de las consultas. La administración del plan de consultas te ayuda a comprender los patrones y los planes que produce el optimizador, y te permite ver cada plan para tomar decisiones fundamentadas.

Los dos componentes principales de la administración del plan de consultas son los siguientes:

Repositorio de planes de consultas
Cuando habilitas la administración del plan de consultas para tu base de datos, el repositorio de planes comienza a hacer un seguimiento de los planes históricos y las estadísticas de ejecución en tu base de datos. El repositorio de planes de consultas proporciona observabilidad sobre el rendimiento de los planes de consultas.
Administración de planes
Después de revisar los planes disponibles, el componente de administración de planes te permite aprobar uno o más planes para una plantilla de consulta específica. La administración del plan de consultas hace un seguimiento de estos planes aprobados y garantiza que, cuando se ejecute la consulta posteriormente, el optimizador de consultas use solo uno de los planes aprobados. Si se aprueban varios planes, AlloyDB selecciona y ejecuta el plan con el costo estimado más bajo.

Antes de comenzar

  • Establece la marca de base de datos google_plan_management.enabled en on. Para obtener más información, consulta Configura marcas de base de datos.
  • Crea la extensión google_plan_management en la base de datos. Para obtener más información, consulta Habilita una extensión.
  • Otorga google_plan_management_role a los usuarios de la base de datos que quieran usar la administración de planes de consultas y administrar planes de consultas.

    1. En la consola de Google Cloud , ve a la página Clústeres de AlloyDB.

      Ir a los clústeres

    2. Haz clic en la instancia requerida.

    3. Haz clic en AlloyDB Studio y, luego, en la pestaña Editor 1.

    4. Ingresa la siguiente consulta:

      GRANT google_plan_management_role TO DATABASE_USER;
      

      Reemplaza DATABASE_USER por el usuario al que deseas otorgarle el rol.

    5. Haz clic en Ejecutar.

Visualiza los planes de consultas con seguimiento

La administración del plan de consultas proporciona una vista del plan de consultas que muestra todos los planes de consultas con seguimiento, sus tiempos de ejecución y otra información. Un plan de consultas con seguimiento es un plan de consultas que genera el optimizador y se almacena en el repositorio de planes.

Para ver los planes históricos con seguimiento, ejecuta la siguiente consulta:

SELECT * FROM google_plan_management.tracked_plans_view;

La respuesta a la consulta es similar a la siguiente:

db_id                | 5
db_name              | postgres
user_id              | 16392
user_name            | postgres
logical_query_id     | 15480571796188147798
plan_id              | 4740866759615354783
query                | SELECT c1, c2, c3 FROM t1 WHERE c1 = 1;
plan                 | Seq Scan on public.t1                                                                                                                                                            +
                     |   Output: c1, c2, c3                                                                                                                                                             +
                     |   Filter: (t1.c1 = ?)
total_execution_time | 0.003937501
num_executions       | 1
creation_time        | 2024-11-06 16:52:25.200737+00
last_used_time       | 2024-11-06 16:52:25.200737+00

Inhabilitar el seguimiento del plan de consultas

Si no quieres que la administración del plan de consultas haga un seguimiento de los planes de consultas que genera el optimizador, debes inhabilitar la marca de base de datos google_plan_management.enable_track_plans. Esta marca está habilitada de forma predeterminada y te recomendamos que la dejes activada. Para obtener más información, consulta Configura marcas de base de datos.

Cómo ver los planes administrados

Puedes ver todas las consultas y los planes que se administran con la administración de planes de consultas, incluidos los planes aprobados y rechazados.

Para ver los planes administrados, ejecuta la siguiente consulta:

SELECT * FROM google_plan_management.managed_plans_view;

La respuesta a la consulta es similar a la siguiente:

db_id            | 5
db_name          | postgres
user_id          | 16392
user_name        | postgres
logical_query_id | 15480571796188147798
plan_id          | 4740866759615354783
status           | approved

Cómo aprobar un plan

El optimizador selecciona un plan de consultas de forma dinámica, lo que significa que puede elegir diferentes planes de consultas para la misma consulta en diferentes momentos. Para aplicar la selección de planes coherente, puedes usar la administración de planes de consultas para aprobar uno o más planes de consultas para una consulta determinada.

Si apruebas varios planes, la administración del plan de consultas compara todos los planes aprobados y selecciona el más rentable para la ejecución de la consulta.

Para evaluar y aprobar un plan para una consulta, sigue estos pasos:

  1. Consulta los planes con seguimiento que generó el optimizador y, luego, identifica el logical_query_id en la respuesta.

  2. Revisa todos los planes que se generaron para el logical_query_id. Puedes calcular el tiempo de ejecución promedio de cada plan con los valores total_execution_time y num_executions y, luego, decidir cuál es el mejor plan para tu consulta.

    La columna plan incluye otros detalles, como el índice o el método de ordenamiento que se usaron, que pueden ayudarte a decidir un plan de consulta.

  3. Ejecuta la siguiente consulta para aprobar el plan que quieres aplicar a la consulta:

      SELECT google_plan_management.approve_plan(QUERY_ID, PLAN_ID);
    

    Reemplaza lo siguiente:

    • QUERY_ID: Es el logical_query_id único para la consulta. Cada ID de consulta puede estar asociado a varios IDs de planes.
    • PLAN_ID: Es el plan_id único de la consulta.

Rechaza un plan

Puedes rechazar cualquier plan aprobado para una consulta y evitar que la administración del plan de consultas aplique el plan a la consulta. Los planes rechazados no se borran y están disponibles en la lista de planes con seguimiento.

Para rechazar un plan aprobado, ejecuta la siguiente consulta:

    SELECT google_plan_management.deny_plan(QUERY_ID, PLAN_ID);

Borra un plan aprobado

Puedes borrar un plan aprobado del repositorio de planes. Cuando borras un plan aprobado, este ya no aparece en la lista de planes administrados.

Para borrar un plan aprobado, ejecuta la siguiente consulta:

    SELECT google_plan_management.update_plan_status(QUERY_ID, PLAN_ID, 'delete');

Cómo dejar de usar planes aprobados temporalmente

Si deseas dejar de usar temporalmente los planes aprobados para tus consultas, debes inhabilitar la marca de base de datos google_plan_management.enable_steer_plans. Esta marca está habilitada de forma predeterminada. Para obtener más información, consulta Configura marcas de base de datos.

Limitaciones

  • No puedes usar la administración de planes de consultas en tablas particionadas ni en conjuntos de agrupación.
  • La administración del plan de consultas solo se admite en la instancia principal.
  • El repositorio de planes de consultas puede almacenar hasta 100, 000 planes únicos y no proporciona una política de retención.

¿Qué sigue?