Как узнать количество выполнений оператора SQL за X часов? - PullRequest
1 голос
/ 03 октября 2019

Я использую oracle db. Я хочу иметь возможность подсчитать, сколько раз оператор SQL был выполнен за X часов. Например, сколько раз оператор Select * From ExampleTable выполнялся за последние 5 часов?

Я пытался искать в V $ SQL, V $ SQLSTATS, V $ SQLAREA, но они сохраняют только записьобщая сумма казней. Они не хранят время, когда происходили отдельные казни. Есть ли какое-то представление, которое я пропустил, или что-то еще, что отслеживает выполнение каждого отдельного оператора + временную метку, чтобы я мог запросить, по которому это произошло X часов назад? Спасибо за помощь.

Ответы [ 2 ]

0 голосов
/ 04 октября 2019

Представления в репозитории Active Workload хранят историческую информацию о выполнении SQL, в частности представление DBA_HIST_SQLSTAT.

Представление не является идеальным;он содержит сводку top операторов SQL. Это почти идеальная информация для настройки производительности - на практике выборка улавливает любые проблемы с производительностью. Но если вы ищете идеальную запись каждого выполнения SQL, насколько я знаю, единственный способ получить эту информацию - это трассировка , которая глючит и работает медленно.

Надеюсьэтот запрос достаточно хорош:

select begin_interval_time, end_interval_time, executions_delta, dba_hist_sqlstat.*
from dba_hist_sqlstat
join dba_hist_snapshot
    on dba_hist_sqlstat.snap_id = dba_hist_snapshot.snap_id
    and dba_hist_sqlstat.instance_number = dba_hist_snapshot.instance_number
order by begin_interval_time desc, sql_id;
0 голосов
/ 03 октября 2019

Извините за то, что поместил это в ответ вместо комментария (у меня нет необходимой репутации), но я думаю, что вам может не повезти. Вот AskTOM, задающий в основном тот же вопрос: AskTOM . Том говорит, что если вы не используете ASH, это просто не то, для чего предназначена база данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...