如何在数据库中查找最新的SQL语句?


Answers:


17

这是完成这项工作的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界面等中使用此数据。


只是一点点:Oracle支持in元组的运算符(不知道哪个版本),因此从上面的示例中可以看出... AND (s.inst_id, s.sid) in ( (:id1, :sid1), (:id2, :sid2), ... )
Betlista 2013年

1
“ inst_id”代表实例ID,并不意味着安装ID。
miracle173

13

Oracles Enterprise Monitor控制台显示了大量信息,这些信息涉及哪些SQL查询占用了最大CPU,瓶颈,数据库中的最高活动,阻止了SQL等。

作为历史方法,您可以使用Oracle的AWR报告来确定与您有关的区域。

替代文字

在此处输入图片说明


1
出于好奇-AWR是可用于所有Oracle许可证的工具,我是否只能通过命令行使用它?
塞巴斯蒂安·罗斯,

2
抱歉,我应该提到它-据我所知,AWR需要单独的许可-Oracle Tuning&Diagnostic Pack。我更喜欢从企业管理器控制台使用AWR-我很荣幸拥有使用企业管理器控制台的特权(!)。我还发现,可以使用SQL Developer来监控sql语句,但是这需要上面的牌
Sathyajith铢

1
Oracle企业管理器(OEM)非常好。我们可以使用自动刷新的图形近乎实时地监视数据库的运行状况。我们有一面巨大的显示器挂在墙上,上面显示了我们的主要数据库全天候24x7的OEM,它在发现问题时非常有帮助。
ScottCher 2011年

4

您还可以使用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


2

对于最近的SQL:

select * from v$sql

对于历史:

select * from dba_hist_sqltext
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.