Crear y ejecutar una tarea de SQL Tuning Advisor y leer sus recomendaciones
OracleRendimientoComando
-- 1) Create and run a task for a SQL in the cursor cache:
VAR task VARCHAR2(64)
BEGIN
:task := DBMS_SQLTUNE.CREATE_TUNING_TASK(
sql_id => '<sql_id>',
scope => DBMS_SQLTUNE.SCOPE_COMPREHENSIVE,
time_limit => 300,
task_name => 'STA_<sql_id>',
description => 'Slow report query');
DBMS_SQLTUNE.EXECUTE_TUNING_TASK(task_name => :task);
END;
/
-- For a historical SQL in AWR: begin_snap => <b>, end_snap => <e>, sql_id => '<sql_id>'
-- 2) Status and report:
SELECT task_name, status FROM dba_advisor_log WHERE task_name = :task;
SET LONG 1000000 LONGCHUNKSIZE 1000000 LINESIZE 200 PAGESIZE 0
SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK(:task) FROM dual;
-- 3) Get the recommendations as an executable script:
SELECT DBMS_SQLTUNE.SCRIPT_TUNING_TASK(:task) FROM dual;
-- 4) When done:
EXEC DBMS_SQLTUNE.DROP_TUNING_TASK(task_name => :task);Qué hace
Ejecuta el optimizador en un "tuning mode" extendido para el SQL y genera recomendaciones sobre estadísticas faltantes, índices nuevos, un SQL profile, planes alternativos y reestructuración del SQL; valida la recomendación del profile con ejecuciones de prueba.
Cuándo usarlo
Cuando un único SQL problemático necesita una segunda opinión rápida, o al buscar una corrección mediante SQL profile para una regresión de plan sin cambiar el código.
Precaución
Requiere la licencia de Tuning Pack. El alcance COMPREHENSIVE puede ejecutar el SQL para pruebas (solo la parte de consulta en DML); defina time_limit en producción. Las recomendaciones de índices ignoran el resto de la carga de trabajo; evalúe por separado el costo en DML. El usuario necesita el privilegio ADVISOR.
Relacionado
- Tomar un snapshot de AWR y generar un informe AWR entre dos snapshots
- Informe AWR diff (compare period) entre dos periodos
- Top wait events y top SQL desde ASH para los últimos minutos
- Ejecutar un análisis ADDM y obtener su informe
- Obtener un informe de SQL Monitor (SQL largo en ejecución o finalizado)
- Habilitar/deshabilitar el trace 10046 para una sesión y resumirlo con TKPROF