Obsah
Protože Oracle shromažďuje vzorky a zapisuje do databáze všechny aktivní relace, jednoduchý dotaz vám umožní načíst historii příkazů SQL za dané časové období.
Oracle píše historické informace SQL do v $ active_session_history (notebook s databázovým záznamem na 15,4 "širokoúhlém obrazu .shock z Fotolia.com)
Význam
Oracle automaticky sbírá vzorky všech relací, které běží v databázi každou sekundu, a ukládá informace z historie SQL do zobrazení datového slovníku v $ active_session_history. Jedná se o kruhovou vyrovnávací paměť, takže když se naplní, Oracle automaticky uloží své informace do zobrazení datového slovníku dba_hist_active_sess_history před přepsáním.
Funkce
Můžete získat historii příkazů SQL provedených v určitém časovém období v databázi dotazováním těchto dvou pohledů. Následující dotaz například vrátí seznam prvních 4000 znaků příkazů SQL provedených mezi 9:00 a 9:05: 30. září 2010:
vyberte a.sql_id, dbms_lob.substr (b.sql_text, 4000,1) z dba_hist_active_sess_history a, dba_hist_sqltext b
kde sample_time mezi to_date ('20100930: 09: 00', 'yyyymmdd: hh24: mi')
a to_date ('20100930: 09: 01', 'yyyymmdd: hh24: mi') a b.sql_id = a.sql_id
unie
vyberte a.sql_id, dbms_lob.substr (b.sql_text, 4000,1) z v $ active_session_history a, v $ sqlarea b
kde sample_time mezi to_date ('20100930: 09: 00', 'yyyymmdd: hh24: mi') a
to_date ('20100930: 09: 01', 'yyyymmdd: hh24: mi') a b.sql_id = a.sql_id
Úvahy
Kromě toho Oracle generuje hodinové statistiky provádění příkazů SQL v úložišti Automatic Workload Repository. Můžete zjistit, které příkazy SQL vyžadují více zdrojů v daném čase dotazem na zobrazení datového slovníku dba_hist_sqlstat a dba_hist_snapshot.
Účinky
Následující dotaz například vrátí seznam příkazů SQL provedených mezi 9:00 a 10:00, kromě času CPU, uplynulého času, času io_wait a počtu přístupů k disku. Výstup je řazen podle času CPU.
vyberte a.sql_id, dbms_lob.substr (b.sql_text, 1000,1), cpu_time_delta, elapsed_time_delta, iowait_delta, disk_reads_delta z dba_hist_sqlstat a, dba_hist_sqltext b kde a.sql_id = b.sql_id a snap_id = (vyberte odlišný snap_id z dba_hist_snapshot, kde to_Char (begin_interval_time, 'yyyymmdd: hh24: mi') = '20100930: 09: 00' a to_char (end_interval_time, 'yyyymmdd: hh24: mi') = '20100930: 10: 00' pořadí podle cpu_time
/