Я нашел этот оператор SQL полезным для начала (извините, я не могу отнести его к первоначальному автору; я нашел его где-то в Интернете):
SELECT * FROM
(SELECT
sql_fulltext,
sql_id,
elapsed_time,
child_number,
disk_reads,
executions,
first_load_time,
last_load_time
FROM v$sql
ORDER BY elapsed_time DESC)
WHERE ROWNUM < 10
/
Здесь находятся основные операторы SQL, которые в настоящее время хранятся в кэше SQL, упорядоченные по истечении времени. С течением времени выписки из кэша исчезают, поэтому, возможно, не стоит пытаться диагностировать пакетное задание прошлой ночью, когда вы приступаете к работе в полдень.
Вы также можете попробовать упорядочить по disk_reads и выполнению. Выполнения полезны, потому что некоторые плохие приложения отправляют один и тот же оператор SQL слишком много раз. Этот SQL предполагает, что вы используете переменные связывания правильно.
Затем вы можете взять sql_id
и child_number
заявления и скормить их этому ребенку: -
SELECT * FROM table(DBMS_XPLAN.DISPLAY_CURSOR('&sql_id', &child));
Показывает фактический план из кэша SQL и полный текст SQL.