TABLESPACE_NAME BYTES/1024/1024/1024
------------------------------ --------------------
TESTTBL 2.099609375
Owner列上面创建索引IDX_T_OWNER。
3、自动sampling adjusted
当前采用取值为2,由于数据表比较大,采用并行查询策略。
SQL> explain plan for select /*+ parallel(t, 2) */count(*) from t;
Explained
SQL> select * from table(dbms_xplan.display);
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 3126468333
--------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Cost (%CPU)| Time | T
--------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 41414 (1)| 00:08:17 |
| 1 | SORT AGGREGATE | | 1 | | |
| 2 | PX COORDINATOR | | | | |
| 3 | PX SEND QC (RANDOM) | :TQ10000 | 1 | | | Q1,
| 4 | SORT AGGREGATE | | 1 | | | Q1,
| 5 | PX BLOCK ITERATOR | | 23M| 41414 (1)| 00:08:17 | Q1,
| 6 | TABLE ACCESS FULL| T | 23M| 41414 (1)| 00:08:17 | Q1,
--------------------------------------------------------------------------------
Note
-----
- dynamic sampling used for this statement (level=5)
17 rows selected
新创建的数据表,没有显示的进行数据收集动作。所以Oracle会去选择动态采样Dynamic Sampling策略。在使用parallel和动态采样的SQL语句中,我们使用explain plan生成了执行计划,但是在末尾的note中,发现了不确定的部分。
当前dynamic sampling设置参数为2,但是在执行计划上显示的是5。取值越高,意味着更高的采样比例,进而意味着更准确地执行计划生成。
从其他的场景,比如非并行开启或者小数据表查询,我们都没有看到这样的现象。说明:这个是针对Oracle特殊SQL场景下的一种优化措施。研究CBO行为最好的方式是使用10053等待事件进行跟踪处理。下面利用这种方法进行检查。