Conţinut
Deoarece Oracle colectează mostre și scrie toate sesiunile active în baza de date, o interogare simplă vă permite să preluați istoricul instrucțiunilor SQL pentru o anumită perioadă de timp.
Oracle scrie informații istorice SQL la v $ active_session_history (laptop cu înregistrări baze de date pe ecran de 15,4 "pe ecran lat de .shock de la Fotolia.com)
importanță
Oracle colectează automat eșantioane din toate sesiunile care se execută în bază de date în fiecare secundă și salvează informații din istoricul SQL în afișarea dicționarului de date v $ active_session_history. Acesta este un tampon circular, astfel că, atunci când devine plin, Oracle își stochează automat informațiile din vizualizarea dicționarului de date dba_hist_active_sess_history înainte de al suprascrie.
funcție
Puteți obține o istorie a instrucțiunilor SQL executate într-o perioadă de timp în baza de date prin interogarea acestor două vizualizări. De exemplu, următoarea interogare returnează lista primelor 4000 de caractere ale instrucțiunilor SQL executate între 9:00 AM și 9:05 AM pe 30 septembrie 2010:
selectați a.sql_id, dbms_lob.substr (b.sql_text, 4000,1) din dba_hist_active_sess_history a, dba_hist_sqltext b
unde sample_time între to_date ('20100930: 09: 00', 'yyyymmdd: hh24: mi')
și to_date ('20100930: 09: 01', 'yyyymmdd: hh24: mi') și b.sql_id = a.sql_id
uniune tot
selectați a.sql_id, dbms_lob.substr (b.sql_text, 4000,1) din v $ active_session_history a, v $ sqlarea b
unde sample_time între to_date ('20100930: 09: 00', 'yyyymmdd: hh24: mi') și
to_date ('20100930: 09: 01', 'yyyymmdd: hh24: mi') și b.sql_id = a.sql_id
consideraţii
În plus, Oracle generează statistici orare de execuție pentru instrucțiunile SQL în Repositorul său de încărcare automată. Puteți vedea care instrucțiuni SQL necesită mai multe resurse la o anumită oră dată prin interogarea vizualizărilor dicționarului de date dba_hist_sqlstat și dba_hist_snapshot.
efecte
De exemplu, următoarea interogare returnează o listă de instrucțiuni SQL executate între 9am și 10am, în plus față de timpul CPU, timpul scurs, timpul io_wait și numărul de accesări pe disc. Ieșirea este ordonată după ora procesorului.
selectați a.sql_id, dbms_lob.substr (b.sql_text, 1000,1), cpu_time_delta, elapsed_time_delta, iowait_delta, disc_reads_delta din dba_hist_sqlstat a, dba_hist_sqltext b unde a.sql_id = b.sql_id și snap_id = (selectați snap_id distinct din dba_hist_snapshot unde to_Char (start_interval_time, 'yyyymmdd: hh24: mi') = '20100930: 09: 00' și to_char (end_interval_time, 'yyyymmdd: hh24: mi') = '20100930: 10:
/