Мне нравится получать последние выполненные операторы в моей базе данных вместе с показателями эффективности.
Поэтому мне хотелось бы знать, какие операторы SQL наиболее интенсивно загружают ЦП / ДИСК.
Мне нравится получать последние выполненные операторы в моей базе данных вместе с показателями эффективности.
Поэтому мне хотелось бы знать, какие операторы SQL наиболее интенсивно загружают ЦП / ДИСК.
Ответы:
Вот SQL, чтобы сделать работу. Открыть для суда.
Шаг 1: Определите идентификаторы установки и идентификаторы пользователей.
SELECT inst_id,sid FROM gv$session WHERE username='<ENTER-USERNAME>';
Шаг 2:
SELECT
s.sid
,s.CLIENT_INFO
,s.MACHINE
,s.PROGRAM
,s.TYPE
,s.logon_time
,s.osuser
,sq.sorts
,sq.DISK_READS
,sq.BUFFER_GETS
,sq.ROWS_PROCESSED
,sq.SQLTYPE
,sq.SQL_TEXT
FROM gv$session s
, gv$sql sq
WHERE s.SQL_HASH_VALUE = sq.HASH_VALUE
AND s.inst_id = :inst_id -- replace with instID from above
AND s.sid = :sid -- replace with ID from above
AND sq.inst_id = s.inst_id
Может быть возвращено несколько идентификаторов и идентификаторов экземпляров. Таким образом, выбор пользователей заключается в том, как использовать эти данные в веб-интерфейсе и т. Д.
in
оператор с кортежами, поэтому из приведенного выше примера... AND (s.inst_id, s.sid) in ( (:id1, :sid1), (:id2, :sid2), ... )
Консоль Oracles Enterprise Monitor отображает огромное количество информации о том, какие запросы SQL занимают максимальную загрузку ЦП, узкие места, максимальную активность в базе данных, блокировку SQL и др.
Для исторического подхода вы можете использовать отчеты AWR Oracle, чтобы точно определить области, касающиеся вас.
Вы также можете использовать V$SQL
, есть несколько интересных столбцов RUNTIME_MEM, EXECUTIONS, DISK_READS, SORTS, ELAPSED_TIME, SQL_FULLTEXT
и т. Д.
Это даст вам 10 лучших операторов по чтению с диска (примечание - это кумулятивно для всех исполнений):
select sql_id,child_number from
(
select sql_id,child_number from v$sql
order by disk_reads desc
)
where rownum<11
Если оператор все еще находится в распоряжении, V$SQL_PLAN
вы можете получить фактический план объяснения для запроса:
select * from table(dbms_xplan.display_cursor('sql_id',child_number));
Я также хотел бы использовать, V$SQL_PLAN
поскольку он содержит хорошую информацию. Если statistics_level=ALL
вы можете использовать V$SQL_PLAN_STATISTICS
.