Reg 实时统计,它扩展了在线统计收集 (12c) 以还包括传统的 DML 语句。实时统计信息有助于优化器生成更优化的计划。批量加载操作收集所有必要的统计信息,而实时统计信息增加而不是取代传统统计信息。
Oracle 引入了新参数
_optimizer_gather_stats_on_conventional_dml
并且_optimizer_use_stats_on_conventional_dml
默认情况下为 true 且
_optimizer_stats_on_conventional_dml_sample_rate
为 100%
实时统计如何工作?
默认情况下_optimizer_gather_stats_on_conventional_dml
为 true,因此它会自动启动
当 DML 操作当前正在修改表时(常规),如果上述参数打开,Oracle 数据库会动态计算最重要的统计信息的值。
考虑一个有很多插入并且行在增加的表的例子。在插入行时,实时统计信息会跟踪不断增加的行数。如果优化器对新查询执行硬解析,则优化器可以使用实时统计信息来获得更准确的成本估算。
USER_TAB_COL_STATISTICS
并USER_TAB_STATISITICS
有列 NOTES 告诉实时统计信息已被使用。“STATS_ON_CONVENTIONAL_DML”。
执行计划显示
|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 |
Also the explain plan in the query used will tell in note section
Note
-----
- dynamic statistics used: stats for conventional DML
LOAD TABLE CONVENTIONAL
并且OPTIMIZER STATISTICS GATHERING
是已添加到此新功能的解释计划中的新参数。
我们可以只对一组特定的表应用实时统计吗?如果是,如何?
我们知道为超过 100k 行发生的任何 dml 操作获取实时统计数据是非常昂贵的操作
我试图找出路,但没有成功