DBAtlas · Atlas de operaciones de bases de datos

Aceptar, deshabilitar y eliminar un SQL profile

OracleRendimiento

Comando

-- 1) Accept the profile recommended by the tuning task:
DECLARE
  l_name VARCHAR2(128);
BEGIN
  l_name := DBMS_SQLTUNE.ACCEPT_SQL_PROFILE(
              task_name   => '<task_name>',
              name        => 'PROF_<sql_id>',
              description => 'STA recommendation, CHG-1234',
              force_match => TRUE,     -- also matches statements differing only in literals
              replace     => TRUE);
  DBMS_OUTPUT.PUT_LINE('Profile: ' || l_name);
END;
/

-- 2) Profiles and the cursors using them:
SELECT name, category, status, force_matching,
       TO_CHAR(created,'YYYY-MM-DD HH24:MI') AS created
FROM   dba_sql_profiles
ORDER  BY created DESC;

SELECT sql_id, child_number, plan_hash_value, sql_profile
FROM   v$sql
WHERE  sql_profile IS NOT NULL;

-- 3) Temporarily disable / drop:
EXEC DBMS_SQLTUNE.ALTER_SQL_PROFILE(name => 'PROF_<sql_id>', attribute_name => 'STATUS', value => 'DISABLED');
EXEC DBMS_SQLTUNE.DROP_SQL_PROFILE(name => 'PROF_<sql_id>', ignore => TRUE);

Qué hace

Un SQL profile da al optimizador correcciones adicionales de cardinalidad/selectividad (OPT_ESTIMATE y similares) para que genere un plan mejor sin cambiar el texto del SQL; con FORCE_MATCH también se aplica a sentencias que solo difieren en los literales.

Cuándo usarlo

Cuando el SQL no se puede cambiar (aplicación empaquetada), cuando STA recomienda una mejora validada, o como corrección rápida de una regresión de plan.

Precaución

Requiere la licencia de Tuning Pack. Un profile no "fija" el plan; corrige estimaciones, así que el plan aún puede cambiar cuando cambia la distribución de los datos. Si la estabilidad del plan es obligatoria, use un SQL plan baseline. Cuando existen ambos, el optimizador elige entre los planes aceptados del baseline. Lea siempre los resultados de validación (la sección 'Validation results' del informe) antes de aceptar.

Abrir en DBAtlas →

Relacionado