Está en la página 1de 1

Durante mi experiencia como DBA me he encontrado con incontables problemas de performace sobre

sentencias que eran ejecutadas desde aplicaciones donde el codigo de las sentencias no puede ser
modificado. En versiones anteriores a 11g debias generar outlines y editarlas para que la sentencia elija
el PATH optimo para resolver la consulta en el menor tiempo . En 11g disponemos de una nueva feature
que nos permite manejar la estabilidad de los planes de ejecucion SQL BASELINES.

En el siguiente documento se detallara el procedimiento para cargar una baseline generada a partir de la
sentencia original (generada por la aplicacion) con la adicion de un hint/s que produce la obtencion del
plan optimo para esta sentencia .

Nomenclatura utilizada

ORIGINAL_SQL_ID = SQL_ID de la sentencia original sin HINTS a la cual le queremos fijar un plan optimo
aplicando HINTS

1 - (Opcional si no fue realizado antes )Capturar la sentencia de la sentencia original sin HINTS.El
siguiente codigo solo cargara la baseline si la misma esta actualmente en memoria.

BEGIN
dbms_spm.load_plans_from_cursor_cache(sql_id => '&original_sql_id', plan_hash_value =>
&original_plan_hash_value );
END;
/

2 - Ejecutar el SQL con el HINT necesario para generar un plan de ejecucion optimo

3 - Identificar el sql_id de la sentencia con HINTS de la vista V$SQL.

4 - Verificar que la baseline generada en el paso 1 exista. Extraer el campo SQL_HANDLE

SELECT * FROM dba_sql_plan_baselines WHERE signature IN (SELECT force_matching_signature FROM


dba_hist_sqlstat WHERE sql_id='&original_sql_id')

También podría gustarte