暂无图片
19C数据库的后台SQL,AWR报告显示该SQL每天运行1000多次,每次消耗1秒。这个执行效率有点低。如何干预?
我来答
分享
今天加鸡腿
2021-08-02
19C数据库的后台SQL,AWR报告显示该SQL每天运行1000多次,每次消耗1秒。这个执行效率有点低。如何干预?
暂无图片 5M
select DISTINCT /+RULE/ ‘LOCK_WAIT_DETAIL#-#’ ||
t.owner || ‘.’ || t.object_name || ‘#-#’ ||
'sid: ’ || h.session_id || ', serial#: ’ || s.serial# || ‘#-#’ ||
s.program || ‘#-#’ ||
h.mode_held || ‘#-#’ ||
w.session_id || ‘#-#’ ||b.sql_text
from (select * from dba_locks) w, (select * from dba_locks ) h, v$session s, dba_objects t, v$locked_object l, (select sql_text from(select l.session_id sid,
s.serial#,
l.locked_mode,
l.oracle_username,
s.user#,
l.os_user_name,
s.machine,
s.terminal,
a.sql_text,
a.action
from v$sql a, v$session s, v$locked_object l
where l.session_id = s.sid
and s.prev_sql_addr = a.address
order by sid, s.serial#)) b
where h.blocking_others = ‘Blocking’
and h.mode_held != ‘None’
and h.mode_held != ‘Null’
and w.mode_requested != ‘None’
and w.lock_type = h.lock_type
and w.lock_id1 = h.lock_id1
and w.lock_id2 = h.lock_id2
and s.sid = h.session_id
and l.object_id = t.object_id
and l.session_id = h.session_id

复制
我来答
添加附件
收藏
分享
问题补充
1条回答
默认
最新
杨卓

1.你这个sql手工执行需要多长时间,套路一般是手工执行这个慢sql,然后可以通过sql monitor开启针对单个sql的,看看最慢的执行计划,然后看看能不能加个索引,这种可能性太多,重点就是手工hint等方式找到比oracle跑的更快的执行计划;

2.根据awr报告的sql_id, 使用spm固定执行计划,或者使用sql profile绑定执行计划,这些网上都很多;

3.! !!  你这个SQL是什么程序发起来的,作用是什么,有没有办法直接找到这个程序进行优化代码!    或者减少查询频率,看起来有点像监控厂商写的查询db lock相关的信息!

暂无图片 评论
暂无图片 有用 0
打赏 0
回答交流
Markdown


请输入正文
提交