Inhoud
Omdat Oracle monsters verzamelt en alle actieve sessies naar de database schrijft, kunt u met een eenvoudige query de geschiedenis van de SQL-instructie ophalen voor een bepaalde periode.
Oracle schrijft historische SQL-informatie naar v $ active_session_history (laptop met databaserecord op 15,4 "breedbeeld door .shock van Fotolia.com)
belang
Oracle verzamelt automatisch monsters van alle sessies die elke seconde in de database worden uitgevoerd en slaat informatie op uit de SQL-geschiedenis in de data dictionary-weergave v $ active_session_history. Dit is een circulaire buffer, dus wanneer deze vol raakt, slaat Oracle automatisch zijn informatie op in de data-view dba_hist_active_sess_history voordat deze wordt overschreven.
functie
U kunt een geschiedenis van SQL-instructies krijgen die gedurende een bepaalde periode in de database zijn uitgevoerd door deze twee weergaven te raadplegen. De volgende query retourneert bijvoorbeeld de lijst met de eerste 4000 tekens van SQL-instructies die zijn uitgevoerd tussen 9.00 uur en 9.05 uur op 30 september 2010:
selecteer a.sql_id, dbms_lob.substr (b.sql_text, 4000,1) uit dba_hist_active_sess_history a, dba_hist_sqltext b
waarbij sample_time between to_date ('20100930: 09: 00', 'yyyymmdd: hh24: mi')
en to_date ('20100930: 09: 01', 'yyyymmdd: hh24: mi') en b.sql_id = a.sql_id
unie allemaal
selecteer a.sql_id, dbms_lob.substr (b.sql_text, 4000,1) uit v $ active_session_history a, v $ sqlarea b
waarbij sample_time tussen to_date ('20100930: 09: 00', 'yyyymmdd: hh24: mi') en
to_date ('20100930: 09: 01', 'yyyymmdd: hh24: mi') en b.sql_id = a.sql_id
overwegingen
Bovendien genereert Oracle uuruitvoeringsstatistieken voor SQL-instructies in de Automatic Workload Repository. U kunt zien welke SQL-instructies op een bepaald moment meer bronnen vereisen door de weergaven van de gegevensbibliotheken dba_hist_sqlstat en dba_hist_snapshot te doorzoeken.
effecten
De volgende query retourneert bijvoorbeeld een lijst met SQL-instructies die zijn uitgevoerd tussen 9.00 en 10.00 uur, naast de CPU-tijd, de verstreken tijd, de io_wait-tijd en het aantal schijftoegangen. De uitvoer wordt gesorteerd op CPU-tijd.
selecteer a.sql_id, dbms_lob.substr (b.sql_text, 1000,1), cpu_time_delta, elapsed_time_delta, iowait_delta, disk_reads_delta van dba_hist_sqlstat a, dba_hist_sqltext b waarbij a.sql_id = b.sql_id en snap_id = (selecteer distinct snap_id van dba_hist_snapshot waar to_Char (begin_interval_time, 'yyyymmdd: hh24: mi') = '20100930: 09: 00' en to_char (end_interval_time, 'yyyymmdd: hh24: mi') = '20100930: 10: 00' order by cpu_time
/