Дополнительно
Топ-5 самых трудоемких SQL-запросов в Oracle
Как найти плохо выполняющиеся SQL-запросы в Oracle?
Oracle ведет статистику по общей SQL-области и содержит одну строку на SQL-строку (v$sqlarea). Но как определить, какие из них плохо выполняются?
36
8
Я нашел этот SQL-запрос полезным для начала (извините, что не могу указать автора; я нашел его где-то в Интернете):
Это находит лучшие SQL-запросы, которые в настоящее время хранятся в кэше SQL, упорядоченные по прошедшему времени. Операторы будут исчезать из кэша с течением времени, поэтому бесполезно пытаться диагностировать пакетную работу прошлой ночью, когда вы приходите на работу в полдень.
Вы также можете попробовать упорядочить по disk_reads и executions. Исполнение полезно, потому что некоторые плохие приложения посылают один и тот же SQL-запрос слишком много раз. Этот SQL предполагает, что вы правильно используете переменные привязки.
Тогда вы можете взять
sql_id
иchild_number
из оператора и ввести их в этот ребенок:-Это показывает фактический план из кэша SQL и полный текст SQL.
Вы можете найти диск интенсивное полное сканирование таблиц с чем-то вроде этого:
Вы можете взять средний буфер получает за выполнение в период активности экземпляр:
полной информации, что я получил от askTom-Оракул. Я надеюсь, что это помогает вам
Это зависит от того, какая версия Oracle вы есть, для 9i и ниже Statspack то, что вы после, 10G и выше, вы хотите адвентистов , как эти инструменты дадут вам лучшие по SQL's и многие другие вещи.
Следующий запрос возвращает SQL, выполняющие большое число операций чтения диска (также оскорбление пользователей и количества раз выполнения запроса):
Выполнить запрос как sys и регулировать количество операций чтения с диска в зависимости от того, что вы считаете избыточными (100,000 работает для меня).
Я совсем недавно использовал этот запрос, чтобы отследить пользователей, которые отказываются воспользоваться
планов
до выполнения своих заявлениях.Я нашел этот запрос в старый Оракул книгу настройка SQL (который я, к сожалению, уже нет), так что приношу извинения, но без авторства.
Существует несколько возможных способов сделать это, но попробуйте поискать в google для tkprof
Там нет графического интерфейса... это полностью командная строка и, возможно, немного пугающая для новичков в Oracle; но она очень мощная.
Эта ссылка выглядит как хорошее начало:
http://www.oracleutilities.com/OSUtil/tkprof.html
В процессе поиска я получил следующий запрос, который выполняет работу с одним предположением (время выполнения запроса >6 секунд)
SELECT имя пользователя, sql_text, sofar, totalwork, units
FROM v$sql,v$session_longops
WHERE sql_address = address AND sql_hash_value = hash_value
ORDER BY address, hash_value, child_number;
Я думаю, что вышеприведенный запрос выведет список данных для текущего пользователя.
Комментарии приветствуются!!!