Как определить высоконагруженный SQL в Oracle, используя представления оракула? - PullRequest
7 голосов
/ 28 ноября 2011

Я ищу запрос, который вернет список высоконагруженных SQL-операторов.Я не хочу использовать какие-либо инструменты Oracle, такие как ADDM или AWR.Мне нужен оператор запроса, который будет возвращать высоконагруженные операторы SQL.

Ответы [ 2 ]

3 голосов
/ 28 ноября 2011

Вы можете запросить таблицы AWR напрямую, что может быть самым простым способом.

Или простой метод, который я использовал в Oracle 8i без включенной статистики, заключался в выборе SQL с самым высокимбуфер получает отношение к выполнению из v $ sql.Вы можете поиграть с этим запросом только для поиска запросов с большим количеством выполнений или запросов с высоким физическим вводом-выводом и т. Д.

Таблицы AWR и ASH предоставят более точную информацию, но это может быть простой первый шаг:

select a.sql_id, a.ratio, a.executions
from  
(
  select sql_id, buffer_gets / executions ratio, executions
  from v$sql
  where executions > 10
  order by 2 desc
) a
where rownum <= 10
1 голос
/ 28 ноября 2011

Чтобы быстро найти, если у вас есть долго работающие процессы, занимающие ваши ресурсы, посмотрите на v $ sesson_long_ops:

SELECT * FROM v$session_longops

см .: http://docs.oracle.com/cd/B19306_01/server.102/b14237/dynviews_2092.htm

Я бы посоветовал вам взглянутьна это тоже: http://docs.oracle.com/cd/B28359_01/server.111/b28274/instance_tune.htm

Затем вы можете взять sid, чтобы найти SQL, который работает:

SELECT sql_text FROM v$session s 
LEFT JOIN v$sqlarea sa ON s.sql_hash_value=sa.hash_value AND s.sql_address=sa.address 
WHERE sid=&sid

Если вы работаете с Unix, вы также можете взглянуть на *С помощью команды 1013 * (top10 или topas в разных вариантах Unix) вы можете взять идентификаторы процессов запросов, потребляющих наибольшее количество ресурсов процессора, а затем использовать следующую команду для получения вызывающего ошибки sql.

SELECT
    s.username,
    sa.sql_text
FROM v$process p
INNER JOIN v$session s ON p.addr=s.paddr
LEFT JOIN v$sqlarea sa ON s.sql_hash_value=sa.hash_value AND s.sql_address=sa.address 
WHERE s.username IS NOT NULL AND p.spid=&SPID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...