关于仅特定表的实时统计信息oracle 19c

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操作的实时统计信息,都是非常昂贵的操作。

我试图找出方法,但没有成功。

评论