暂无图片
分享
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
田弼元

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

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

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

暂无图片 评论
暂无图片 有用 0
scott
问题已关闭: 问题已经得到解决
暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