Obsah
Pretože Oracle zhromažďuje vzorky a zapisuje všetky aktívne relácie do databázy, jednoduchý dotaz vám umožňuje načítať históriu príkazov SQL za dané časové obdobie.
Oracle píše historické informácie SQL do v $ active_session_history (laptop s databázovým záznamom na 15,4 "širokouhlom obraze .shock z Fotolia.com)
dôležitosť
Oracle automaticky zhromažďuje vzorky všetkých relácií, ktoré bežia v databáze každú sekundu a ukladá informácie z histórie SQL v zobrazení dátového slovníka v $ active_session_history. Toto je kruhová vyrovnávacia pamäť, takže keď sa naplní, Oracle automaticky uloží svoje informácie do zobrazenia dátového slovníka dba_hist_active_sess_history pred jeho prepísaním.
funkcie
Môžete získať históriu príkazov SQL vykonaných v určitom časovom období v databáze dotazovaním týchto dvoch zobrazení. Napríklad nasledujúci dotaz vráti zoznam prvých 4000 znakov príkazov SQL vykonaných medzi 9.00 a 9.00 hod. 30. septembra 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 medzi to_date ('20100930: 09: 00', 'yyyymmdd: hh24: mi')
a to_date ('20100930: 09: 01', 'yyyymmdd: hh24: mi') a b.sql_id = a.sql_id
únie
vyberte a.sql_id, dbms_lob.substr (b.sql_text, 4000,1) z v $ active_session_history a, v $ sqlarea b
kde sample_time medzi 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
Okrem toho Oracle generuje hodinovú štatistiku vykonávania príkazov SQL vo svojom úložisku Automatic Workload Repository. Môžete zistiť, ktoré príkazy SQL vyžadujú v určitom čase viac prostriedkov, a to tak, že zadáte dotaz dba_hist_sqlstat a dba_hist_snapshot.
účinky
Napríklad nasledujúci dotaz vráti zoznam príkazov SQL vykonaných medzi 9:00 a 10:00, okrem času CPU, uplynutého času, času io_wait a počtu prístupov na disk. Výstup je usporiadaný podľa č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' poradie podľa cpu_time
/