Bonjour,
Je cherche la procédure à suivre pour détecter si une requête a changé de plan d'exécution ? et comment à faire pour fixer l'ancien plan?
MERCI.
A+
Bonjour,
Je cherche la procédure à suivre pour détecter si une requête a changé de plan d'exécution ? et comment à faire pour fixer l'ancien plan?
MERCI.
A+
Quelle est la version de ta base ?
Edition Standard ou Entreprise ?
As-tu le Diagnostic Pack?
Avec les réponses à ces questions, on pourra mieux t'aider.
DBA Oracle
Rédacteur du blog : dbaoraclesql.canalblog.com
Bonjour,
Merci de retour.
EE (édition entreprise) sans pack diag.
A+
Désolé de te dire ça, mais tu es dans le caca
Sans Diagnostic Pack pas de AWR et, sans AWR, pas d'historique de tes plans d'exécution dans les vues DBA_HIST***
Une piste serait alors de créer un job qui, toutes les X minutes, va récupérer le plan de ton ordre (avec le bon sql_id) et le stocke dans une table que tu as créée : comme ça, pas de purge de ta table : tu auras les plans sur plusieurs jours.
J'exécute mon ordre posant pb, de sql_id 9420hwvnq6jsj.
Je crée ma table qui va stocker les plans d'exécution. On voit qu'elle a une seule colonne. Attention : seulement 4 000 caractères.
Code : Sélectionner tout - Visualiser dans une fenêtre à part SELECT *** FROM ***;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 CREATE TABLE SYSTEM.ZZ_TAB_EXPORT_PLAN AS SELECT * FROM TABLE(DBMS_XPLAN.display_cursor(sql_id=>'9420hwvnq6jsj',format=>'ALLSTATS LAST +cost +bytes +outline +peeked_binds')); SQL> desc SYSTEM.ZZ_TAB_EXPORT_PLAN Name Null? Type ----------------------------------------------------------------------------------------------------- -------- -------------------------------------------------------------------- PLAN_TABLE_OUTPUT VARCHAR2(4000) SQL> select * from SYSTEM.ZZ_TAB_EXPORT_PLAN; PLAN_TABLE_OUTPUT ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ SQL_ID 9420hwvnq6jsj, child number 0 ------------------------------------- select D.DEPARTMENT_NAME, E.DEPARTMENT_ID, E.FIRST_NAME, E.LAST_NAME, E.EMPLOYEE_ID from employees E, departments D where E.DEPARTMENT_ID = D.DEPARTMENT_ID AND (D.DEPARTMENT_ID = 50 OR D.DEPARTMENT_ID = 80) order by D.DEPARTMENT_NAME, E.FIRST_NAME, E.LAST_NAME Plan hash value: 2480766633 ...
C'est là où ça coince, je n'ai pas réussi à créer le job et, aïe, je n'ai pas de message d'Oracle disant où est le pb... Je te laisse débugger cela...
Il faudra que tu revois les parties start_date, repeat_interval, end_date.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 BEGIN DBMS_SCHEDULER.create_job ( job_name => 'ZZ_Export_Plan_Ex_9420hwvnq6jsj', job_type => 'PLSQL_BLOCK', job_action => 'BEGIN INSERT INTO SYS.ZZ_TAB_EXPORT_PLAN SELECT * FROM TABLE(DBMS_XPLAN.display_cursor(sql_id=>''9420hwvnq6jsj'',format=>''ALLSTATS LAST +cost +bytes +outline +peeked_binds''));END;', start_date => '04-JUL-2022 10:00:00 AM', repeat_interval => 'FREQ=HOURLY; BYHOUR=4,5; BYMINUTE=00,10,20,30,40,50', end_date => '04-JUL-2022 11:00:00 PM', enabled => TRUE, comments => 'Generation Plan Execution Export 9420hwvnq6jsj'); end; /
Je pense que cette piste n'est pas bête, il faut juste réussir à créer le job
Ensuite, pour forcer un plan d'exécution, il faut passer par les Baselines ou les Stored Outlines (deprecated depuis la 11 je crois) : à voir s'il ne faut pas le SQL Tuning Pack pour cela.
DBA Oracle
Rédacteur du blog : dbaoraclesql.canalblog.com
Merci de retour.
Si non comment procéder avec AWR que j'ai su un autre périmètre.
MERCI.
A+
La vue DBA_HIST_SQL_PLAN devrait faire l'affaire car on y trouve les colonnes SQL_ID et PLAN_HASH_VALUE.
Si pour ton sql_id tu as plusieurs plans, cela se verra dans cette vue; attention, il faut que l'ordre SQL se retrouve, bien évidemment, dans les snapshots AWR : en clair, il doit consommer suffisamment de ressources pour être considéré comme un "gros" ordre SQL.
Pour les baselines : https://blogs.oracle.com/connect/pos...d-better-plans
DBA Oracle
Rédacteur du blog : dbaoraclesql.canalblog.com
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager