我喜欢在数据库中获取最新执行的语句以及性能指标。
因此,我想知道哪些SQL语句最占用CPU / DISK。
stackoverflow.com/questions/14830875/…–
—
Vadzim
我喜欢在数据库中获取最新执行的语句以及性能指标。
因此,我想知道哪些SQL语句最占用CPU / DISK。
Answers:
这是完成这项工作的SQL。开放试用。
步骤1:确定安装ID和用户ID。
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
可能有多个ID和实例ID返回。因此,由用户决定如何在Web界面等中使用此数据。
in
元组的运算符(不知道哪个版本),因此从上面的示例中可以看出... AND (s.inst_id, s.sid) in ( (:id1, :sid1), (:id2, :sid2), ... )
Oracles Enterprise Monitor控制台显示了大量信息,这些信息涉及哪些SQL查询占用了最大CPU,瓶颈,数据库中的最高活动,阻止了SQL等。
作为历史方法,您可以使用Oracle的AWR报告来确定与您有关的区域。
您还可以使用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
。