Oracle
 sql >> Base de données >  >> RDS >> Oracle

Identification des conflits de séquence ASH dans RAC

Dans le chapitre 3 d'Oracle RAC Performance Tuning, j'ai montré comment des valeurs CACHE incorrectes pour les séquences peuvent entraîner de mauvaises performances dans Oracle RAC. J'ai également montré comment repérer les conflits de séquence lors de l'examen des événements d'attente d'une session.

Aujourd'hui, je travaillais avec un développeur qui créait une nouvelle séquence. Le développeur avait une valeur CACHE de 100, ce qui m'a fait initialement chose était une valeur trop faible. J'ai repéré ce paramètre bas lors de la révision du code. Le développeur pense que la valeur CACHE est bonne mais je ne suis pas convaincu. Nous allons tester cela sous charge pour voir si la valeur CACHE doit être ajustée.

En attendant, je pensais "et si j'avais raté ça pendant la révision du code?" Et une question de suivi :"Et si nous n'avions rien remarqué pendant les tests de charge ?" Je veux pouvoir revenir en arrière et déterminer quelles séquences, le cas échéant, seraient des candidats pour avoir un paramètre CACHE incorrect. Je pourrais certainement tracer des sessions et analyser les fichiers de trace, mais ce serait trop pénible. J'ai donc conçu un script que je peux exécuter sur l'historique de session active pour aider à déterminer les séquences candidates.

select sh.sql_id,to_char(st.sql_text),count(*)
from dba_hist_active_sess_history sh
join dba_hist_sqltext st
 on sh.sql_id=st.sql_id
where st.sql_text like '%NEXTVAL%'
 and (event='row cache lock' or event like 'gc current block %-way')
group by sh.sql_id,to_char(st.sql_text)
order by count(*) desc;

Ce n'est pas une science parfaite en raison de la nature de la collecte des cendres. La session connaissant le conflit doit être interceptée au bon moment pour figurer dans la table DBA_HIST_ACTIVE_SESSION_HISTORY. Mais l'instruction SQL ci-dessus me donne quelques candidats à considérer. Toutes les séquences accédées dans les instructions SQL renvoyées n'ont pas besoin d'avoir leurs valeurs CACHE ajustées. Une analyse plus approfondie serait nécessaire. Cependant, cela me donne une liste de ceux à considérer. Et cela peut aider à répondre à mes premières questions. Si j'ai raté la création de la séquence lors de la révision du code, j'espère pouvoir la retrouver plus tard si la séquence pose un problème pour les performances de l'application.