Faire évoluer les plans non acceptés d'une SQL plan baseline
OraclePerformancesCommande
-- 1) Plans waiting for acceptance:
SELECT sql_handle, plan_name, origin, enabled, accepted, fixed,
TO_CHAR(created,'YYYY-MM-DD HH24:MI') AS created
FROM dba_sql_plan_baselines
WHERE accepted = 'NO'
ORDER BY created DESC;
-- 2) Evolve task: test-executes the candidate plan against the accepted plan
VAR tname VARCHAR2(128)
VAR ename VARCHAR2(128)
BEGIN
:tname := DBMS_SPM.CREATE_EVOLVE_TASK(
sql_handle => '<sql_handle>',
time_limit => 600,
task_name => 'EVOLVE_<sql_handle>');
:ename := DBMS_SPM.EXECUTE_EVOLVE_TASK(task_name => :tname);
END;
/
SET LONG 1000000 LONGCHUNKSIZE 1000000 LINESIZE 200 PAGESIZE 0
SELECT DBMS_SPM.REPORT_EVOLVE_TASK(
task_name => :tname, execution_name => :ename,
type => 'TEXT', level => 'TYPICAL', section => 'ALL')
FROM dual;
-- 3) If the report has recommendations (plans proven better), accept them:
SET SERVEROUTPUT ON
DECLARE
n PLS_INTEGER;
BEGIN
n := DBMS_SPM.IMPLEMENT_EVOLVE_TASK(task_name => :tname);
DBMS_OUTPUT.PUT_LINE(n || ' plan(s) accepted');
END;
/
EXEC DBMS_SPM.DROP_EVOLVE_TASK(task_name => :tname);Ce que fait la commande
Lorsqu'une baseline existe, les nouveaux plans trouvés par l'optimiseur sont stockés avec ACCEPTED=NO. La tâche d'évolution exécute ces candidats à titre de test face au plan accepté et n'accepte que ceux qui sont nettement meilleurs.
Quand l'utiliser
Pour les SQL avec baseline lorsqu'un nouvel index ou de nouvelles statistiques ont pu produire un meilleur plan ; pour décider manuellement sans attendre la tâche automatique SYS_AUTO_SPM_EVOLVE_TASK (12c+).
Attention
Exige Enterprise Edition. L'évolution exécute réellement le SQL (seulement la partie requête pour les DML) ; définissez time_limit pour les SQL lourds et évitez les heures de pointe. Exige ADMINISTER SQL MANAGEMENT OBJECT et ADVISOR. Les SQL parsés en tant que SYS ne peuvent pas évoluer (ORA-16963) ; exécutez-la en tant qu'utilisateur applicatif.
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