Comment diagnostiquer un pbm de contention sur oracle

L’application utilisateur freeze.

Les requetes suivantes permettent d’aider au diagnostic, il est nécessaire d’avoir le droit SELECT_CATALOG_ROLE pour y accéder.

il convient donc de demander au DBA de jouer la requete suivante sur la base avant de pouvoir lancer un diagnostic.
(:source lang=SQL : )

GRANT SELECT_CATALOG_ROLE TO "QUBESCONNECT"

Pour obtenir la liste des verrous
(:source lang=SQL : )

SELECT
s.sid sid,
s.username username,
s.machine machine,
l.type type,
o.object_name object_name,
DECODE(l.lmode,
0,'None',
1,'Null',
2,'Row Share',
3,'Row Exlusive',
4,'Share',
5,'Sh/Row Exlusive',
6,'Exclusive') lmode,
DECODE(l.request,
0,'None',
1,'Null',
2,'Row Share',
3,'Row Exlusive',
4,'Share',
5,'Sh/Row Exlusive',
6,'Exclusive') request,
l.block block
FROM
v$lock l,
v$session s,
dba_objects o
WHERE
l.sid = s.sid
AND
username != 'SYSTEM'
AND
o.object_id(+) = l.id1

Pour obtenir la liste des requêtes bloqués
(:source lang=SQL : )

select
s.sid "SID",
s.serial# "SER",
o.object_name "Table",
o.owner,
s.osuser "OS User",
s.machine "Node",
s.terminal "Terminal",
p.spid "SPID",
s.process "CPID",
decode (s.lockwait, null, 'Have Lock(s)', 'Waiting for <' || b.sid || '>') "Mode",
substr (c.sql_text, 1, 150) "SQL Text"
from v$lock l,
v$lock d,
v$session s,
v$session b,
v$process p,
v$transaction t,
sys.dba_objects o,
v$open_cursor c
where l.sid = s.sid
and o.object_id (+) = l.id1
and c.hash_value (+) = s.sql_hash_value
and c.address (+) = s.sql_address
and s.paddr = p.addr
and d.kaddr (+) = s.lockwait
and d.id2 = t.xidsqn (+)
and b.taddr (+) = t.addr
and l.type = 'TM'
group by
o.object_name,
o.owner,
s.osuser,
s.machine,
s.terminal,
p.spid,
s.process,
s.sid,
s.serial#,
decode (s.lockwait, null, 'Have Lock(s)', 'Waiting for <' || b.sid || '>'),
substr (c.sql_text, 1, 150)
order by
decode (s.lockwait, null, 'Have Lock(s)', 'Waiting for <' || b.sid || '>') desc,
o.object_name asc,
s.sid asc

Pour la liste des transactions
(:source lang=SQL : )

SELECT s.sid, s.username, s.logon_time, t.start_date "DEBUT TRANSACTION" FROM V$TRANSACTION t INNER JOIN V$SESSION s ON (t.addr = s.taddr)

Pour la description des type de verrous
(:source lang=SQL : )

select * from v$lock_type