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.enabledenon. Para obtener más información, consulta Configura marcas de base de datos. - Crea la extensión
google_plan_managementen la base de datos. Para obtener más información, consulta Habilita una extensión. Otorga
google_plan_management_rolea los usuarios de la base de datos que quieran usar la administración de planes de consultas y administrar planes de consultas.En la consola de Google Cloud , ve a la página Clústeres de AlloyDB.
Haz clic en la instancia requerida.
Haz clic en AlloyDB Studio y, luego, en la pestaña Editor 1.
Ingresa la siguiente consulta:
GRANT google_plan_management_role TO DATABASE_USER;Reemplaza
DATABASE_USERpor el usuario al que deseas otorgarle el rol.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:
Consulta los planes con seguimiento que generó el optimizador y, luego, identifica el
logical_query_iden la respuesta.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 valorestotal_execution_timeynum_executionsy, luego, decidir cuál es el mejor plan para tu consulta.La columna
planincluye otros detalles, como el índice o el método de ordenamiento que se usaron, que pueden ayudarte a decidir un plan de consulta.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 ellogical_query_idúnico para la consulta. Cada ID de consulta puede estar asociado a varios IDs de planes.PLAN_ID: Es elplan_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.