ITPub博客

首页 > 数据库 > Oracle > [20220420]完善查询光标为什么不共享脚本.txt

[20220420]完善查询光标为什么不共享脚本.txt

原创 Oracle 作者:lfree 时间:2022-04-20 10:44:35 0 删除 编辑

[20220420]完善查询光标为什么不共享脚本.txt

--//前几天遇到的问题,发现一条语句子光标很多,利用链接
--//http://blog.itpub.net/267265/viewspace-2884546/ => [20220328]查询光标为什么不共享脚本.txt
--//生成的脚本,适当改写执行:

> @ unshare 8cyaz1uy3wtu1
SQL_ID        NONSHARED_REASON                COUNT(*)
------------- ----------------------------- ----------
8cyaz1uy3wtu1 ROLL_INVALID_MISMATCH               1537
8cyaz1uy3wtu1 BIND_EQUIV_FAILURE                  1539
8cyaz1uy3wtu1 USE_FEEDBACK_STATS                  1526
8cyaz1uy3wtu1 PURGED_CURSOR                          1

--//今天适当完善该脚本。
--//它是先利用它建立脚本,然后再执行。而我仅仅使用它查看单条sql语句的情况。

--//适当改写如下:
$ cat gunshare.sql
set head off feedback off term off
column c300 format a300
spool /tmp/unshare.tmp
SELECT    'select reason_not_shared, count(*) cursors, count(distinct sql_id) sql_ids
from v$sql_shared_cursor
unpivot(val for reason_not_shared in(
'
         || LISTAGG
            (
                  '  '
               || LISTAGG (column_name, ',') WITHIN GROUP (ORDER BY column_id)
              ,',
'
            )
            WITHIN GROUP (ORDER BY line_no)
         || '
))
where val = ''Y'' and sql_id like ''&&1''
group by reason_not_shared
order by 2 desc, 3, 1;'
            c300
    FROM (SELECT column_name
                ,column_id
                ,CEIL (ROW_NUMBER () OVER (ORDER BY column_id) / 4) line_no
            FROM dba_tab_columns
           WHERE     owner = 'SYS'
                 AND table_name = 'V_$SQL_SHARED_CURSOR'
                 AND data_length = 1)
GROUP BY line_no;
spool off
set head on feedback on term on
prompt
prompt --- host vim /tmp/unshare.tmp
prompt --- host cat /tmp/unshare.tmp
prompt
@ /tmp/unshare.tmp


> @ gunshare 8cyaz1uy3wtu1
--- host vim /tmp/unshare.tmp
--- host cat /tmp/unshare.tmp

REASON_NOT_SHARED                CURSORS    SQL_IDS
----------------------------- ---------- ----------
ROLL_INVALID_MISMATCH                  1          1

1 row selected.

--//这个是已经解决的情况,使用sql profile稳定执行计划,找一个有问题的情况。

> @ gunshare 9cwx6td8nfx0g

--- host vim /tmp/unshare.tmp
--- host cat /tmp/unshare.tmp

REASON_NOT_SHARED                CURSORS    SQL_IDS
----------------------------- ---------- ----------
BIND_EQUIV_FAILURE                   522          1
USE_FEEDBACK_STATS                   506          1
ROLL_INVALID_MISMATCH                153          1
3 rows selected.

> @ sql_id 9cwx6td8nfx0g
--SQL_ID = 9cwx6td8nfx0g
SELECT ZY_BQYZ.ZYH
        FROM ZY_BQYZ,ZY_BRRY
        WHERE ZY_BQYZ.ZYH = ZY_BRRY.ZYH AND
        ZY_BQYZ.JGID = ZY_BRRY.JGID AND
        ZY_BRRY.BRBQ = :al_bq AND
        ZY_BRRY.CYPB <= 1 AND
        ZY_BRRY.JGID = :al_jgid AND
        ZY_BQYZ.TZSJ BETWEEN :adt_q AND :adt_z AND
        ZY_BQYZ.LSYZ = 1;

--//感觉这个版本存在某种bug,导致类似这类语句子光标很多。前面出问题的语句也是类似。
--//如果带入% 查询全部。
> @ gunshare %

--- host vim /tmp/unshare.tmp
--- host cat /tmp/unshare.tmp

REASON_NOT_SHARED                CURSORS    SQL_IDS
----------------------------- ---------- ----------
ROLL_INVALID_MISMATCH               2539       2003
BIND_EQUIV_FAILURE                  1076         55
USE_FEEDBACK_STATS                   975        230
PURGED_CURSOR                        759        716
LANGUAGE_MISMATCH                    386        162
OPTIMIZER_MISMATCH                   347        165
BIND_LENGTH_UPGRADEABLE              324        234
HASH_MATCH_FAILED                    218        181
BIND_MISMATCH                        195        163
OPTIMIZER_MODE_MISMATCH              144         70
BIND_UACS_DIFF                       106        106
LOAD_OPTIMIZER_STATS                  57         53
DIFFERENT_LONG_LENGTH                 24         17
USER_BIND_PEEK_MISMATCH               20         13
INST_DRTLD_MISMATCH                   18          6
AUTH_CHECK_MISMATCH                   12          8
TRANSLATION_MISMATCH                  12          8
PQ_SLAVE_MISMATCH                      8          2
DIFF_CALL_DURN                         4          3
STATS_ROW_MISMATCH                     3          1
MULTI_PX_MISMATCH                      2          2
INCOMP_LTRL_MISMATCH                   1          1
PX_MISMATCH                            1          1
TOP_LEVEL_RPI_CURSOR                   1          1
24 rows selected.

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/267265/viewspace-2887904/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
熟悉oracle相关技术,擅长sql优化,rman备份与恢复,熟悉linux shell编程。

注册时间:2008-01-03

  • 博文量
    4019
  • 访问量
    7997802