暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 基于sql id限制查询执行

ASKTOM 2019-07-03
363

问题描述

嗨,

感谢您审阅我的问题。两个节点RAC数据库版本11.2.0.4

1.在应用程序服务器处生成查询
2.使用同一帐户与数据库的持久连接
3.查询正在使用大量的IO当同一查询执行超过40次时,数据库会急剧减速
4.是否有基于sqlid的限制/队列/kill查询执行的方法?
5.基于IO的资源管理器限制对我们不起作用,因为应用程序使用相同的数据库帐户,并且还有其他查询正在运行,具有高IO使用率

专家解答

19c在这一领域有各种各样的好东西,但是没有一个自动化的解决方案来处理11g的问题。

你可以用脚本做一些事情,例如

SQL> select sid, serial#, last_call_et
  2  from   v$session
  3  where  sql_id = '0qht8ubcqk4wr'   -- the "problem" SQL_ID
  4  and    status = 'ACTIVE'
  5  order by 3;

       SID    SERIAL# LAST_CALL_ET
---------- ---------- ------------
       497        744           38
       136      13162           45
       373      28703           52

3 rows selected.
复制


这显示了运行SQL的会话以及它们运行SQL的时间。所以你可以这样做:

SQL> set serverout on
SQL> declare
  2    l_threshold int := 1;
  3    l_cnt       int := 0;
  4  begin
  5   for i in (
  6       select sid, serial#, last_call_et
  7       from   v$session
  8       where  sql_id = '0qht8ubcqk4wr'
  9       and    status = 'ACTIVE'
 10       order by 3
 11   )
 12   loop
 13     l_cnt := l_cnt + 1;
 14     if l_cnt <= l_threshold then
 15       dbms_output.put_line('Leaving SID='||i.sid||' untouched');
 16     else
 17       dbms_output.put_line('Killing SID='||i.sid);
 18       -- execute immediate 'alter system kill session ....';
 19     end if;
 20   end loop;
 21  end;
 22  /
Leaving SID=497 untouched
Killing SID=136
Killing SID=373

PL/SQL procedure successfully completed.
复制


并以适合您需求的频率运行
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论