Charger un bon plan depuis le cursor cache comme SQL plan baseline
OraclePerformancesCommande
-- 1) Compare the SQL's plans and their performance:
SELECT sql_id, child_number, plan_hash_value, executions,
ROUND(elapsed_time/1e3/NULLIF(executions,0),1) AS ms_per_exec,
sql_plan_baseline
FROM v$sql
WHERE sql_id = '<sql_id>';
-- 2) Load the chosen plan as a baseline:
SET SERVEROUTPUT ON
DECLARE
n PLS_INTEGER;
BEGIN
n := DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE(
sql_id => '<sql_id>',
plan_hash_value => <plan_hash_value>,
fixed => 'NO',
enabled => 'YES');
DBMS_OUTPUT.PUT_LINE(n || ' plan(s) loaded');
END;
/
-- 3) Verify the baseline:
SELECT sql_handle, plan_name, origin, enabled, accepted, fixed, reproduced,
TO_CHAR(last_executed,'YYYY-MM-DD HH24:MI') AS last_exec
FROM dba_sql_plan_baselines
WHERE signature = (SELECT exact_matching_signature FROM v$sql
WHERE sql_id = '<sql_id>' AND ROWNUM = 1);
-- On subsequent executions v$sql.sql_plan_baseline should be populated.Ce que fait la commande
Utilise SQL Plan Management pour faire du plan choisi une baseline ACCEPTED ; l'optimiseur n'utilise alors que les plans de baseline acceptés et met de côté les nouveaux plans trouvés jusqu'à leur évolution.
Quand l'utiliser
Pour revenir à un bon plan connu lors d'une régression de plan, et pour protéger les plans des SQL critiques avant une mise à niveau ou un changement de statistiques.
Attention
Aucune licence supplémentaire en Enterprise Edition (en SE2, limité à un plan de baseline par SQL). Exige ADMINISTER SQL MANAGEMENT OBJECT. Une baseline s'applique exactement au même texte SQL (signature) ; elle n'aide pas les SQL utilisant des littéraux. Si un index utilisé par le plan est supprimé, le plan ne peut pas être reproduit (REPRODUCED=NO) et l'optimiseur revient à un choix basé sur le coût. OPTIMIZER_USE_SQL_PLAN_BASELINES doit valoir TRUE (défaut).
Voir aussi
- Prendre un snapshot AWR et générer un rapport AWR entre deux snapshots
- Rapport AWR diff (compare period) entre deux périodes
- Principaux événements d'attente et principaux SQL depuis ASH pour les dernières minutes
- Lancer une analyse ADDM et obtenir son rapport
- Obtenir un rapport SQL Monitor (SQL long en cours ou terminé)
- Activer/désactiver la trace 10046 pour une session et la résumer avec TKPROF