sql >> Database >  >> RDS >> Oracle

Identificatie van ASH-sequentieconflicten in RAC

In hoofdstuk 3 van Oracle RAC Performance Tuning heb ik laten zien hoe onjuiste CACHE-waarden voor sequenties slechte prestaties in Oracle RAC kunnen veroorzaken. Ik heb ook laten zien hoe je sequentieconflicten kunt herkennen wanneer je naar de wachtgebeurtenissen van een sessie kijkt.

Vandaag werkte ik met een ontwikkelaar die een nieuwe reeks aan het maken was. De ontwikkelaar had een CACHE-waarde van 100, waardoor ik in eerste instantie een te lage waarde had. Ik zag deze lage instelling tijdens de codebeoordeling. De ontwikkelaar vindt de CACHE-waarde prima, maar ik ben niet overtuigd. We zullen dit onder belasting testen om te zien of de CACHE-waarde moet worden aangepast.

Ondertussen dacht ik “wat als ik dit gemist heb tijdens code review?” En een vervolgvraag, "wat als we niets merkten tijdens het testen van de belasting?" Ik wil terug kunnen gaan en bepalen welke sequenties, indien aanwezig, in aanmerking komen voor een onjuiste CACHE-instelling. Ik zou zeker sessies kunnen traceren en de traceerbestanden kunnen analyseren, maar dat zou te pijnlijk zijn. Dus bedacht ik een script dat ik kan gebruiken tegen de actieve sessiegeschiedenis om de kandidatenreeksen te helpen bepalen.

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;

Dit is geen perfecte wetenschap vanwege de aard van de ASH-collectie. De sessie die de strijd meemaakt, moet op het juiste moment worden opgemerkt om in de tabel DBA_HIST_ACTIVE_SESSION_HISTORY te komen. Maar de bovenstaande SQL-verklaring geeft me enkele kandidaten om te overwegen. Niet voor elke reeks die in de geretourneerde SQL-instructies wordt gebruikt, hoeven de CACHE-waarden te worden aangepast. Verdere analyse zou nodig zijn. Dit geeft me echter wel een lijst van degenen die ik moet overwegen. En het kan helpen bij het beantwoorden van mijn eerste vragen. Als ik het maken van de reeks tijdens de codebeoordeling heb gemist, kan ik deze hopelijk later terugvinden als de reeks een probleem vormt voor de toepassingsprestaties.


  1. Overeenkomstfunctie in Postgres met pg_trgm

  2. CDC inschakelen op een reeks tabellen OF inschakelen op alle tabellen in een database in SQL Server - SQL Server-zelfstudie

  3. SQL door komma's gescheiden rij met Group By-clausule

  4. Hoe gebruik je een externe sleutel in sqlite?