Mariusz Wisnia

Mariusz Wisnia IT, Przedsiębiorstwo
Napraw
Infrastruktury

Temat: Oracle na SUSE - obciążenie CPU

Witam,

od tygodnia zmagam się z problemem na Oracle 9.2.0.8.0 na systemie SUSE (wersji nie pamietam)

Wszystko chodziło jak należy przez kilka ładnych lat (4-5).

Mam dwie instancje: "produkcyjna" i "testowa".
Od czasu do czasu robię export z bazy produkcyjnej do bazy testowej.

Tym razem również robiłem wg. mojej sprawdzonej instrukcji. Wszystko się udało jak zawsze.

Ale pojawił się jeden problem.
Na następny dzień rano system działający na bazie produkcyjnej strasznie spowolnił.
Sprawdziłem użycie dysków twardych. Okazało się że dysk systemowy miał 100% użycia. Więc usunąłem pewne stare backupy. To nie pomogło więc wykonałem restart serwera. No i uważałem że było po sprawie bo wszystko wróciło do normy. Obciążenie CPU poprzez proces oracle wynisił około 3-15%.

I tak mam codziennie. Zauważyłem, że tak się dzieje od godziny 5:00. proces oracle obciąża procesor 30-50-95% nawet gdy nikt nie jest zalogowany.
Zamknięcie bazy danych jest czasem niemożliwe albo strasznie długo trwa. (loguje się na oracle i daje polecenie dbshut).
Dopiero zalogowanie sie na sqlplus i wydanie polecenia shutdown abort zamyka bazę.
Ale tak zamknięta baza włącza się ponownie z problemem obciążającym CPU.

Co robić???? Na programie ciężko wystawiać podstawowe dokumenty RW, PW, FV.
Od czego zacząć?
Mariusz Wisnia

Mariusz Wisnia IT, Przedsiębiorstwo
Napraw
Infrastruktury

Temat: Oracle na SUSE - obciążenie CPU

Dodam jeszcze że serwis opiekujący się aplikacją przed tą "awarią" robił jakieś modyfikacje na trigerach. Czy to może mieć wpływ?
Mariusz Wisnia

Mariusz Wisnia IT, Przedsiębiorstwo
Napraw
Infrastruktury

Temat: Oracle na SUSE - obciążenie CPU


Obrazek

Screen przedstawiający część procesów - w tym oracle który akurat wynosi małą wartość obciążenie CPU. Zaledwie 11%. A po chwili 90% przez dłuższy czas.

Dodam, że użytkowników korzystających z oracle jest 25 jednocześnie.Ten post został edytowany przez Autora dnia 18.11.13 o godzinie 08:56
Paweł Grzegorz Kwiatkowski

Paweł Grzegorz Kwiatkowski Architekt
oprogramowania,
Ericsson

Temat: Oracle na SUSE - obciążenie CPU

Ja bym zaczął od:
1) v$process -- namierzenie struktury procesu, który intensywnie korzysta z CPU
2) v$session - namierzenie sesji, która jest powiązana z procesem

Co robi sesja?

-- edited
Od strony OS, może jeszcze statystyki wywołań systemowych:
strace -c -p <pid> zbierane przez "jakiś czas" (=raczej kilkanaście sekund niż minuty/godziny).Ten post został edytowany przez Autora dnia 18.11.13 o godzinie 09:04
Mariusz Wisnia

Mariusz Wisnia IT, Przedsiębiorstwo
Napraw
Infrastruktury

Temat: Oracle na SUSE - obciążenie CPU

Nieznane polecenia.

Ani w bashu ani w sqlplus.
Mariusz Wisnia

Mariusz Wisnia IT, Przedsiębiorstwo
Napraw
Infrastruktury

Temat: Oracle na SUSE - obciążenie CPU

oradb:~ # strace -c -p 13708
Process 13708 attached - interrupt to quit
Process 13708 detached
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
91.35 3.164007 460 6879 pread
8.59 0.297605 9 34400 gettimeofday
0.06 0.002066 295 7 semctl
------ ----------- ----------- --------- --------- ----------------
100.00 3.463678 41286 total
oradb:~ #

