R12.1/R12.2 to dość duża i czasochłonna aktualizacja. Musimy znaleźć cały długo działający sql, aby rozwiązać problemy z wydajnością aktualizacji R12.2. Ponieważ każda iteracja zajmuje dużo czasu, jest to ważne, staraliśmy się znaleźć problemy z wydajnością w mniejszej liczbie iteracji i odpowiednio je naprawić
Oto najczęstsze przydatne zapytania AWR do rozwiązywania problemów z wydajnością aktualizacji R12.2
Jeśli SQL nadal znajduje się w pamięci (pamięć podręczna kursora), do identyfikacji długotrwałych zapytań SQL, które mogły nie zostać jeszcze zapisane w AWR (przy ostatnim zrzucie)
SELECT * FROM (SELECT ss.sql_id, ROUND(SUM(ss.elapsed_time/1000000),0) elapsed_time_secs, ROUND(SUM(ss.cpu_time/1000000),0) cpu_time_secs, SUM(ss.disk_reads) disk_reads, SUM(ss.direct_writes) direct_writes, SUM(ss.buffer_gets) buffer_gets, SUM(ss.px_servers_executions) px_server_execs, SUM(ss.rows_processed) rows_processed, SUM(ss.executions) realizacja, SUMwait_ssectime ss.sharable_mem) sharable_mem, SUMA(ss.total_sharable_mem) total_sharable_mem Z v$sqlstats ss GRUPA WG ss.sql_id ZAMÓW WEDŁUG 2 DES) GDZIE WIERSZ <=100;
Następujący skrypt SQL zgłosi najdłużej działający kod SQL między dwoma migawkami AWR
SELECT * FROM (SELECT dhs.sql_id, ROUND(SUM(dhs.elapsed_time_delta/1000000),0) elapsed_time_secs, ROUND(SUM(dhs.cpu_time_delta/1000000),0) cpu_time_secs, SUM(dhs.disk_reads_delta) SUM(dhs.buffer_gets_delta) buffer_gets, SUM(dhs.px_servers_execs_delta) px_server_execs, SUM(dhs.rows_processed_delta) rows_processed, SUM(dhs.executions_delta) egzekucje, ROUND (S. (dhs.clwait_delta/1000000),0) clwait_secs, ROUND(SUM(dhs.ccwait_delta/1000000),0) ccwait_secs, ROUND(SUM(dhs.apwait_delta/1000000),0) apwait_secs Z dba_hist_sqlstat dhs ,v$Edatabase d WHER dhs.dbid =d.dbid AND snap_id> &begin_snap i snap_id <=&end_snap GRUPA WG dhs.sql_id ZAMÓW WEDŁUG 2 DESC) GDZIE ROWNUM <=100;
Gdzie &begin_snap i &end_snap to początkowe i końcowe identyfikatory migawki.
Dane wyjściowe tej instrukcji będą wyglądać podobnie do następującego:
SQL_ID ELAPSED_TIME_SECS CPU_TIME_SECS DISK_READS BUFFER_GETS…. ------------- ----------------- --------------- ----- ----- ----------- …. 5vaxut40xbrmr 367440 42999 34838244 3795838289 …. 943ra4b7zg28x 264369 170788 441127 562033013 …. fkkrk9frwqfdr 70370 6448 3599284 469639133 …. 4847s6dt6sds9 68298 38896 7125573 1327384554 …. 2k3uw8n473r30 63600 27402 20043712 587615960 ….
Uwaga:Czas, który upłynął to maksymalny czas, jaki upłynął dla wszystkich pracowników danej pracy.
Enterprise Manager może być również używany do identyfikowania kosztownego SQL, gdy się pojawia.
Uzyskaj raport kursora wyświetlania dla długotrwałego kodu SQL
W tym przypadku STATISTICS_LEVEL=ALL i _rowsource_execution_statistics =TRUE. Powinno być uruchamiane bez opóźnień, aby uzyskać wszystkie informacje, w przeciwnym razie informacje te zostaną usunięte z SGA
SET strony 0 SET wiersze 300 SET LONG 10000SET LONGCHUNKSIZE 10000 SPOOL.txt SELECT * FROM TABLE(dbms_xplan.display_cursor(' ', NULL, 'ALL +ALLSTATS')); WYŁĄCZENIE SZPULI;
Jeśli kod SQL nie znajduje się już w pamięci, ale znajduje się w AWR, użyj zamiast tego raportu Wyświetl AWR:
SET strony 0 SET wiersze 300 SET LONG 10000 SET LONGCHUNKSIZE 10000 SZPULA .txt SELECT * FROM TABLE(dbms_xplan.display_awr('', NULL, NULL, 'ALL')); WYŁĄCZENIE SZPULI;
Uwaga:należy pamiętać, że raport Wyświetl AWR (DBMS_XPLAN.DISPLAY_AWR) nie zawiera danych rzeczywistych:nie ma opcji +ALLSTATS i nie ma rzeczywistych statystyk kroków planu wykonania przechowywanych w AWR
Ważna uwaga:kursor wyświetlania i raporty AWR pokazują tylko tekst_sql (pierwsze 1000 znaków), a nie pełny tekst_sql. Tak więc, jeśli to konieczne, uruchom następujący skrypt SQL, aby uzyskać pełny tekst SQL
SET strony 0 SET wiersze 300 SET LONG 10000 SET LONGCHUNKSIZE 10000 SPOOL.txt SELECT sql_id, sql_text, sql_fulltext FROM v$SQL WHERE sql_id =' '; WYŁĄCZENIE SZPULI;
Uzyskaj raport SQL Monitor dla SQL za pomocą zapytania równoległego/DML
Główną zaletą tego jest to, że daje dobry obraz tego, jak równoległy SQL/DML działa na różnych etapach planu i równoległych niewolników
ustaw pulę przycinania przy ustawieniu przycinania na stronach zestawu 0 ustaw długi 10000000 ustaw długi rozmiar kawałka 10000000 ustaw rozmiar linii 200 ustaw termout wyłączony bufor sql_monitor_for_.htm zmienna my_rept CLOB; BEGIN :my_rept :=dbms_sqltune.report_sql_monitor(sql_id => ' ', report_level => 'ALL', type => 'HTML'); KONIEC; / print :my_rept bufor wyłączony; ustaw termin na
Gdzie &begin_snap i &end_snap i są początkowymi i końcowymi identyfikatorami migawki.
Jak sprawdzić, kiedy uruchomiono dany sql
SELECT dhs.sql_id, dsn.snap_id, dsn.begin_interval_time, dsn.end_interval_time, ROUND(SUM(dhs.elapsed_time_delta/1000000),0) elapsed_time_secs FROM dhs dhs_sqlstat dhs dhs. d.dbid AND dsn.snap_id =dhs.snap_id AND dsn.dbid =dhs.dbid AND dsn.instance_number =dhs.instance_number AND dhs.sql_id ='' AND dsn.snap_id> &begin_snap &end_snap GRUPA WG dhs.sql_id, dsn.snap_id, dsn.begin_interval_time, dsn.end_interval_time ZAMÓWIENIE WG dsn.snap_id;
Gdzie &begin_snap i &end_snap to początkowe i końcowe identyfikatory migawki.
Wyniki tej instrukcji będą wyglądać podobnie do następującego:
SQL_ID SNAP_ID BEGIN_INTERVAL_TIME END_INTERVAL_TIME ELAPSED_TIME_SECS 2k3uw8n473r30 8278 04-STY-13 23.00.25.5560 05-STY-13 00.00.21.1620 23123 2k3uw8n473r30 8279 05-STY-13 00.00.Jak znaleźć statystyki CBO w Ebiz Environment
SELECT właściciel, nazwa_tabeli, liczba_wierszy, TO_CHAR(ostatnia_analizowana,'DD-MON-YYYY HH24:MI:SS') ostatnia_analizowana FROM all_tables WHERE właściciel IN (SELECT upper(oracle_username) sname FROM fnd_oracle_userid WHERE oracle_ENonly_id 999 AND read ='U' UNION ALL SELECT DISTINCT upper(oracle_username) sname FROM fnd_oracle_userid a,fnd_product_installations b GDZIE a.oracle_id =b.oracle_id ) ORDER BY właściciel, nazwa_tabeli;Wynik tego stwierdzenia będzie wyglądał podobnie do następującego:
NAZWA_TABELI WŁAŚCICIELI NUM_ROWS LAST_ANALYZED --- --------- ---------- ---------- --- ABM ABM_ACC_MAP_SUM_REP 0 06-DEC-2016 08:46:33 ABM ABM_ACT_ACC_RU_DAT 0 06-DEC-2016 08:46:35 ABM ABM_ACT_STA_RU_DAT 0 06-DEC-2016 08:46:36Jak uzyskać raporty AWR po uaktualnieniu
Raporty AWR można uzyskać za
• Cały okres trwania uaktualnienia.
• Za czas trwania długotrwałych zadań (tj. między migawkami zrobionymi tuż przed rozpoczęciem zadania i tuż po jego zakończeniu) .
• Każda pojedyncza migawka.Jak generować raporty AWR
(1) Przejdź do $ORACLE_HOME/rdbms/admin
(2) Uruchom awrrpt.sql generuj raporty AWR.
(3) Zawsze wybieraj typ raportu HTML.
(4) W instancji Oracle RAC plik awrrpti.sql zwykle wystarcza, ponieważ aktualizacja zostanie uruchomiona tylko na jednym węźle Oracle RAC.
Raporty AWR mogą być zautomatyzowane. Jest to przydatne w przypadku tworzenia dużej liczby raportów AWR, szczególnie w przypadku kolejnych migawek. Zobacz sekcję „Automating AWR Reports” w dokumencie My Oracle Support „Performance Diagnosis with Automatic Workload Repository (Document 1674086.1)”.
Zwróć uwagę, że niektóre stałe obiekty i obiekty słownikowe (w szczególności WRH$_LATCH_CHILDREN, zwłaszcza jeśli Statistics_level =ALL, lub występuje długi okres przechowywania lub krótki interwał migawek) znacznie wzrośnie podczas uaktualniania. Dlatego przed uruchomieniem AWR może być konieczne zebranie ustalonych statystyk obiektów i słowników.Powiązane artykuły
Automatyczne repozytorium obciążeń
Oracle ASH (Historia aktywnej sesji)
Dostrajanie wydajności Oracle
Jak utworzyć zadanie ADDM i sprawdzić jego raport
Jak znaleźć szczegóły sesji w bazie danych Oracle