1

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_STATISTICSUSER_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 操作获取实时统计数据是非常昂贵的操作

我试图找出路,但没有成功

4

1 回答 1

1

动态统计和实时统计是不同的。

请注意,根据Mike Dietrich 博客OPTIMIZER STATISTICS GATHERING,这实际上是与实时统计无关的 12.1 执行计划操作 。看起来 12.1 在线统计功能已在 19c 中针对 Exadata 进行了修改,并重命名了实时统计信息。

根据许可指南,实时统计数据仅在 Exadata 上可用:您无法在通常的 Entreprise Edition 数据库上获得实时统计数据。

是否有可用的 Exadata 系统?如果不是,您将无法测试此功能。

于 2020-05-18T06:46:43.190 回答