oracle数据库,如何找到正在被执行中的最耗时的sql语句。

1、oracle数据库,如何找到正在被执行中的最耗时的sql语句?2、在oracle中,是怎么优化sql语句的,也就是说,假如我找到了一个最耗时的sql语句,然后我想优化它,应该是一个什么样的流程,先干什么,再干什么,能不能说一下...显示全部
1、oracle数据库,如何找到正在被执行中的最耗时的sql语句?
2、在oracle中,是怎么优化sql语句的,也就是说,假如我找到了一个最耗时的sql语句,然后我想优化它,应该是一个什么样的流程,先干什么,再干什么,能不能说一下收起
参与7

查看其它 1 个回答royalwzy的回答

royalwzyroyalwzy技术经理海通证券股份有限公司
查找最近5分钟里面最消耗IO的SQL语句:
select s.sql_text from
(select sql_id,count(*) as cn
from v$active_session_history
where sample_time > sysdate - 5/24/60
and session_type <> 'BACKGROUND'
and WAIT_CLASS='User I/O'
group by sql_id
order by cn desc) ash, v$sql s
where ash.sql_id = s.sql_id;

查找最近5分钟里面最消耗CPU的SQL语句:
select s.sql_text from
(select sql_id,count(*) as cn
from v$active_session_history
where sample_time > sysdate - 5/24/60
and session_type <> 'BACKGROUND'
and SESSION_STATE='ON CPU'
group by sql_id
order by cn desc) ash, v$sql s
where ash.sql_id = s.sql_id;

查找最近5分钟里面索引读最严重的SQL语句:
select s.sql_text from
(select sql_id,count(*) as cn
from v$active_session_history
where sample_time > sysdate - 5/24/60
and session_type <> 'BACKGROUND'
and event='db file sequential read'
group by sql_id
order by cn desc) ash, v$sql s
where ash.sql_id = s.sql_id;

这些都依赖于shared pool
shared pool的目的:缓存曾经执行过的SQL以及其对应的执行计划,再次执行同样的SQL的时候
能够在内存里命中该sql以及对应的执行计划,从而减少硬解析的次数,节省CPU的资源开销。
证券 · 2015-07-08
浏览944

回答者

royalwzy
技术经理海通证券股份有限公司
擅长领域: 数据库服务器存储

royalwzy 最近回答过的问题

回答状态

  • 发布时间:2015-07-08
  • 关注会员:1 人
  • 回答浏览:944
  • X社区推广