[20200129]子光标不共享BIND_EQUIV_FAILURE.txt --//生产系统再次遇到大量BIND_EQUIV_FAILURE原因导致子光标的情况。我看了我以前测试遇到的情况。 --//链接 http://blog.itpub.net/267265/viewspace-2156139/ =>[20180613]子光标不共享BIND_EQUIV_FAILURE。 --//别人曾经给我建议,问题可能出在alter session set statistics_level=all;的设置上,我也重复测试看看。 1.环境: SCOTT@test01p> @ ver1 PORT_STRING VERSION BANNER CON_ID -------------------- ---------- ---------------------------------------------------------------------------- ------ IBMPC/WIN_NT64-9.1.0 12.2.0.1.0 Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production 0 SYS@test> @ hide _cursor_obsolete_threshold NAME DESCRIPTION DEFAULT_VALUE SESSION_VALUE SYSTEM_VALUE ISSES ISSYS_MOD -------------------------- ----------------------------------------------- ------------- ------------- ------------ ----- --------- _cursor_obsolete_threshold Number of cursors per parent before obsoletion. TRUE 8192 8192 TRUE FALSE /* grant execute on sys.dbms_lock to scott; CREATE OR REPLACE FUNCTION sleep1 (seconds IN NUMBER) RETURN NUMBER is d_date date; BEGIN select sysdate into d_date from dual; sys.dbms_lock.sleep(seconds/10); RETURN seconds; END; / CREATE OR REPLACE FUNCTION sleep (seconds IN NUMBER) RETURN NUMBER is d_date date; BEGIN select sysdate into d_date from dual; --//sys.dbms_lock.sleep(0.01); RETURN seconds; END; / */ --//注:当时的测试因为别的原因执行如上代码,现在测试不需要。 create table t as select rownum id1,mod(rownum-1,1000)+1 id2 from dual connect by level<=2000; SCOTT@test01p> select * from dba_extents where owner=user and segment_name='T' 2 @ prxx ============================== OWNER : SCOTT SEGMENT_NAME : T PARTITION_NAME : SEGMENT_TYPE : TABLE TABLESPACE_NAME : USERS EXTENT_ID : 0 FILE_ID : 11 BLOCK_ID : 176 BYTES : 65536 BLOCKS : 8 RELATIVE_FNO : 11 PL/SQL procedure successfully completed. 2.建立测试脚本: --//建立脚本by.txt,注解alter session set statistics_level=all;: set term off --//alter session set statistics_level=all; variable x number; exec :x := &&1; SElect t.* from t where id2<=:x; set term on @ dpc '' '' quit --//建立shell脚本by.sh: #!/bin/bash # rm -f ez.txt for i in $(seq 1000) do sqlplus -s -l scott/btbtms@test01p @by.txt $i >> ez.txt done --//在家里的笔记本上测试有点慢,减少循环到1000次。 3.测试: --//执行脚本by.sh. $ grep "SQL_ID" ez.txt | uniq -c 1000 SQL_ID ckynkwp4t00rz, child number 0 --//可以发现并没有产生子光标。确实像别人讲的那样。 4.继续测试: --//修改脚本by.txt.取消注解alter session set statistics_level=all;. set term off alter session set statistics_level=all; variable x number; exec :x := &&1; SElect t.* from t where id2<=:x; set term on @ dpc '' '' quit --//刷新共享池3次。 alter session set statistics_level=all; alter session set statistics_level=all; alter session set statistics_level=all; $ mv ez.txt ezold.txt --//执行脚本by.sh $ grep "SQL_ID" ez.txt | uniq -c 500 SQL_ID ckynkwp4t00rz, child number 0 51 SQL_ID ckynkwp4t00rz, child number 1 56 SQL_ID ckynkwp4t00rz, child number 2 61 SQL_ID ckynkwp4t00rz, child number 3 67 SQL_ID ckynkwp4t00rz, child number 4 74 SQL_ID ckynkwp4t00rz, child number 5 81 SQL_ID ckynkwp4t00rz, child number 6 90 SQL_ID ckynkwp4t00rz, child number 7 20 SQL_ID ckynkwp4t00rz, child number 8 --//在执行过程中,可以发现并出现大量子光标. SCOTT@test01p> @ share ckynkwp4t00rz old 15: and q.sql_id like ''&1''', new 15: and q.sql_id like ''ckynkwp4t00rz''', SQL_TEXT = SElect t.* from t where id2<=:x SQL_ID = ckynkwp4t00rz ADDRESS = 000007FF12B9AA10 CHILD_ADDRESS = 000007FF1265EDE8 CHILD_NUMBER = 0 LOAD_OPTIMIZER_STATS = Y REASON = <ChildNode><ChildNumber>0</ChildNumber><ID>39</ID><reason>Bind mismatch(25)</reason><size>0x0</size><details>extended_cursor_sharing</details></ChildNode> -------------------------------------------------- SQL_TEXT = SElect t.* from t where id2<=:x SQL_ID = ckynkwp4t00rz ADDRESS = 000007FF12B9AA10 CHILD_ADDRESS = 000007FF16F0F400 CHILD_NUMBER = 1 REASON = <ChildNode><ChildNumber>1</ChildNumber><ID>39</ID><reason>Bind mismatch(33)</reason><size>1x4</size><init_ranges_in_first_pass>2540213050</init_ranges_in_first_pass></ChildNode> -------------------------------------------------- SQL_TEXT = SElect t.* from t where id2<=:x SQL_ID = ckynkwp4t00rz ADDRESS = 000007FF12B9AA10 CHILD_ADDRESS = 000007FF13C989F8 CHILD_NUMBER = 2 BIND_EQUIV_FAILURE = Y REASON = <ChildNode><ChildNumber>2</ChildNumber><ID>39</ID><reason>Bind mismatch(33)</reason><size>1x4</size><init_ranges_in_first_pass>2841161709</init_ranges_in_first_pass></ChildNode> -------------------------------------------------- ... -------------------------------------------------- SQL_TEXT = SElect t.* from t where id2<=:x SQL_ID = ckynkwp4t00rz ADDRESS = 000007FF12B9AA10 CHILD_ADDRESS = 000007FF13F41A10 CHILD_NUMBER = 8 BIND_EQUIV_FAILURE = Y REASON = -------------------------------------------------- PL/SQL procedure successfully completed. $ grep "SQL_ID" ez.txt | uniq -c | awk '{ sum=sum+$1};END {print sum}' 1000 --//正好1000次。 --//可以看出设置alter session set statistics_level=all;导致出现子光标不能共享,具体原因是什么不清楚。 --//我反复测试多次,结果都是一样。 5.建立直方图呢? SCOTT@test01p> execute sys.dbms_stats.gather_table_stats ( OwnName => user,TabName => 't',Estimate_Percent => NULL,Method_Opt => 'FOR ALL COLUMNS SIZE 1024 ',Cascade => True ,No_Invalidate => false) PL/SQL procedure successfully completed. --//12c 可以支持bucket大于254. SCOTT@test01p> @ tab_lh scott t '' DISPLAY TABLE_NAME OF COLUMN_NAME INFORMATION. INPUT OWNER TABLE_NAME COLUMN SAMPLE : @ TAB_LH TABLE_NAME [COLUMN_NAME] IF NOT INPUT COLUMN_NAME ,USE "" . COLUMN_NAME DATA_TYPE DATA_LENGTH N NUM_DISTINCT DENSITY SAMPLE_SIZE TRANS_LOW TRANS_HIGH NUM_NULLS NUM_BUCKETS LAST_ANALYZED HISTOGRAM DATA_DEFAULT ----------- --------- ----------- - ------------ ---------- ----------- --------- ---------- ---------- ----------- ------------------- ---------- ------------------------- ID1 NUMBER 22 Y 2000 .0005 2000 1 2000 0 1024 2020-01-29 19:44:04 HYBRID ID2 NUMBER 22 Y 1000 .00025 2000 1 1000 0 1000 2020-01-29 19:44:04 FREQUENCY --//刷新共享池3次。 alter session set statistics_level=all; alter session set statistics_level=all; alter session set statistics_level=all; --//执行脚本by.txt。 set term off --//alter session set statistics_level=all; variable x number; exec :x := &&1; SElect t.* from t where id2<=:x; set term on @ dpc '' '' quit $ mv ez.txt ez17.txt $ grep "SQL_ID" ez.txt | uniq -c 1000 SQL_ID ckynkwp4t00rz, child number 0 --//没有子光标产生。 SCOTT@test01p> execute sys.dbms_stats.gather_table_stats ( OwnName => user,TabName => 't',Estimate_Percent => NULL,Method_Opt => 'FOR ALL COLUMNS SIZE 254 ',Cascade => True ,No_Invalidate => false) PL/SQL procedure successfully completed. SCOTT@test01p> @ tab_lh scott t '' DISPLAY TABLE_NAME OF COLUMN_NAME INFORMATION. INPUT OWNER TABLE_NAME COLUMN SAMPLE : @ TAB_LH TABLE_NAME [COLUMN_NAME] IF NOT INPUT COLUMN_NAME ,USE "" . COLUMN_NAME DATA_TYPE DATA_LENGTH N NUM_DISTINCT DENSITY SAMPLE_SIZE TRANS_LOW TRANS_HIGH NUM_NULLS NUM_BUCKETS LAST_ANALYZED HISTOGRAM DATA_DEFAULT ----------- --------- ----------- - ------------ ---------- ----------- --------- ---------- --------- ----------- ------------------- --------- ------------ ID1 NUMBER 22 Y 2000 .0005 2000 1 2000 0 254 2020-01-29 20:01:43 HYBRID ID2 NUMBER 22 Y 1000 .001 2000 1 1000 0 254 2020-01-29 20:01:43 HYBRID --//刷新共享池3次。 alter session set statistics_level=all; alter session set statistics_level=all; alter session set statistics_level=all; $ mv ez.txt ez18.txt $ grep "SQL_ID" ez.txt | uniq -c 1000 SQL_ID ckynkwp4t00rz, child number 0 --//没有子光标产生。 --//也就是与直方图无关。 6.继续测试: --//取消直方图设置。 SCOTT@test01p> execute sys.dbms_stats.gather_table_stats ( OwnName => user,TabName => 't',Estimate_Percent => NULL,Method_Opt => 'FOR ALL COLUMNS SIZE 1 ',Cascade => True ,No_Invalidate => false) PL/SQL procedure successfully completed. $ cat by.txt set term off alter session set statistics_level=all; variable x number; exec :x := &&1; SElect t.* from t where id1<=:x; set term on @ dpc '' '' quit $ cat by.sh #!/bin/bash # rm -f ez.txt for i in $(seq 2000 ) do sqlplus -s -l scott/btbtms@test01p @by.txt $i >> ez.txt done alter system flush shared_pool; --//注意查新条件是id1<= :x,验证在x=1000后是否出现子光标。 SCOTT@test01p> @ share basmuva6swhg4 SQL_TEXT = SElect t.* from t where id1<=:x SQL_ID = basmuva6swhg4 ADDRESS = 000007FF1314E908 CHILD_ADDRESS = 000007FF13133298 CHILD_NUMBER = 0 LOAD_OPTIMIZER_STATS = Y REASON = <ChildNode><ChildNumber>0</ChildNumber><ID>39</ID><reason>Bind mismatch(25)</reason><size>0x0</size><details>extended_cursor_sharing</details></ChildNode> -------------------------------------------------- SQL_TEXT = SElect t.* from t where id1<=:x SQL_ID = basmuva6swhg4 ADDRESS = 000007FF1314E908 CHILD_ADDRESS = 000007FF13270B40 CHILD_NUMBER = 1 REASON = <ChildNode><ChildNumber>1</ChildNumber><ID>39</ID><reason>Bind mismatch(33)</reason><size>1x4</size><init_ranges_in_first_pass>3229815407</init_ranges_in_first_pass></ChildNode> -------------------------------------------------- SQL_TEXT = SElect t.* from t where id1<=:x SQL_ID = basmuva6swhg4 ADDRESS = 000007FF1314E908 CHILD_ADDRESS = 000007FF1343C4A0 CHILD_NUMBER = 2 BIND_EQUIV_FAILURE = Y REASON = <ChildNode><ChildNumber>2</ChildNumber><ID>39</ID><reason>Bind mismatch(33)</reason><size>1x4</size><init_ranges_in_first_pass>2954937500</init_ranges_in_first_pass></ChildNode> .. PL/SQL procedure successfully completed. $ grep "SQL_ID" ez.txt | uniq -c 1000 SQL_ID basmuva6swhg4, child number 0 101 SQL_ID basmuva6swhg4, child number 1 111 SQL_ID basmuva6swhg4, child number 2 122 SQL_ID basmuva6swhg4, child number 3 134 SQL_ID basmuva6swhg4, child number 4 147 SQL_ID basmuva6swhg4, child number 5 162 SQL_ID basmuva6swhg4, child number 6 178 SQL_ID basmuva6swhg4, child number 7 45 SQL_ID basmuva6swhg4, child number 8 $ grep "SQL_ID" ez.txt | uniq -c | awk 'BEGIN {a=909;} {sum=sum+$1;a=a*1.10;print sum, a }' 1000 999.9 1101 1099.89 1212 1209.88 1334 1330.87 1468 1463.95 1615 1610.35 1777 1771.38 1955 1948.52 2000 2143.37 --//可以看出一个规律返回1000条记录是第1道坎,以后大约按照0.11的比例增加(最后一行测试不足不算)。当然这仅仅是我的猜测。 7.继续测试: --//翻转执行看看,先执行2000: $ cat by.sh #!/bin/bash # rm -f ez.txt for i in $(seq 2000 -1 1 ) do sqlplus -s -l scott/btbtms@test01p @by.txt $i >> ez.txt done $ grep "SQL_ID" ez.txt | uniq -c 2000 SQL_ID basmuva6swhg4, child number 0 --//并没有产生子光标。 --//我现在仅仅估计出现BIND_EQUIV_FAILURE的原因可能是返回记录出现很大变化时就会出现。 [20200129]子光标不共享BIND_EQUIV_FAILURE.txt --//生产系统再次遇到大量BIND_EQUIV_FAILURE原因导致子光标的情况。我看了我以前测试遇到的情况。 --//链接 http://blog.itpub.net/267265/viewspace-2156139/ =>[20180613]子光标不共享BIND_EQUIV_FAILURE。 --//别人曾经给我建议,问题可能出在alter session set statistics_level=all;的设置上,我也重复测试看看。 1.环境: SCOTT@test01p> @ ver1 PORT_STRING VERSION BANNER CON_ID -------------------- ---------- ---------------------------------------------------------------------------- ------ IBMPC/WIN_NT64-9.1.0 12.2.0.1.0 Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production 0 SYS@test> @ hide _cursor_obsolete_threshold NAME DESCRIPTION DEFAULT_VALUE SESSION_VALUE SYSTEM_VALUE ISSES ISSYS_MOD -------------------------- ----------------------------------------------- ------------- ------------- ------------ ----- --------- _cursor_obsolete_threshold Number of cursors per parent before obsoletion. TRUE 8192 8192 TRUE FALSE /* grant execute on sys.dbms_lock to scott; CREATE OR REPLACE FUNCTION sleep1 (seconds IN NUMBER) RETURN NUMBER is d_date date; BEGIN select sysdate into d_date from dual; sys.dbms_lock.sleep(seconds/10); RETURN seconds; END; / CREATE OR REPLACE FUNCTION sleep (seconds IN NUMBER) RETURN NUMBER is d_date date; BEGIN select sysdate into d_date from dual; --//sys.dbms_lock.sleep(0.01); RETURN seconds; END; / */ --//注:当时的测试因为别的原因执行如上代码,现在测试不需要。 create table t as select rownum id1,mod(rownum-1,1000)+1 id2 from dual connect by level<=2000; SCOTT@test01p> select * from dba_extents where owner=user and segment_name='T' 2 @ prxx ============================== OWNER : SCOTT SEGMENT_NAME : T PARTITION_NAME : SEGMENT_TYPE : TABLE TABLESPACE_NAME : USERS EXTENT_ID : 0 FILE_ID : 11 BLOCK_ID : 176 BYTES : 65536 BLOCKS : 8 RELATIVE_FNO : 11 PL/SQL procedure successfully completed. 2.建立测试脚本: --//建立脚本by.txt,注解alter session set statistics_level=all;: set term off --//alter session set statistics_level=all; variable x number; exec :x := &&1; SElect t.* from t where id2<=:x; set term on @ dpc '' '' quit --//建立shell脚本by.sh: #!/bin/bash # rm -f ez.txt for i in $(seq 1000) do sqlplus -s -l scott/btbtms@test01p @by.txt $i >> ez.txt done --//在家里的笔记本上测试有点慢,减少循环到1000次。 3.测试: --//执行脚本by.sh. $ grep "SQL_ID" ez.txt | uniq -c 1000 SQL_ID ckynkwp4t00rz, child number 0 --//可以发现并没有产生子光标。确实像别人讲的那样。 4.继续测试: --//修改脚本by.txt.取消注解alter session set statistics_level=all;. set term off alter session set statistics_level=all; variable x number; exec :x := &&1; SElect t.* from t where id2<=:x; set term on @ dpc '' '' quit --//刷新共享池3次。 alter session set statistics_level=all; alter session set statistics_level=all; alter session set statistics_level=all; $ mv ez.txt ezold.txt --//执行脚本by.sh $ grep "SQL_ID" ez.txt | uniq -c 500 SQL_ID ckynkwp4t00rz, child number 0 51 SQL_ID ckynkwp4t00rz, child number 1 56 SQL_ID ckynkwp4t00rz, child number 2 61 SQL_ID ckynkwp4t00rz, child number 3 67 SQL_ID ckynkwp4t00rz, child number 4 74 SQL_ID ckynkwp4t00rz, child number 5 81 SQL_ID ckynkwp4t00rz, child number 6 90 SQL_ID ckynkwp4t00rz, child number 7 20 SQL_ID ckynkwp4t00rz, child number 8 --//在执行过程中,可以发现并出现大量子光标. SCOTT@test01p> @ share ckynkwp4t00rz old 15: and q.sql_id like ''&1''', new 15: and q.sql_id like ''ckynkwp4t00rz''', SQL_TEXT = SElect t.* from t where id2<=:x SQL_ID = ckynkwp4t00rz ADDRESS = 000007FF12B9AA10 CHILD_ADDRESS = 000007FF1265EDE8 CHILD_NUMBER = 0 LOAD_OPTIMIZER_STATS = Y REASON = <ChildNode><ChildNumber>0</ChildNumber><ID>39</ID><reason>Bind mismatch(25)</reason><size>0x0</size><details>extended_cursor_sharing</details></ChildNode> -------------------------------------------------- SQL_TEXT = SElect t.* from t where id2<=:x SQL_ID = ckynkwp4t00rz ADDRESS = 000007FF12B9AA10 CHILD_ADDRESS = 000007FF16F0F400 CHILD_NUMBER = 1 REASON = <ChildNode><ChildNumber>1</ChildNumber><ID>39</ID><reason>Bind mismatch(33)</reason><size>1x4</size><init_ranges_in_first_pass>2540213050</init_ranges_in_first_pass></ChildNode> -------------------------------------------------- SQL_TEXT = SElect t.* from t where id2<=:x SQL_ID = ckynkwp4t00rz ADDRESS = 000007FF12B9AA10 CHILD_ADDRESS = 000007FF13C989F8 CHILD_NUMBER = 2 BIND_EQUIV_FAILURE = Y REASON = <ChildNode><ChildNumber>2</ChildNumber><ID>39</ID><reason>Bind mismatch(33)</reason><size>1x4</size><init_ranges_in_first_pass>2841161709</init_ranges_in_first_pass></ChildNode> -------------------------------------------------- ... -------------------------------------------------- SQL_TEXT = SElect t.* from t where id2<=:x SQL_ID = ckynkwp4t00rz ADDRESS = 000007FF12B9AA10 CHILD_ADDRESS = 000007FF13F41A10 CHILD_NUMBER = 8 BIND_EQUIV_FAILURE = Y REASON = -------------------------------------------------- PL/SQL procedure successfully completed. $ grep "SQL_ID" ez.txt | uniq -c | awk '{ sum=sum+$1};END {print sum}' 1000 --//正好1000次。 --//可以看出设置alter session set statistics_level=all;导致出现子光标不能共享,具体原因是什么不清楚。 --//我反复测试多次,结果都是一样。 5.建立直方图呢? SCOTT@test01p> execute sys.dbms_stats.gather_table_stats ( OwnName => user,TabName => 't',Estimate_Percent => NULL,Method_Opt => 'FOR ALL COLUMNS SIZE 1024 ',Cascade => True ,No_Invalidate => false) PL/SQL procedure successfully completed. --//12c 可以支持bucket大于254. SCOTT@test01p> @ tab_lh scott t '' DISPLAY TABLE_NAME OF COLUMN_NAME INFORMATION. INPUT OWNER TABLE_NAME COLUMN SAMPLE : @ TAB_LH TABLE_NAME [COLUMN_NAME] IF NOT INPUT COLUMN_NAME ,USE "" . COLUMN_NAME DATA_TYPE DATA_LENGTH N NUM_DISTINCT DENSITY SAMPLE_SIZE TRANS_LOW TRANS_HIGH NUM_NULLS NUM_BUCKETS LAST_ANALYZED HISTOGRAM DATA_DEFAULT ----------- --------- ----------- - ------------ ---------- ----------- --------- ---------- ---------- ----------- ------------------- ---------- ------------------------- ID1 NUMBER 22 Y 2000 .0005 2000 1 2000 0 1024 2020-01-29 19:44:04 HYBRID ID2 NUMBER 22 Y 1000 .00025 2000 1 1000 0 1000 2020-01-29 19:44:04 FREQUENCY --//刷新共享池3次。 alter session set statistics_level=all; alter session set statistics_level=all; alter session set statistics_level=all; --//执行脚本by.txt。 set term off --//alter session set statistics_level=all; variable x number; exec :x := &&1; SElect t.* from t where id2<=:x; set term on @ dpc '' '' quit $ mv ez.txt ez17.txt $ grep "SQL_ID" ez.txt | uniq -c 1000 SQL_ID ckynkwp4t00rz, child number 0 --//没有子光标产生。 SCOTT@test01p> execute sys.dbms_stats.gather_table_stats ( OwnName => user,TabName => 't',Estimate_Percent => NULL,Method_Opt => 'FOR ALL COLUMNS SIZE 254 ',Cascade => True ,No_Invalidate => false) PL/SQL procedure successfully completed. SCOTT@test01p> @ tab_lh scott t '' DISPLAY TABLE_NAME OF COLUMN_NAME INFORMATION. INPUT OWNER TABLE_NAME COLUMN SAMPLE : @ TAB_LH TABLE_NAME [COLUMN_NAME] IF NOT INPUT COLUMN_NAME ,USE "" . COLUMN_NAME DATA_TYPE DATA_LENGTH N NUM_DISTINCT DENSITY SAMPLE_SIZE TRANS_LOW TRANS_HIGH NUM_NULLS NUM_BUCKETS LAST_ANALYZED HISTOGRAM DATA_DEFAULT ----------- --------- ----------- - ------------ ---------- ----------- --------- ---------- --------- ----------- ------------------- --------- ------------ ID1 NUMBER 22 Y 2000 .0005 2000 1 2000 0 254 2020-01-29 20:01:43 HYBRID ID2 NUMBER 22 Y 1000 .001 2000 1 1000 0 254 2020-01-29 20:01:43 HYBRID --//刷新共享池3次。 alter session set statistics_level=all; alter session set statistics_level=all; alter session set statistics_level=all; $ mv ez.txt ez18.txt $ grep "SQL_ID" ez.txt | uniq -c 1000 SQL_ID ckynkwp4t00rz, child number 0 --//没有子光标产生。 --//也就是与直方图无关。 6.继续测试: --//取消直方图设置。 SCOTT@test01p> execute sys.dbms_stats.gather_table_stats ( OwnName => user,TabName => 't',Estimate_Percent => NULL,Method_Opt => 'FOR ALL COLUMNS SIZE 1 ',Cascade => True ,No_Invalidate => false) PL/SQL procedure successfully completed. $ cat by.txt set term off alter session set statistics_level=all; variable x number; exec :x := &&1; SElect t.* from t where id1<=:x; set term on @ dpc '' '' quit $ cat by.sh #!/bin/bash # rm -f ez.txt for i in $(seq 2000 ) do sqlplus -s -l scott/btbtms@test01p @by.txt $i >> ez.txt done alter system flush shared_pool; --//注意查新条件是id1<= :x,验证在x=1000后是否出现子光标。 SCOTT@test01p> @ share basmuva6swhg4 SQL_TEXT = SElect t.* from t where id1<=:x SQL_ID = basmuva6swhg4 ADDRESS = 000007FF1314E908 CHILD_ADDRESS = 000007FF13133298 CHILD_NUMBER = 0 LOAD_OPTIMIZER_STATS = Y REASON = <ChildNode><ChildNumber>0</ChildNumber><ID>39</ID><reason>Bind mismatch(25)</reason><size>0x0</size><details>extended_cursor_sharing</details></ChildNode> -------------------------------------------------- SQL_TEXT = SElect t.* from t where id1<=:x SQL_ID = basmuva6swhg4 ADDRESS = 000007FF1314E908 CHILD_ADDRESS = 000007FF13270B40 CHILD_NUMBER = 1 REASON = <ChildNode><ChildNumber>1</ChildNumber><ID>39</ID><reason>Bind mismatch(33)</reason><size>1x4</size><init_ranges_in_first_pass>3229815407</init_ranges_in_first_pass></ChildNode> -------------------------------------------------- SQL_TEXT = SElect t.* from t where id1<=:x SQL_ID = basmuva6swhg4 ADDRESS = 000007FF1314E908 CHILD_ADDRESS = 000007FF1343C4A0 CHILD_NUMBER = 2 BIND_EQUIV_FAILURE = Y REASON = <ChildNode><ChildNumber>2</ChildNumber><ID>39</ID><reason>Bind mismatch(33)</reason><size>1x4</size><init_ranges_in_first_pass>2954937500</init_ranges_in_first_pass></ChildNode> .. PL/SQL procedure successfully completed. $ grep "SQL_ID" ez.txt | uniq -c 1000 SQL_ID basmuva6swhg4, child number 0 101 SQL_ID basmuva6swhg4, child number 1 111 SQL_ID basmuva6swhg4, child number 2 122 SQL_ID basmuva6swhg4, child number 3 134 SQL_ID basmuva6swhg4, child number 4 147 SQL_ID basmuva6swhg4, child number 5 162 SQL_ID basmuva6swhg4, child number 6 178 SQL_ID basmuva6swhg4, child number 7 45 SQL_ID basmuva6swhg4, child number 8 $ grep "SQL_ID" ez.txt | uniq -c | awk 'BEGIN {a=909;} {sum=sum+$1;a=a*1.10;print sum, a }' 1000 999.9 1101 1099.89 1212 1209.88 1334 1330.87 1468 1463.95 1615 1610.35 1777 1771.38 1955 1948.52 2000 2143.37 --//可以看出一个规律返回1000条记录是第1道坎,以后大约按照0.11的比例增加(最后一行测试不足不算)。当然这仅仅是我的猜测。 7.继续测试: --//翻转执行看看,先执行2000: $ cat by.sh #!/bin/bash # rm -f ez.txt for i in $(seq 2000 -1 1 ) do sqlplus -s -l scott/btbtms@test01p @by.txt $i >> ez.txt done $ grep "SQL_ID" ez.txt | uniq -c 2000 SQL_ID basmuva6swhg4, child number 0 --//并没有产生子光标。 --//我现在仅仅估计出现BIND_EQUIV_FAILURE的原因可能是返回记录出现很大变化时就会出现。
[20200129]子光标不共享BIND_EQUIV_FAILURE.txt
来源:这里教程网
时间:2026-03-03 14:57:21
作者:
编辑推荐:
- [20200129]子光标不共享BIND_EQUIV_FAILURE.txt03-03
- Oracle 12C新特性-RMAN恢复表03-03
- Oracle Linux 7.5下载和安装03-03
- 奥普“快档通”扫描识别系统03-03
- PLSQL 连接服务器与执行SQL语句非常慢03-03
- 证件识别03-03
- Oracle 19C下载和安装(二)03-03
- Oracle相关命令03-03
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- Oracle 12C新特性-RMAN恢复表
Oracle 12C新特性-RMAN恢复表
26-03-03 - Oracle Linux 7.5下载和安装
Oracle Linux 7.5下载和安装
26-03-03 - PLSQL 连接服务器与执行SQL语句非常慢
PLSQL 连接服务器与执行SQL语句非常慢
26-03-03 - Oracle 19C下载和安装(二)
Oracle 19C下载和安装(二)
26-03-03 - 墨天轮DBASK问答集萃第十期
墨天轮DBASK问答集萃第十期
26-03-03 - 墨天轮DBASK问答集萃第十一期
墨天轮DBASK问答集萃第十一期
26-03-03 - CentOS 7 安装 Oracle 11.2.0.4
CentOS 7 安装 Oracle 11.2.0.4
26-03-03 - Oracle 19C EM
Oracle 19C EM
26-03-03 - Oracle 11g升级到12C
Oracle 11g升级到12C
26-03-03 - ASM集群文件系统ACFS(ASM Cluster File System)
