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

Eliminación de planes de consultas en Aurora PostgreSQL

Elimine los planes de ejecución que no esté usando o que no sean válidos. Para obtener más información sobre la eliminación de planes, consulte las siguientes secciones.

Eliminación de planes

Los planes se eliminan automáticamente si no se usan en más de un mes, específicamente, 32 días. Este es el ajuste predeterminado del parámetro apg_plan_mgmt.plan_retention_period. Puede cambiar el período de retención del plan por otro más largo o por un período de tiempo más corto, a partir del valor de 1. Determinar el número de días desde que un plan se usó por última vez se usó restando la fecha de last_used de la fecha actual. La fecha de last_used es la fecha más reciente en que el optimizador eligió el plan como plan de costo mínimo o en que se ejecutó el plan. La fecha se almacena para el plan en la vista apg_plan_mgmt.dba_plans.

Le recomendamos que elimine planes que no se hayan utilizado durante mucho tiempo o que no resulten útiles. Todos los planes tienen una fecha last_used que utiliza el optimizador cada vez que ejecuta un plan o lo elige como plan de costo mínimo para una instrucción. Verifique las últimas fechas de last_usedpara identificar los planes que puede eliminar de forma segura.

La siguiente consulta devuelve una tabla de tres columnas con el recuento del número total de planes, los planes que no se han podido eliminar y los que se han eliminado correctamente. Incluye una consulta anidada que es un ejemplo de cómo usar la función apg_plan_mgmt.delete_plan para eliminar todos los planes que no se hayan seleccionado como plan de costo mínimo en los últimos 31 días y cuyo estado no es Rejected.

SELECT (SELECT COUNT(*) from apg_plan_mgmt.dba_plans) total_plans, COUNT(*) FILTER (WHERE result = -1) failed_to_delete, COUNT(*) FILTER (WHERE result = 0) successfully_deleted FROM ( SELECT apg_plan_mgmt.delete_plan(sql_hash, plan_hash) as result FROM apg_plan_mgmt.dba_plans WHERE last_used < (current_date - interval '31 days') AND status <> 'Rejected' ) as dba_plans ;
total_plans | failed_to_delete | successfully_deleted -------------+------------------+---------------------- 3 | 0 | 2

Para obtener más información, consulte apg_plan_mgmt.delete_plan.

Para eliminar los planes que no son válidos y espera que sigan siendo inválidos, utilice la función apg_plan_mgmt.validate_plans. Esta función le permite eliminar o deshabilitar planes no válidos. Para obtener más información, consulte Validación de planes.

importante

Si no elimina los planes extraños, podría quedarse eventualmente sin memoria compartida dedicada a la administración de planes de consulta. Para controlar cuánta memoria tendrá disponible para los planes administrados, utilice el parámetro apg_plan_mgmt.max_plans. Establezca este parámetro en el grupo de parámetros de base de datos personalizado y reinicie la instancia de base de datos para que los cambios surtan efecto. Para obtener más información, consulte el parámetro apg_plan_mgmt.max_plans.

Validación de planes

Use la función apg_plan_mgmt.validate_plans para eliminar o deshabilitar planes no válidos.

Los planes pueden volverse no válidos u obsoletos cuando se eliminan los objetos de los que dependen, como un índice o una tabla. Sin embargo, puede que un plan deje de ser válido solo temporalmente si el objeto eliminado se recrea. Si un plan no válido puede pasar a ser válido posteriormente, es posible que prefiera deshabilitar un plan no válido o no hacer nada en lugar de eliminarlo.

Para encontrar y eliminar todos los planes que no sean válidos y no se hayan utilizado en la última semana, utilice la función apg_plan_mgmt.validate_plans de la siguiente forma.

SELECT apg_plan_mgmt.validate_plans(sql_hash, plan_hash, 'delete') FROM apg_plan_mgmt.dba_plans WHERE last_used < (current_date - interval '7 days');

Para habilitar o deshabilitar un plan directamente, utilice la función apg_plan_mgmt.set_plan_enabled.