En este documento se describe cómo mejorar el rendimiento de los planes de consulta mediante la gestión de planes de consulta en AlloyDB para PostgreSQL. La gestión del plan de consultas monitoriza continuamente todos los planes de consultas y sus estadísticas de ejecución en tu base de datos. Después de revisar las consultas y los costes asociados, puede aprobar un plan, que se aplica de forma coherente a una consulta determinada. De esta forma, se selecciona un plan de consulta eficiente en cuanto a costes, lo que mejora el rendimiento de las consultas.
Cómo funciona
En PostgreSQL, un optimizador de consultas selecciona un plan de ejecución para cada consulta en función de los costes estimados. El coste de una consulta depende de muchos factores, como los parámetros de la consulta, su complejidad, 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 la consulta, seleccionar un plan de consulta de forma dinámica no siempre puede dar resultados óptimos. Al procesar una consulta, el optimizador evalúa varios planes de ejecución e intenta elegir el más rentable.
Un cambio en un parámetro puede provocar un cambio en el plan. Aunque 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 da lugar a un rendimiento de las consultas deficiente. La gestión de planes de consulta te ayuda a comprender los patrones y los planes que genera el optimizador, y te permite ver cada plan para tomar decisiones fundamentadas.
Los dos componentes principales de la gestión de planes de consulta son los siguientes:
- Repositorio de planes de consulta
- Cuando habilitas la gestión de planes de consulta en tu base de datos, el repositorio de planes empieza a monitorizar los planes históricos y las estadísticas de ejecución de tu base de datos. El repositorio de planes de consulta proporciona información sobre el rendimiento de los planes de consulta.
- Gestión de planes
- Después de revisar los planes disponibles, el componente de gestión de planes te permite aprobar uno o varios planes para una plantilla de consulta específica. La gestión de planes de consultas monitoriza estos planes aprobados y se asegura de que, cuando se ejecute la consulta posteriormente, el optimizador de consultas solo utilice uno de los planes aprobados. Si se aprueban varios planes, AlloyDB selecciona y ejecuta el plan con el coste estimado más bajo.
Antes de empezar
- Define la marca de base de datos
google_plan_management.enabledenon. Para obtener más información, consulta Configurar marcas de bases de datos. - Crea la extensión
google_plan_managementen la base de datos. Para obtener más información, consulta el artículo Habilitar una extensión. Concede el permiso
google_plan_management_rolea los usuarios de la base de datos que quieran usar la gestión de planes de consultas y gestionar planes de consultas.En la Google Cloud consola, ve a la página Clusters de AlloyDB.
Haz clic en la instancia que quieras.
Haz clic en AlloyDB Studio y, a continuación, en la pestaña Editor 1.
Introduce la siguiente consulta:
GRANT google_plan_management_role TO DATABASE_USER;Sustituye
DATABASE_USERpor el usuario al que quieras asignar el rol.Haz clic en Ejecutar.
Ver planes de consulta monitorizados
La gestión del plan de consultas proporciona una vista de plan de consultas que muestra todos los planes de consultas registrados, sus tiempos de ejecución y otra información. Un plan de consulta monitorizado es un plan de consulta que genera el optimizador y que se almacena en el repositorio de planes.
Para ver los planes monitorizados históricos, ejecuta la siguiente consulta:
SELECT * FROM google_plan_management.tracked_plans_view;
La respuesta de 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 consulta
Si no quieres que la gestión de planes de consulta haga un seguimiento de los planes de consulta generados por 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 Configurar marcas de la base de datos.
Ver planes gestionados
Puede ver todas las consultas y los planes que gestiona la gestión de planes de consultas, incluidos los planes aprobados y rechazados.
Para ver los planes gestionados, ejecuta la siguiente consulta:
SELECT * FROM google_plan_management.managed_plans_view;
La respuesta de 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
Aprobar un plan
El optimizador selecciona un plan de consulta de forma dinámica, lo que significa que puede elegir planes de consulta diferentes para la misma consulta en momentos distintos. Para aplicar una selección de planes coherente, puede usar la gestión de planes de consultas para aprobar uno o varios planes de consultas para una consulta determinada.
Si aprueba varios planes, la gestión de planes de consultas comparará todos los planes aprobados y seleccionará el más rentable para la ejecución de la consulta.
Para evaluar y aprobar un plan de una consulta, sigue estos pasos:
Consulta los planes monitorizados que ha generado el optimizador e identifica el
logical_query_iden la respuesta.Revisa todos los planes que se han generado para el
logical_query_id. Puedes calcular el tiempo medio de ejecución de cada plan con los valorestotal_execution_timeynum_executionsy, a continuación, decidir cuál es el mejor plan para tu consulta.La columna
planincluye otros detalles, como el índice utilizado o el método de ordenación usado, que pueden ayudarte a decidir un plan de consulta.Aprueba el plan que quieras aplicar a la consulta ejecutando la siguiente consulta:
SELECT google_plan_management.approve_plan(QUERY_ID, PLAN_ID);Haz los cambios siguientes:
QUERY_ID: ellogical_query_idúnico de la consulta. Cada ID de consulta puede estar asociado a varios IDs de plan.PLAN_ID: elplan_idúnico de la consulta.
Rechazar un plan
Puede rechazar cualquier plan aprobado para una consulta e impedir que la gestión del plan de consultas aplique el plan a la consulta. Los planes rechazados no se eliminan y están disponibles en la lista de planes monitorizados.
Para denegar un plan aprobado, ejecuta la siguiente consulta:
SELECT google_plan_management.deny_plan(QUERY_ID, PLAN_ID);
Eliminar un plan aprobado
Puedes eliminar un plan aprobado del repositorio de planes. Cuando eliminas un plan aprobado, deja de aparecer en la lista de planes gestionados.
Para eliminar un plan aprobado, ejecuta la siguiente consulta:
SELECT google_plan_management.update_plan_status(QUERY_ID, PLAN_ID, 'delete');
Dejar de usar temporalmente los planes aprobados
Si quieres 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 Configurar marcas de bases de datos.
Limitaciones
- No puedes usar la gestión de planes de consulta en tablas particionadas ni en conjuntos de agrupación.
- La gestión del plan de consultas solo se admite en la instancia principal.
- El repositorio de planes de consulta puede almacenar hasta 100.000 planes únicos y no ofrece una política de conservación.
Siguientes pasos
- Información sobre el motor de columnas de AlloyDB para PostgreSQL
- Usar el asesor de índices con Información útil sobre las consultas