Temat: statystyki systemowe i... wydajność spada na łeb.
Musisz podać więcej detali:
1) Wersja bazy
2) System operacyjny
Piszesz:
3) po zebraniu statystyk systemowych wydajność bazy poleciała okrutnie na łeb na szyję (koszty zapytań poszybowały w górę)
Czy plany zapytań uległy zmianie? 10g jest podatne na bind variable peeking. Kiedyś miałem taką sytuację, że zapytanie miało 2 różne plany wykonań, pomogło skasowanie statystyk na tabeli i zamrożenie ich. NUM_ROWS było null i optymalizotor wybierał najlepszy plan wykonania
4) ale dlaczego tak radykalnie spada wydajność jak zaczyna się naprawdę duże obciążenie.
Co to znaczy radykalnie spada wydajność? Gdzie jest wąskie gardło? CPU, memory, I/O ?
5) dlaczego jak puścimy sobie jakieś dłuższe zapytanie na bazie na której nikogo poza nami nie ma, i to zapytanie wisi na sequential read. Wykresiki w EM pokazują nam zużycie 20%
20% czego? CPU (zielone) ? To normalne jeśli Twój proces czeka na "sequential read" czyli, np czyta po indeksie, to w tym czasie procesor czeka na I/O. Jak sobie w tym czasie sprawdzisz poleceniem top/sar/mpstat to zobacz co statystyki wątka CPU.
6) Dodanie odpowiednio dużego parallel przyspiesza wykonanie tego zapytania (zyżycie w EM 80%)
To raczej normalne.
7) dlaczego jeżeli jesteśmy totalnie sami na bazie, to cała para z procków i macierzy nie idzie na wykonanie tego jednego zapytania, tylko 80% zasobów jest na wczasach?
jeśli nie zrównoleglasz zapytania, to jest ono obsługiwane przez jeden wątek.
Zrób trace za pomocą
alter session set timed_statistics = true;
alter session set statistics_level=ALL;
alter session set max_dump_file_size=unlimited;
alter session set tracefile_identifier='asynch';
alter session set events = '10046 trace name context forever, level 12 : 10053 trace name context forever, level 1';
---> Twoje zapytanie <---
select * from dual;
alter session set events = '10046 trace name context off : 10053 trace name context off ';
exit;
Performance tuning to dluga i ciezka droga, a na koncu drogi nie zawsze jest sukces. :)