Pomiar trwał 15 sekund.

konto usunięte

Temat: Oracle na SUSE - obciążenie CPU

Jeśli masz zainstalowanego statspacka (jeśli nie to zainstaluj) i zrób zrzut z max 60 minut.
Pokaż go to zobaczymy co tak zjada te zasoby.
Paweł Grzegorz Kwiatkowski

Paweł Grzegorz Kwiatkowski Architekt
oprogramowania,
Ericsson

Temat: Oracle na SUSE - obciążenie CPU

Wygląda, że ten proces oraclowy dużo czyta (>90% to wywołania pread).

Może leci jakieś zapytanie zasobożerne:

SELECT t.sql_text,
o.object_type,
o.object_name,
s.*
FROM v$session s
LEFT OUTER JOIN dba_objects o
ON (o.object_id=s.row_wait_Obj#)
LEFT OUTER JOIN v$sql t
ON t.sql_id=s.sql_id,
v$process p
WHERE p.spid=<twoj_pid>
AND p.addr =s.paddr;
Mariusz Wisnia

Mariusz Wisnia IT, Przedsiębiorstwo
Napraw
Infrastruktury

Temat: Oracle na SUSE - obciążenie CPU

Select * from v$process

ADDR PID SPID USERNAME SERIAL# TERMINAL PROGRAM TRACEID BACKGROUND LATCHWAIT LATCHSPIN PGA_USED_MEM PGA_ALLOC_MEM PGA_FREEABLE_MEM PGA_MAX_MEM

00000000BA3C68E0 1 0 PSEUDO 0 0 0 0
00000000BA3C6E40 2 13690 oracle 1 UNKNOWN oracle@oradb (PMON) 1 146477 212701 0 212701
00000000BA3C73A0 3 13692 oracle 1 UNKNOWN oracle@oradb (DBW0) 1 167869 1391965 0 1393141
00000000BA3C7900 4 13694 oracle 1 UNKNOWN oracle@oradb (LGWR) 1 4387541 5608805 0 5608805
00000000BA3C7E60 5 13696 oracle 1 UNKNOWN oracle@oradb (CKPT) 1 167117 1377317 0 1394277
00000000BA3C83C0 6 13698 oracle 1 UNKNOWN oracle@oradb (SMON) 1 417269 1418733 0 2074093
00000000BA3C8920 7 13700 oracle 1 UNKNOWN oracle@oradb (RECO) 1 221453 286837 0 286837
00000000BA3C8E80 8 13702 oracle 1 UNKNOWN oracle@oradb (CJQ0) 151901 221301 0 221301
00000000BA3C93E0 9 13704 oracle 1 UNKNOWN oracle@oradb (QMN0) 481637 682077 131072 682077
00000000BA3C9940 10 13810 oracle 4 UNKNOWN oracle@oradb (TNS V1-V3) 1207301 1371005 0 6679421
00000000BA3C9EA0 11 13708 oracle 1 UNKNOWN oracle@oradb (J000) 27959285 73769981 15269888 73769981
00000000BA3CA400 12 13812 oracle 2 UNKNOWN oracle@oradb (TNS V1-V3) 1923941 2546101 131072 5233077
00000000BA3CA960 13 13814 oracle 2 UNKNOWN oracle@oradb (TNS V1-V3) 1660269 1945173 131072 3550813
00000000BA3CAEC0 14 13804 oracle 1 UNKNOWN oracle@oradb (TNS V1-V3) 1722301 1847477 0 4075701
00000000BA3CB420 15 13806 oracle 1 UNKNOWN oracle@oradb (TNS V1-V3) 2886301 3027125 0 4665525
00000000BA3CB980 16 13808 oracle 1 UNKNOWN oracle@oradb (TNS V1-V3) 1115877 1497133 262144 2438501
00000000BA3CBEE0 17 13816 oracle 1 UNKNOWN oracle@oradb (TNS V1-V3) 603253 879781 196608 879781
00000000BA3CC440 18 13818 oracle 1 UNKNOWN oracle@oradb (TNS V1-V3) 3383013 5103941 327680 27255109
00000000BA3CC9A0 19 13820 oracle 1 UNKNOWN oracle@oradb (TNS V1-V3) 603253 879781 196608 879781
00000000BA3CCF00 20 13822 oracle 1 UNKNOWN oracle@oradb (TNS V1-V3) 2885413 7113709 0 25201645
00000000BA3CD460 21 13824 oracle 1 UNKNOWN oracle@oradb (TNS V1-V3) 2729357 4263997 458752 8613549
00000000BA3CD9C0 22 13826 oracle 1 UNKNOWN oracle@oradb (TNS V1-V3) 1466469 1846877 262144 3092061
00000000BA3CDF20 23 13828 oracle 1 UNKNOWN oracle@oradb (TNS V1-V3) 1632293 2444589 589824 3591373
00000000BA3CE480 24 14274 oracle 4 UNKNOWN oracle@oradb (TNS V1-V3) 1584805 1913013 196608 6959285
00000000BA3CE9E0 25 13856 oracle 2 UNKNOWN oracle@oradb (TNS V1-V3) 1022309 1223773 0 3541997
00000000BA3CEF40 26 13834 oracle 1 UNKNOWN oracle@oradb (TNS V1-V3) 2706117 3519245 196608 7189261
00000000BA3CF4A0 27 13836 oracle 1 UNKNOWN oracle@oradb (TNS V1-V3) 4735477 19732509 14614528 19863325
00000000BA3CFA00 28 14935 oracle 14 UNKNOWN oracle@oradb (TNS V1-V3) 268941 1312733 917504 1312733
00000000BA3CFF60 29 15009 oracle 19 UNKNOWN oracle@oradb (TNS V1-V3) 694749 972837 65536 972837
00000000BA3D04C0 30 13842 oracle 1 UNKNOWN oracle@oradb (TNS V1-V3) 1796645 2618029 589824 2880173
00000000BA3D0A20 31 13844 oracle 1 UNKNOWN oracle@oradb (TNS V1-V3) 2373669 2554197 65536 3733845
00000000BA3D0F80 32 13846 oracle 1 UNKNOWN oracle@oradb (TNS V1-V3) 6320581 6721925 131072 9769349
00000000BA3D14E0 33 13848 oracle 1 UNKNOWN oracle@oradb (TNS V1-V3) 960701 1324397 262144 2176365
00000000BA3D1A40 34 13850 oracle 1 UNKNOWN oracle@oradb (TNS V1-V3) 682069 912253 0 9104253
00000000BA3D1FA0 35 13852 oracle 1 UNKNOWN oracle@oradb (TNS V1-V3) 1125765 1847029 589824 1978101
00000000BA3D2500 36 13858 oracle 1 UNKNOWN oracle@oradb (TNS V1-V3) 1374685 1543157 0 4951029
00000000BA3D2A60 37 13861 oracle 1 UNKNOWN oracle@oradb (TNS V1-V3) 1211885 1716413 393216 3879101
00000000BA3D2FC0 38 14032 oracle 3 UNKNOWN oracle@oradb (TNS V1-V3) 1536109 1978565 327680 4992621
00000000BA3D3520 39 13866 oracle 1 UNKNOWN oracle@oradb (TNS V1-V3) 603261 879789 196608 879789
00000000BA3D3A80 40 13868 oracle 1 UNKNOWN oracle@oradb (TNS V1-V3) 3151189 4645197 0 21487949
00000000BA3D3FE0 41 14240 oracle 4 UNKNOWN oracle@oradb (TNS V1-V3) 2234925 3313149 0 10980861
00000000BA3D4AA0 43 15155 oracle 13 UNKNOWN oracle@oradb (TNS V1-V3) 2183989 2621973 196608 3119661
00000000BA3D5000 44 14292 oracle 4 UNKNOWN oracle@oradb (TNS V1-V3) 1407133 1560877 0 3854637
00000000BA3D5560 45 13965 oracle 2 UNKNOWN oracle@oradb (TNS V1-V3) 603253 879781 196608 879781
00000000BA3D5AC0 46 14662 oracle 13 UNKNOWN oracle@oradb (TNS V1-V3) 3101661 3761533 327680 3761533
00000000BA3D6020 47 14529 oracle 18 UNKNOWN oracle@oradb (TNS V1-V3) 2068701 2715453 393216 3463005
00000000BA3D6580 48 13985 oracle 2 UNKNOWN oracle@oradb (TNS V1-V3) 1061341 1257053 65536 3485277
00000000BA3D6AE0 49 13905 oracle 1 UNKNOWN oracle@oradb (TNS V1-V3) 1052117 1191005 0 2436189
00000000BA3D7040 50 13907 oracle 1 UNKNOWN oracle@oradb (TNS V1-V3) 2312525 2419581 0 3664765
00000000BA3D75A0 51 13909 oracle 1 UNKNOWN oracle@oradb (TNS V1-V3) 784573 1521485 589824 1980237
00000000BA3D7B00 52 15028 oracle 9 UNKNOWN oracle@oradb (TNS V1-V3) 876717 1207461 131072 12283045
00000000BA3D8060 53 13967 oracle 2 UNKNOWN oracle@oradb (TNS V1-V3) 945509 1149933 0 10193901
00000000BA3D85C0 54 13987 oracle 4 UNKNOWN oracle@oradb (TNS V1-V3) 960877 1455461 393216 3028325
00000000BA3D9080 56 14471 oracle 17 UNKNOWN oracle@oradb (TNS V1-V3) 603253 879781 196608 879781
00000000BA3D95E0 57 15007 oracle 13 UNKNOWN oracle@oradb (TNS V1-V3) 1768013 2887861 0 4460725
00000000BA3D9B40 58 14122 oracle 2 UNKNOWN oracle@oradb (TNS V1-V3) 1523933 1748565 65536 3550813
00000000BA3DA0A0 59 14565 oracle 3 UNKNOWN oracle@oradb (TNS V1-V3) 3974517 4660749 196608 5512717
00000000BA3DAB60 61 14337 oracle 1 UNKNOWN oracle@oradb (TNS V1-V3) 949149 1084397 0 2198509
00000000BA3DB0C0 62 14473 oracle 2 UNKNOWN oracle@oradb (TNS V1-V3) 1727037 3358717 1048576 5999597
00000000BA3DB620 63 14421 oracle 3 UNKNOWN oracle@oradb (TNS V1-V3) 694757 1521005 589824 1979757
00000000BA3DBB80 64 14349 oracle 1 UNKNOWN oracle@oradb (TNS V1-V3) 960701 1127781 65536 2307429
00000000BA3DD100 68 14359 oracle 1 UNKNOWN oracle@oradb (TNS V1-V3) 603253 879781 196608 879781
00000000BA3DD660 69 14361 oracle 1 UNKNOWN oracle@oradb (TNS V1-V3) 1018509 1346541 0 9735149
00000000BA3DDBC0 70 14415 oracle 3 UNKNOWN oracle@oradb (TNS V1-V3) 883541 1477621 458752 2198517
00000000BA3DE120 71 14413 oracle 2 UNKNOWN oracle@oradb (TNS V1-V3) 2430021 2571317 0 5127221
00000000BA3DE680 72 14427 oracle 2 UNKNOWN oracle@oradb (TNS V1-V3) 695333 1960829 1048576 1960829
00000000BA3DEBE0 73 15143 oracle 6 UNKNOWN oracle@oradb (TNS V1-V3) 960733 1193317 131072 2241893
00000000BA3DF6A0 75 14621 oracle 5 UNKNOWN oracle@oradb (TNS V1-V3) 1134165 1298125 0 3919565
00000000BA3DFC00 76 14567 oracle 3 UNKNOWN oracle@oradb (TNS V1-V3) 1357237 1907213 262144 3144205
00000000BA3E0160 77 14623 oracle 5 UNKNOWN oracle@oradb (TNS V1-V3) 895357 1062245 65536 3028325
Paweł Grzegorz Kwiatkowski

Paweł Grzegorz Kwiatkowski Architekt
oprogramowania,
Ericsson

Temat: Oracle na SUSE - obciążenie CPU

Całe v$process nie było potrzebne :-)

