Reg实时统计,它扩展了在线统计收集(12c)的范围,也包括常规的DML语句。 实时统计信息可帮助优化器生成更优化的计划。而大容量装载操作会收集所有必要的统计信息,而实时统计信息则可以增加而不是取代传统统计信息。
Oracle引入了新参数
_optimizer_gather_stats_on_conventional_dml
and _optimizer_use_stats_on_conventional_dml
which are true by default
_optimizer_stats_on_conventional_dml_sample_rate
at 100%.
实时统计如何工作?
By default the _optimizer_gather_stats_on_conventional_dml
is true so its automatically kicks off
当前,当DML操作正在修改表(常规)时,如果启用了上述参数,则Oracle数据库将动态计算最基本统计信息的值。
考虑一个表的示例,该表具有大量插入并且行不断增加。当插入行时,实时统计信息会跟踪不断增加的行数。如果优化器执行新查询的硬解析,则优化器可以使用实时统计信息来获得更准确的成本估算。
USER_TAB_COL_STATISTICS和USER_TAB_STATISITICS的列具有“注释”,以告知已使用实时统计信息。 STATS_ON_CONVENTIONAL_DML。
Execution Plan shows
---------------------------------------------------------------------------------------
|Id| Operation | Name|Rows|Bytes|Cost (%CPU)|Time| Pstart|Pstop|
---------------------------------------------------------------------------------------
| 0| INSERT STATEMENT | | | |910 (100)| | | |
| 1| LOAD TABLE CONVENTIONAL |SALES| | | | | | |
| 2| OPTIMIZER STATISTICS GATHERING | |918K| 25M|910 (2)|00:00:01| | |
| 3| PARTITION RANGE ALL | |918K| 25M|910 (2)|00:00:01| 1 | 28 |
| 4| TABLE ACCESS FULL |SALES|918K| 25M|910 (2)|00:00:01| 1 | 28 |
另外在查询中使用的解释计划将在注释部分说明
Note
-----
- dynamic statistics used: stats for conventional DML
上面以粗体显示的内容是已添加到此新功能说明计划的新参数。
我的问题是,我们可以仅将实时统计信息应用于一组特定的表吗?如果是,我们如何实现它们?众所周知,要获取任何行数超过数十万的dml操作的实时统计信息,都是非常昂贵的操作。
我试图找出方法,但没有成功。