11G ACS特性探究实验(二)

2014-11-24 17:09:10 · 作者: · 浏览: 10
------------------------------------------------ …… …… Peeked Binds (identified by position): PLAN_TABLE_OUTPUT ------------------------------------------------------------------------------------------------------------------------------------------------------ -------------------------------------- 1 - :A (VARCHAR2(30), CSID=854): 'K' 从执行计划来看 这里发生了PEEK 值是'K'被识别了,但是从Rows可以看出是 总行数/基数 算出来的6673 SQL> exec :a :='M'; PL/SQL procedure successfully completed. 这时候把绑定变量设为M,从上面的比例可以看出,M只有20条, SQL> select * from t where id1=:a;----执行 20 rows selected. SQL> select sql_text,sql_id,version_count,executions from v$sqlarea where sql_text like 'select * from t%'; SQL_TEXT SQL_ID VERSION_COUNT EXECUTIONS ----------------------------- ------------ ------------ --------- select * from t where id1=:a dkatjhft2bfmv 1 2 看到了version_count没有增加。 SQL> select SQL_ID,CHILD_NUMBER,IS_BIND_SENSITIVE, IS_BIND_AWARE, IS_SHAREABLE from v$sql where sql_id='dkatjhft2bfmv'; SQL_ID CHILD_NUMBER I I I ------------- ------------ - - - dkatjhft2bfmv 0 Y N Y 这里看到了 子cursor只有1个。 child_number=0 再次查看执行计划 Plan hash value: 1601196873 -------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | -------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | | | 10 (100)| | |* 1 | TABLE ACCESS FULL| T | 6673 | 40038 | 10 (0)| 00:00:01 | PLAN_TABLE_OUTPUT ------------------------------------------------------------------------------------------------------------------------------------------------------ -------------------------------------------------------------------------- Query Block Name / Object Alias (identified by operation id): ------------------------------------------------------------- 1 - SEL$1 / T@SEL$1 Peeked Binds (identified by position): PLAN_TABLE_OUTPUT ------------------------------------------------------------------------------------------------------------------------------------------------------ -------------------------------------- 1 - :A (VARCHAR2(30), CSID=854): 'K' 依然还是K。 SQL>
select * from t where id1=:a;----再次执行 20 rows selected. select sql_id,child_number from v$sql where sql_id='dkatjhft2bfmv'; SQL_ID CHILD_NUMBER ------------- ------------ dkatjhft2bfmv 0 dkatjhft2bfmv 1 发现多出了一个子游标。两个子游标的rows返回的都是6673,不过peek那里值不同的。 执行计划完全一致 --------------------------------------------------------------------------第一档实验结束,11G 如果没有直方图,会发生Adaptive Cursor Sharing,但执行计划完全一直----------- ----------------------------------------------------------------------现在开始收集直方图----------------------- SQL> alter system flush shared_pool; System altered. SQL> exec dbms_stats.gather_table_stats('SYS','T',CASCADE=>TRUE,ESTIMATE_PERCENT=>100,METHOD_opt=>'for columns size 10 id1'); PL/SQL procedure successfully completed. ---------------看统计信息。FREQUENCY的直方图 NUM_BUCKETS 3个----- COLUMN_NAME NUM_ROWS CARDINALITY SELECTIVITY HISTOGRAM NUM_BUCKETS ------------------ ---------- ----------- ----------- --------------- ----------- ID1 20020 3 .01 FREQUENCY 3 SQL> exec :a:='K'; ----10000行的 PL/SQL procedure successfu