Ale wygląda, że

00000000BA3C9EA0 11 13708 oracle 1 UNKNOWN oracle@oradb (J000) 27959285 73769981 15269888 73769981


to jakiś job (wnioskując po identyfikatorze J000).

Joby, które lecą aktualnie:

select j.* from dba_jobs_running jr, dba_jobs j where jr.job=j.job;
Mariusz Wisnia

Mariusz Wisnia IT, Przedsiębiorstwo
Napraw
Infrastruktury

Temat: Oracle na SUSE - obciążenie CPU

Paweł Grzegorz K.:
Wygląda, że ten proces oraclowy dużo czyta (>90% to wywołania pread).

Może leci jakieś zapytanie zasobożerne:

SELECT t.sql_text,
o.object_type,
o.object_name,
s.*
FROM v$session s
LEFT OUTER JOIN dba_objects o
ON (o.object_id=s.row_wait_Obj#)
LEFT OUTER JOIN v$sql t
ON t.sql_id=s.sql_id,
v$process p
WHERE p.spid=<twoj_pid>
AND p.addr =s.paddr;
Krzyczy że brak s.sql_id

i teraz patrze, z nieznanych mi przyczyn proces oracle wrócił do normalności.
Obciążenie CPU wynosi 0.3 - 6% i zaraz spada do 0.

A jutro będzie powtórka z rozrywki.
Mariusz Wisnia

Mariusz Wisnia IT, Przedsiębiorstwo
Napraw
Infrastruktury

Temat: Oracle na SUSE - obciążenie CPU

Paweł Grzegorz K.:
Całe v$process nie było potrzebne :-)

