Oracle Общее (прошедшее) время всех запросов за день - PullRequest
0 голосов
/ 21 февраля 2019

Мне нужно сообщить общее время всех запросов, выполненных определенным модулем за один день.

    -- sum over all queries executed the last 24 hours
   select
         u.username,
         sum(round(v.ELAPSED_TIME / 3600000000 * 60,2)) ELAPSED_TIME_MINUTES,
         sum(round(v.ELAPSED_TIME / 3600000000,2)) ELAPSED_TIME_HOURS,
         v.module
      from gv$sql v
      left join dba_users u
    on v.parsing_user_id = u.user_id
       where u.username like '%XYZ' and module = 'WEBSERVER'
  and to_date(v.FIRST_LOAD_TIME,'yyyy-mm-dd hh24:mi:ss') > (trunc(sysdate,'DD') - interval '1' day)
  group by username,module;

Но я задаю себе следующие вопросы:

  1. имеет ли v $ sql все запросы и как долго?он по крайней мере пуст после очистки общего пула

  2. Есть ли лучший способ рассчитать общее время, затраченное на запросы в определенный период времени?

  3. является FIRST_LOAD_TIME правильное поле, чтобы найти правильный день.В соответствии с Oracle это временная метка времени создания родителя - должно быть правильно?

Спасибо за участие в обсуждении!

1 Ответ

0 голосов
/ 22 февраля 2019
  1. Строки в V $ SQL для некоторых операторов исчезают после их завершения, либо из-за подсказок, либо из-за характера оператора SQL, например, CREATE TABLE пропадает.
  2. Если выустановить MODULE через DBMS_APPLICATION_INFO.SET_MODULE(mod_name, action_name); и получить лицензию на настройку SQL, а затем просто использовать среду автоматического управления рабочей нагрузкой (AWR);он включает в себя информацию о МОДУЛЕ в отчетах, которые он может создать, и дает вам количество выполнений, а также множество другой информации.
  3. FIRST_LOAD_TIME может быть несколько дней назад или несколько минут назад.

Я бы держался подальше от V $ SQL - он слишком динамичен для того, что вы хотите сделать;и используйте SET_MODULE, чтобы установить имя модуля, и, возможно, установить другое имя действия для разных частей вашего кода.

...