[20221101]如何减少BIND_EQUIV_FAILURE引起的子光标.txt --//生产系统1条语句出现大量BIND_EQUIV_FAILURE引起的子光标,我想尝试通过sql profile或者sql patch来控制减少它. --//多次尝试都失败,我想既然知道主要有BIND_EQUIV_FAILURE引起的,我必须在测试环境产生它,这样才能找到解决问题的办法. 1.建立测试环境: SCOTT@book> @ver1 PORT_STRING VERSION BANNER ------------------------------ -------------- -------------------------------------------------------------------------------- x86_64/Linux 2.4.xx 11.2.0.4.0 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production SCOTT@book> create table t as select rownum id , lpad('test',2) vc from dual connect by level <=1e6; Table created. SCOTT@book> @ gts t '' Gather Table Statistics for table t... exec dbms_stats.gather_table_stats(null, upper('t'), null, method_opt=>'FOR TABLE FOR ALL COLUMNS SIZE REPEAT', cascade=>true, no_invalidate=>false) PL/SQL procedure successfully completed. $ cat bb1.txt variable b1 number; variable b2 number; exec :b1 := &&1; exec :b2 := &&2; select count(*) from t where id between :b1 and :b2; 2.测试: @ bb1.txt 100 200 @ bb1.txt 100 20000000 @ bb1.txt 100 20000000 SCOTT@book> @ hash HASH_VALUE SQL_ID CHILD_NUMBER KGL_BUCKET PLAN_HASH_VALUE HASH_HEX SQL_EXEC_START SQL_EXEC_ID ---------- ------------- ------------ ---------- --------------- ---------- ------------------- ----------- 3557268748 a7w0p6ra0g78c 0 105740 1010173228 d4079d0c 2022-10-28 10:21:54 16777216 SCOTT@book> @ gunshare a7w0p6ra0g78c --- host vim /tmp/unshare.tmp --- host cat /tmp/unshare.tmp REASON_NOT_SHARED CURSORS SQL_IDS ----------------------------- ---------- ---------- BIND_EQUIV_FAILURE 1 1 LOAD_OPTIMIZER_STATS 1 1 2 rows selected. --//问题已经产生.如何解决呢? 3.分析: --//很明显产生BIND_EQUIV_FAILURE的主要原因是查询的范围变化,导致在返回值的数量上也跟着发生变化. --//先尝试: SYS@book> @ sqlpatch a7w0p6ra0g78c rule input @sqlpatch sqlid 'hint_text' oracle_version(11 or 12) drop sql patch ,run exec sys.dbms_sqldiag.drop_sql_patch('sqlpatch_a7w0p6ra0g78c'); display sql path message , run @spext a7w0p6ra0g78c PL/SQL procedure successfully completed. SYS@book> @ spext a7w0p6ra0g78c HINT NAME ------- ------------------------------ rule sqlpatch_a7w0p6ra0g78c --//刷新共享池: alter system flush shared_pool; alter system flush shared_pool; alter system flush shared_pool; @ bb1.txt 100 200 @ bb1.txt 100 20000000 @ bb1.txt 100 20000000 SCOTT@book> @ gunshare a7w0p6ra0g78c --- host vim /tmp/unshare.tmp --- host cat /tmp/unshare.tmp REASON_NOT_SHARED CURSORS SQL_IDS ----------------------------- ---------- ---------- BIND_EQUIV_FAILURE 2 1 LOAD_OPTIMIZER_STATS 1 1 2 rows selected. --//依旧出现BIND_EQUIV_FAILURE,无法解决这个问题. 4.为了便于重复测试建立脚本: $ cat a7w0p6ra0g78c.sql9_0 variable B1 NUMBER variable B2 NUMBER begin :B1 := 100; :B2 := &&1; end; / set termout off set sqlblanklines on alter session set current_schema=SCOTT; --alter session set statistics_level=all; select /*+ rule OPT_PARAM('_optimizer_extended_cursor_sharing' 'NONE') OPT_PARAM('_optimizer_extended_cursor_sharing_rel' 'NONE') OPT_PARAM('_optimizer_adaptive_cursor_sharing' 'false') OPT_PARAM('_optimizer_use_feedback' 'false') */ count(*) from t where id between :b1 and :b2; set termout on set sqlblanklines off --@zws '' '' --@dpc '' '' @dpc '' outline rollback; alter session set current_schema=SYS ; --//我把可能想到的隐式参数全部加入.执行多次记下sql_id=2sxdnhy32v0qb @ bb1.txt 100 200 @ bb1.txt 100 20000000 @ bb1.txt 100 20000000 @ bb1.txt 1 2000000000000000000000000 @ bb1.txt 6000 8000 SCOTT@book> @ gunshare 2sxdnhy32v0qb --- host vim /tmp/unshare.tmp --- host cat /tmp/unshare.tmp no rows selected --//没有出现BIND_EQUIV_FAILURE,现在估计ok了. SYS@book> @ spsw 2sxdnhy32v0qb 0 a7w0p6ra0g78c 0 '' true PL/SQL procedure successfully completed. --//我交换sql profile 后,重启数据库,主要避免一些干扰. @ bb1.txt 100 200 @ bb1.txt 100 20000000 @ bb1.txt 100 20000000 @ bb1.txt 1 2000000000000000000000000 @ bb1.txt 6000 8000 @ bb1.txt 6000 8000 @ bb1.txt 6000 8000 @ bb1.txt 6000 8000 @ bb1.txt 5000 18000 @ bb1.txt 5000 18000 @ bb1.txt 5000 18000 @ bb1.txt 5000 18000 SCOTT@book> @ gunshare a7w0p6ra0g78c --- host vim /tmp/unshare.tmp --- host cat /tmp/unshare.tmp no rows selected --//OK,估计这样可以了.
[20221101]如何减少BIND_EQUIV_FAILURE引起的子光标.txt
来源:这里教程网
时间:2026-03-03 18:04:57
作者:
编辑推荐:
- [20221101]如何减少BIND_EQUIV_FAILURE引起的子光标.txt03-03
- 5款新人必备的电脑软件03-03
- [20221103]绑定变量的分配长度11.txt03-03
- [20221101]完善descz.sql脚本.txt03-03
- [20221015]mmon_slave sql_id=c9umxngkc3byq Automatic Report Flush.sql03-03
- AWS、微软云、谷歌云背后的格局焦虑03-03
- 当遇到 Oracle 用户密码过期又不能重置为新密码该怎么办?03-03
- 【数据库数据恢复】LINUX环境下ORACLE数据库误删除的数据恢复03-03
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- 5款新人必备的电脑软件
5款新人必备的电脑软件
26-03-03 - AWS、微软云、谷歌云背后的格局焦虑
AWS、微软云、谷歌云背后的格局焦虑
26-03-03 - Oracle 19c中的等待事件分类 Event Waits
Oracle 19c中的等待事件分类 Event Waits
26-03-03 - 【STAT】函数索引和使用表达式统计信息有什么不同
【STAT】函数索引和使用表达式统计信息有什么不同
26-03-03 - 学艺不精,学无止境
学艺不精,学无止境
26-03-03 - ORA-00600: internal error code, arguments: [knacpft_ProcessFetchedTxns250]
- 以太网网络分析仪
以太网网络分析仪
26-03-03 - 双11:美团、京东、饿了么咬定即时零售不放松
双11:美团、京东、饿了么咬定即时零售不放松
26-03-03 - 网络性能测试工具有哪些
网络性能测试工具有哪些
26-03-03 - 千兆以太网测试仪
千兆以太网测试仪
26-03-03
