Как регистрировать медленные запросы в Oracle - PullRequest
1 голос
/ 21 октября 2010

Я должен регистрировать медленные запросы, скажем, запросы, для выполнения которых требуется более 3 мс, должны регистрироваться. В большинстве случаев эти запросы выбираются как SELECT, как их регистрировать в Oracle?

Ответы [ 3 ]

2 голосов
/ 21 октября 2010

Если вы используете AWR , это будет зарегистрировано из ASH, вам просто нужно будет его добыть, используя OEM или с помощью рукописного SQL.

3 мс очень быстро, время отклика 5-20 мс в Oracle на современном оборудовании хорошее, учитывая все обстоятельства.

1 голос
/ 14 июня 2012

Если вы хотите регистрировать медленные запросы, то решение, данное Тони, является хорошим. Но если вы не можете изменить исходный код вашего приложения, вы можете рассмотреть вопрос об установке шпиона SQL. Я никогда не делал этого, но это можно сделать легко. Обратите внимание, что это замедлит работу вашего приложения: если вы решите проблему с производственным сервером, это не очень хорошее решение.

ИМХО, лучшее решение - не регистрировать медленные запросы, а находить их (разница неуловима ... :)). Oracle предоставляет множество инструментов для поиска такой информации:

  • AWR report - мой предпочтительный инструмент. Вы найдете абзац под названием «SQL, упорядоченный по истекшему времени», который в основном соответствует тому, на что вы смотрите
  • gridcontrol также дает вам эту информацию, но я не очень хорошо знаю этот инструмент. использовать проще, чем отчет AWR
  • если у вас нет доступа к одному из этих инструментов, вы можете просто запустить SQL, приведенный в этом другом сообщении stackoverflow: Топ 5 трудоемких SQL-запросов в Oracle
1 голос
/ 21 октября 2010

В коде приложения вы можете сделать что-то вроде этого:

v_start_time := dbms_utility.get_time();
-- Your query here
-- ...
v_end_time := dbms_utility.get_time();
if v_end_time - v_start_time > v_max_time then
   insert into log_table ...;
end if;

dbms_utility.get_time возвращает время в 1/100 секунды - поэтому вы не можете использовать это для точности 3 мс.Возможно, вы могли бы вместо этого использовать SYSTIMESTAMP.

Реально, я бы не регистрировал ни одного запроса, который занимал бы менее полсекунды, вы бы регистрировали практически все.

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