暂无图片
分享
scott
2020-03-17
SQL Version Count过高的处理思路
暂无图片 5M

12.2 RAC
AWR中,在每个pdb的SQL ordered by Version Count中都会出现这一条SQL,应该是非业务的系统SQL,这种系统内部的SQL的排查思路。谢谢

image.png

image.png

SQL如下:

MERGE /*+ OPT_PARAM('_parallel_syspls_obey_force' 'false') */
INTO OPTSTAT_USER_PREFS$ D
USING 
  ( SELECT  *
  FROM 
    ( SELECT  O.OBJ#, SYSTIMESTAMP CHGTIME, ROUND(MAX(S.DELTA_READ_IO_BYTES/S.DELTA_TIME), 3) SCANRATE
    FROM GV$ACTIVE_SESSION_HISTORY S, GV$SQL_PLAN P, OBJ$ O, USER$ U
    WHERE S.INST_ID = P.INST_ID
        AND S.SQL_ID = P.SQL_ID
        AND S.SQL_PLAN_HASH_VALUE = P.PLAN_HASH_VALUE
        AND S.SQL_PLAN_LINE_ID = P.ID
        AND P.OBJECT_NAME = O.NAME
        AND (:B4 IS NULL
        OR O.OBJ# = :B4 )
        AND O.OWNER# = U.USER#
        AND P.OBJECT_OWNER = U.NAME
        AND O.TYPE# = 2
        AND S.CON_ID = SYS_CONTEXT('userenv', 'con_id')
        AND P.CON_ID = SYS_CONTEXT('userenv', 'con_id')
        AND S.SQL_PLAN_OPERATION = 'TABLE ACCESS'
        AND P.OPERATION = 'TABLE ACCESS'
        AND S.DELTA_TIME > 0
        AND S.DELTA_READ_IO_BYTES > 0
        AND FROM_TZ(S.SAMPLE_TIME, :B3 ) > :B2
        AND (:B1 = 'ON'
        OR (:B1 = 'HADOOP_ONLY'
        AND EXISTS 
      ( SELECT  NULL
      FROM SYS.EXTERNAL_TAB$ ET
      WHERE ET.OBJ# = O.OBJ#
          AND TYPE$
      IN ('ORACLE_HIVE', 'ORACLE_HDFS', 'ORACLE_BIGDATA'))))
      GROUP BY O .OBJ#) C
      WHERE NOT EXISTS 
        ( SELECT  NULL
        FROM OPTSTAT_USER_PREFS$ PR
        WHERE PNAME = 'SCAN_RATE'
            AND C.OBJ# = PR.OBJ#
            AND (PR.SPARE1 IS NULL
            OR C.SCANRATE <= TO_NUMBER(PR.VALCHAR))) ) SRC
        ON (D.OBJ#=SRC.OBJ#
          AND D.PNAME = 'SCAN_RATE')
      WHEN MATCHED
  THEN   UPDATE SET D.VALCHAR= TO_CHAR(SRC.SCANRATE), D.CHGTIME=SRC.CHGTIME, D.SPARE1=1
  WHEN NOT MATCHED
THEN   INSERT (OBJ#, PNAME, VALCHAR, CHGTIME, SPARE1) VALUES(SRC.OBJ#, 'SCAN_RATE', TO_CHAR(SRC.SCANRATE), SRC.CHGTIME, 1)
复制
收藏
分享
4条回答
默认
最新
你好我是李白

查询V$SQL_SHARED_CURSOR,看相应SQL无法共享是否有具体原因

暂无图片 评论
暂无图片 有用 0
打赏 0
田弼元

根据v$sql_shared_cursor查看游标不能共享的原因,或者去MOS文档 ID 438755.1下载脚本。
可以通过修改隐藏参数“_cursor_obsolete_threshold”来限制子游标的数量。

暂无图片 评论
暂无图片 有用 0
打赏 0
刘峰

1、通过查询v$sql_shared_cursor查看执行计划不能共享的原因,比如sql传入的不安全的谓词信息,同时启用了绑定变量窥探,就有可能导致执行计划不能共享
2、通过MOS查看version_count过多问题,是否有匹配的BUG

暂无图片 评论
暂无图片 有用 0
打赏 0
scott
问题已关闭: 问题已经得到解决
暂无图片 评论
暂无图片 有用 0
打赏 0
回答交流
Markdown


请输入正文
提交
相关推荐
在联机数据文件移动操作期间,可以进行哪四个操作?
回答 3
已采纳
ADEF
oracle数据库plsql代码块中用游标去DROP表报错,怎么解决?
回答 1
已采纳
'droptable'||v.tablename需要空格
Oracle有没有发行过arm的版本?
回答 3
Oracle有arm的客户端,arm的性能堆积起来是比x86要好的,并不是arm的就差。
大神,帮我看一下,这个资源监视器页面正常吗?
回答 1
已采纳
感觉再正常不过了。
sql server是不是没有像oracle一样的模式?
回答 1
已采纳
有啊,默认的模式就是dbo,当然可以自己建;只是说Oracle的user和schema通常创建在一起而已
静默安装Oracle,执行安装命令时,总出现unzip的使用?
回答 8
信息不够,多贴出来点信息才好知道问题
dba_hist_active_sess_history 这个里面的数据是怎么来的?
回答 2
oracle&nbsp;后台进程每秒对v$session&nbsp;做快照,&nbsp;把状态是ACTIVE的记录临时存放到v$activesessionhistory;每隔10秒的v$actives
oracle数据库如何降低高水位?
回答 1
已采纳
1可以通过mv表,2.通过t新建表。insert,然后truncate,rename等操作重新组织数据
oracle创建临时表是不是必须加Temporary?
回答 2
已采纳
必须的~,不然怎么确定表空间类型?默认是永久表空间,可以缺省PERMANENT;
plsql连接某台linux上的oracle数据库报“ora-12541:tns:无监听程序”?
回答 1
已采纳
1、检查该库对应的监听程序是否正常启动、及监听程序的状态;2、确保监听的IP、实例被监听到;