Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Identyfikowanie rywalizacji sekwencji ASH w RAC

W rozdziale 3 Oracle RAC Performance Tuning pokazałem, jak niewłaściwe wartości CACHE dla sekwencji mogą powodować niską wydajność Oracle RAC. Pokazałem również, jak rozpoznać rywalizację o sekwencję, patrząc na zdarzenia oczekiwania sesji.

Dziś pracowałem z developerem, który tworzył nową sekwencję. Deweloper miał wartość CACHE równą 100, co sprawiło, że początkowo była to zbyt niska wartość. Zauważyłem to niskie ustawienie podczas przeglądu kodu. Deweloper uważa, że ​​wartość CACHE jest w porządku, ale nie jestem przekonany. Przetestujemy to pod obciążeniem, aby sprawdzić, czy należy dostosować wartość CACHE.

W międzyczasie zastanawiałem się „a co, jeśli przegapię to podczas przeglądu kodu?” I kolejne pytanie:„A co, jeśli nie zauważymy niczego podczas testowania obciążenia?” Chcę móc cofnąć się i określić, które sekwencje, jeśli w ogóle, byłyby kandydatami do niewłaściwego ustawienia pamięci podręcznej. Z pewnością mógłbym śledzić sesje i analizować pliki śledzenia, ale byłoby to zbyt bolesne. Opracowałem więc skrypt, który mogę uruchomić w historii aktywnej sesji, aby pomóc określić sekwencje kandydujące.

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;

Nie jest to nauka doskonała ze względu na charakter kolekcji ASH. Sesja, w której występuje rywalizacja, musiałaby zostać przechwycona we właściwym czasie, aby znaleźć się w tabeli DBA_HIST_ACTIVE_SESSION_HISTORY. Ale powyższa instrukcja SQL daje mi kilka kandydatów do rozważenia. Nie każda sekwencja dostępna w zwracanych instrukcjach SQL musi mieć skorygowane wartości CACHE. Potrzebna byłaby dalsza analiza. Daje mi to jednak listę rzeczy do rozważenia. I może pomóc odpowiedzieć na moje początkowe pytania. Jeśli przegapiłem tworzenie sekwencji podczas przeglądu kodu, mam nadzieję, że znajdę go później, jeśli sekwencja stanowi problem z wydajnością aplikacji.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. cx_Oracle:Jak mogę otrzymać każdy wiersz jako słownik?

  2. Napraw błąd „ORA-01790:wyrażenie musi mieć ten sam typ danych co odpowiadające wyrażenie”

  3. 9 najczęściej zadawanych zapytań dotyczących drukarek Oracle Apps

  4. Wydano SQL Developer 4.1.3

  5. Autoinkrementacja w Oracle do już utworzonej tabeli