Ale wygląda, że

00000000BA3C9EA0 11 13708 oracle 1 UNKNOWN oracle@oradb (J000) 27959285 73769981 15269888 73769981


to jakiś job (wnioskując po identyfikatorze J000).

Joby, które lecą aktualnie:

select j.* from dba_jobs_running jr, dba_jobs j where jr.job=j.job;
W tej chwili SQL zwraca pustą tabele. Czyli brak job-ów.
Paweł Grzegorz Kwiatkowski

Paweł Grzegorz Kwiatkowski Architekt
oprogramowania,
Ericsson

Temat: Oracle na SUSE - obciążenie CPU

Zobacz z dba_jobs, co się uruchamia rano, bo wygląda, że to jakiś job.
Mariusz Wisnia

Mariusz Wisnia IT, Przedsiębiorstwo
Napraw
Infrastruktury

Temat: Oracle na SUSE - obciążenie CPU

Już chyba pomału widać światełko w tunelu.

dba_jobs
http://www.sendspace.com/file/0ltffk

Tak jak mówiłem, około 5:00 zauważam obciążenie CPU poprzez oracle.
Paweł Grzegorz Kwiatkowski

Paweł Grzegorz Kwiatkowski Architekt
oprogramowania,
Ericsson

Temat: Oracle na SUSE - obciążenie CPU

