Bonjour
sous ORACLE 10g, comment fait on pour savoir la prise en compte des HINTS est activée ou non ??
Merci
Version imprimable
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.
BonjourCitation:
Envoyé 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:
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;
Citation:
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 |
--------------------------------------------------------------------------
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 :aie:
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
Citation:
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.