Juste un rapide commentaire pour indiquer une colonne très utile sur les environnements transactionnels avec le paramètre cursor_sharing=EXACT
. Si vous cherchez à détecter des requêtes qui s’éxécuteraient de manière très fréquente avec des valeurs litérales plutôt qu’avec des variables bind, regardez la colonne FORCE_MATCHING_SIGNATURE
de la vue V$SQL
; voici une petite démonstration :
select 1 from dual;
select 2 from dual;
select 3 from dual;
col sql_text format a60
set lines 120
col FORCE_MATCHING_SIGNATURE format 99999999999999999999
select sql_id,
force_matching_signature,
sql_text
from v$sql where regexp_like(sql_text, '([d]ual)$')
order by 2;
SQL_ID FORCE_MATCHING_SIGNATURE SQL_TEXT
------------- ------------------------ ----------------------------------
0rnt8v06tb3sp 4921956989962288504 select sysdate + 10/1440 from dual
9fusd37prv595 10559245208183986822 select 2 from dual
1rqd29uzs8ra1 10559245208183986822 select 3 from dual
520mkxqpf15q8 10559245208183986822 select 1 from dual
La valeur de cette colonne est identique pour les ordres qui seraient identique avec la valeur cursor_sharing=FORCE
; un rank()
ou un group by
et vous pourrez très vite détecter des problèmes (certes très évidents) dans le code. Pour en savoir plus sur cette colonne, jetez un oeil à la documentation de référence.