No to już masz punkt zaczepienia, tj. joby generują spore obciążenie. Być może zapytania mają nieoptymalne plany wykonania i należałoby to poprawić. Może być tak, że joby muszą wykonać więcej roboty i nic więcej nie da się wycisnąć wydajnościowo ;-)
Mariusz Wisnia

Mariusz Wisnia IT, Przedsiębiorstwo
Napraw
Infrastruktury

Temat: Oracle na SUSE - obciążenie CPU

Paweł, bardzo dziękuję Ci za pomoc bo już "coś" wiem.

Teraz mam punkt zaczepienia i sprawę zgłosiłem na serwis aplikacji.
Już mnie nie odeślą do support.oracle.com bo to w końcu ich job-y.

Jeszcze raz wielkie dzięki.
Mariusz Wisnia

Mariusz Wisnia IT, Przedsiębiorstwo
Napraw
Infrastruktury

Temat: Oracle na SUSE - obciążenie CPU

Jeszcze się zastanawiam nad czymś takim jak:
- ręczne wywołanie danego joba (aby sprawdzić jak długo działa)
- przestawienie czasu startu joba (skoro tak długo działa to może niech wcześniej zaczyna np. o 1:00)

Czy mógłbyś mi poradzić jak to wykonać?
Paweł Grzegorz Kwiatkowski

