Bonjour
sous ORACLE 10g, comment fait on pour savoir la prise en compte des HINTS est activée ou non ??
Merci
Bonjour
sous ORACLE 10g, comment fait on pour savoir la prise en compte des HINTS est activée ou non ??
Merci
C'est à dire ?
Si tu mets un HINT dans une requête, s'il n'y a pas d'erreur (de syntaxe), alors il y a de forte chance qu'il soit pris en compte. Aucun paramétrage particulier n'est à faire.
Nicolas.
BonjourEnvoyé par tchoimars
Les directives d'optimisation (hints) étant destinées à imposer un plan d'exécution particulier, la façon la plus évidente de vérifier leur prise en compte est d'afficher le plan d'exécution obtenu.
Car ces directives n'étant pas autre chose que des commentaires (entre /* */ ), elles sont ignorées sans provoquer la moindre erreur si elles ne sont pas rigoureusement conformes à la syntaxe attendue.
Exemples :
Et les résultats :
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 set autotrace on explain -- pas de directive select * from dual; -- inopérant : nom de table manquant select /*+ PARALLEL */ * from dual; -- correct select /*+ PARALLEL(dual) */ * from dual; -- inopérant: il faut utiliser le nom de l'alias select /*+ PARALLEL(dual) */ * from dual d; -- inopérant : n'est pas une directive reconnue select /*+ BIDON */ * from dual;
SQL> set autotrace on explain
SQL> select * from dual;
D
-
X
Plan d'exécution
----------------------------------------------------------
Plan hash value: 272002086
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 2 | 2 (0)| 00:00:01 |
| 1 | TABLE ACCESS FULL| DUAL | 1 | 2 | 2 (0)| 00:00:01 |
--------------------------------------------------------------------------
SQL> select /*+ PARALLEL */ * from dual;
D
-
X
Plan d'exécution
----------------------------------------------------------
Plan hash value: 272002086
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 2 | 2 (0)| 00:00:01 |
| 1 | TABLE ACCESS FULL| DUAL | 1 | 2 | 2 (0)| 00:00:01 |
--------------------------------------------------------------------------
SQL> select /*+ PARALLEL(dual) */ * from dual;
D
-
X
Plan d'exécution
----------------------------------------------------------
Plan hash value: 1494853933
----------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | TQ |IN-OUT| PQ Distrib |
----------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 2 | 2 (0)| 00:00:01 | | | |
| 1 | PX COORDINATOR | | | | | | | | |
| 2 | PX SEND QC (RANDOM)| :TQ10000 | 1 | 2 | 2 (0)| 00:00:01 | Q1,00 | P->S | QC
| 3 | PX BLOCK ITERATOR | | 1 | 2 | 2 (0)| 00:00:01 | Q1,00 | PCWC | |
| 4 | TABLE ACCESS FULL| DUAL | 1 | 2 | 2 (0)| 00:00:01 | Q1,00 | PCWP | |
----------------------------------------------------------------------------------------------------
SQL> select /*+ PARALLEL(dual) */ * from dual d;
D
-
X
Plan d'exécution
----------------------------------------------------------
Plan hash value: 272002086
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 2 | 2 (0)| 00:00:01 |
| 1 | TABLE ACCESS FULL| DUAL | 1 | 2 | 2 (0)| 00:00:01 |
--------------------------------------------------------------------------
SQL> select /*+ BIDON */ * from dual;
D
-
X
Plan d'exécution
----------------------------------------------------------
Plan hash value: 272002086
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 2 | 2 (0)| 00:00:01 |
| 1 | TABLE ACCESS FULL| DUAL | 1 | 2 | 2 (0)| 00:00:01 |
--------------------------------------------------------------------------
Consultant / formateur Oracle indépendant
Certifié OCP 12c, 11g, 10g ; sécurité 11g
Ma dernière formation Oracle 19c publiée sur Linkedin : https://fr.linkedin.com/learning/oracle-19c-l-administration
Ben disons en fait que j'ai forcé l'utilisation d'un index sur une requete et que le plan d'execution a quand meme fait un full access
Alors comme on m'a dit qu'en 10g on pouvait désactiver l'utilisation des HINTS, je me demandais comment vérifier cela ... à moins qu'on m'ait raconté n'importe quoi
Jamais entendu parler de possibilité de désactiver les HINTs au niveau global
Par contre comme l'explique Pomalaix, les HINTs sont tres sensibles et il est tres facile de se tromper.
Voici issue d'une doc Oracle quelques raisons pour que cela ne marche pas
if you specify hints incorrectly, Oracle ignores them but does not return an error:
* Oracle ignores hints if the Comment containing them does not follow a DELETE, SELECT, or UPDATE keyword.
* Oracle ignores hints containing syntax errors, but considers other correctly specified hints within the same Comment.
* Oracle ignores combinations of conflicting hints, but considers other hints within the same Comment.
Oracle also ignores hints in all SQL statements in environments which use PL/SQL Version 1.
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