Зміст
Оскільки Oracle збирає зразки і записує всі активні сеанси до бази даних, простий запит дозволяє отримати історію операторів SQL за певний період часу.
Oracle записує історичну інформацію SQL у v $ active_session_history (ноутбук з базою даних на 15,4-дюймовому широкоекранному зображенні .shock від Fotolia.com)
Важливість
Oracle автоматично збирає зразки всіх сеансів, які виконуються в базі даних кожну секунду, і зберігає інформацію з історії SQL у вигляді словника даних v $ active_session_history. Це круговий буфер, тому, коли він переповнюється, Oracle автоматично зберігає свою інформацію у вигляді словника даних dba_hist_active_sess_history перед перезаписом.
Функція
Ви можете отримати історію SQL операторів, що виконуються протягом певного періоду часу в базі даних, запитуючи ці два подання. Наприклад, наступний запит повертає список з перших 4000 символів операторів SQL, що виконуються між 9:00 і 9:05 ранку 30 вересня 2010 року:
виберіть a.sql_id, dbms_lob.substr (b.sql_text, 4000,1) з dba_hist_active_sess_history a, dba_hist_sqltext b
де sample_time між to_date ('20100930: 09: 00', 'yyyymmdd: hh24: mi')
і to_date ('20100930: 09: 01', 'yyyymmdd: hh24: mi') і b.sql_id = a.sql_id
об'єднання всіх
виберіть a.sql_id, dbms_lob.substr (b.sql_text, 4000,1) з v $ active_session_history a, v $ sqlarea b
де sample_time між to_date ('20100930: 09: 00', 'yyyymmdd: hh24: mi') і
to_date ('20100930: 09: 01', 'yyyymmdd: hh24: mi') і b.sql_id = a.sql_id
Міркування
Крім того, Oracle генерує погодинну статистику виконання для операторів SQL у своєму автоматичному сховищі робочого навантаження. Ви можете побачити, які оператори SQL вимагають більше ресурсів в даний момент часу, запитуючи подання словника даних dba_hist_sqlstat і dba_hist_snapshot.
Ефекти
Наприклад, наступний запит повертає список операторів SQL, що виконуються між 9 ранку і 10 ранку, крім часу процесора, минулого часу, часу io_wait і кількості доступу до диска. Висновок упорядковано за часом процесора.
виберіть a.sql_id, dbms_lob.substr (b.sql_text, 1000,1), cpu_time_delta, elapsed_time_delta, iowait_delta, disk_reads_delta з dba_hist_sqlstat a, dba_hist_sqltext b, де a.sql_id = b.sql_id і snap_id = (виберіть відмінний snap_id від dba_hist_snapshot де to_Char (begin_interval_time, 'yyyymmdd: hh24: mi') = '20100930: 09: 00' і to_char (end_interval_time, 'yyyymmdd: hh24: mi') = '20100930: 10: 00' замовлення за cpu_time
/