Paweł Grzegorz Kwiatkowski Architekt
oprogramowania,
Ericsson

Temat: Oracle na SUSE - obciążenie CPU

Mariusz W.:
Jeszcze się zastanawiam nad czymś takim jak:
- ręczne wywołanie danego joba (aby sprawdzić jak długo działa)
- przestawienie czasu startu joba (skoro tak długo działa to może niech wcześniej zaczyna np. o 1:00)

Czy mógłbyś mi poradzić jak to wykonać?

Nie wiem czy system przewiduje ręczne wywołanie joba, czy są jakieś zależności (np. job sprawdza czy wykonał się wcześniej jakiś inny job).

Zakładając, że możesz wielokrotnie uruchamiać JOBa, z sqlplusa czas wykonania sprawdzisz via:


set timing on
exec procedura_joba;


albo

set timing on
begin
<blok plsql>
end;
/


Ja bym jednak skupił się na określeniu, który to job generuje takie obciążenie i sprawdził co ten job robi i jakie są plany zapytań, czy jest przetwarzanie "row-by-row" czy jakieś inne cuda wianki.

Do zarządzania jobami masz pakiet DBMS_JOB (usuwanie joba, tworzenia, modyfikacja atrybutów etc.), np. http://psoug.org/reference/dbms_job.html. Ten post został edytowany przez Autora dnia 18.11.13 o godzinie 14:04
Mariusz Wisnia

Mariusz Wisnia IT, Przedsiębiorstwo
Napraw
Infrastruktury

Temat: Oracle na SUSE - obciążenie CPU

Dostałem pewną odpowiedź od serwisu aplikacji:

Witam,

Przekazuje odpowiedz specjalisty ds. Oracle:

"Najprawdopodobniej przyczyna spowolnienia jest wykonywanie zadania naliczajacego statystyki systemowe poniewaz to bardzo kosztowne operacje. Mozna spokojnie przeniesc wykonanie tego zadania na wczesniejsza godzine tak aby skonczylo sie przed najwiekszym, naturalnym obciazeniem bazy danych Oracle. Osobiscie wykonanie tego zadanie przenioslbym na weekend kiedy spada ilosc polaczen do bazy albo wrecz wygasa. No chyba, ze w czasie doby zmienia sie wiecej niz 5-10% danych w calej bazie - ale nie sadze, zeby tak bylo."


Paweł, w takim razie w jaki sposób przenieść JOBa na wcześniejszą godzinę?
Czy można by było ustawić go jak w CRONie? Czyli np. wt(1:00),czw(1:0) i sob(1:00)
Mariusz Wisnia

Mariusz Wisnia IT, Przedsiębiorstwo
Napraw
Infrastruktury

Temat: Oracle na SUSE - obciążenie CPU

I jeszcze jedno,,, jak jutro rano zastanę JOBa w pracy to czy można go "zabić" ?
Czy jest to jakoś specjalnie niebezpieczne i jak to zrobić.

Z góry dzięki za pomoc!

Następna dyskusja:

Administrator Oracle




Wyślij zaproszenie do