【问题标题】:About real time statistics oracle 19c only for particular table关于实时统计 oracle 19c 仅适用于特定表
【发布时间】:2020-05-18 06:16:28
【问题描述】:

Reg 实时统计数据将在线统计数据收集 (12c) 扩展到还包括传统的 DML 语句。 实时统计信息有助于优化器生成更优化的计划。批量加载操作收集所有必要的统计信息,而实时统计信息增加而不是取代传统统计信息。

Oracle 引入了新参数

_optimizer_gather_stats_on_conventional_dml_optimizer_use_stats_on_conventional_dml 默认为真 _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 CONVENTIONALOPTIMIZER STATISTICS GATHERING 是已添加到此新功能说明计划中的新参数。

我们可以只对一组特定的表应用实时统计信息吗?如果是,怎么做?

我们知道为超过 100k 行发生的任何 dml 操作获取实时统计数据是非常昂贵的操作

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

【问题讨论】:

    标签: oracle performance-testing query-performance database-administration oracle19c


    【解决方案1】:

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

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

    根据licensing guide,只能在 Exadata 上使用实时统计信息:您无法在通常的 Entreprise Edition 数据库上获得实时统计信息。

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

    【讨论】:

    • 即使我没有可用的 Exadataa 系统,我们也可以使用 alter system set “_exadata_feature_on”=true scope=spfile; 进行更改。这里我的问题是我们可以只对单个表使用实时统计吗,我不想为我的整个数据库架构实现这个
    • 好的,您可以使用这个未记录的参数测试 Exadata 功能。并且有可能在 19 版本中对一些新的 12.1 相关功能进行了重命名和修改。然而,根据文档,实时统计是一种自动功能。有一个提示 NO_GATHER_OPTIMIZER_STATISTICS 可以为特定查询禁用它,但我没有找到任何提示可以在查询或表级别启用它,也没有 DBMS_STATS 功能可以在表级别启用它。
    • 我已经修改了关于在线统计和实时统计功能的答案。
    • 是的,我也发现了相同的情况,但是在生产环境中我们有 1000 多个表,我们无法使用此提示 NO_GATHER_OPTIMIZER_STATISTICS 手动修改所有表的插入、删除、更新查询。那么,有没有其他方法可以提及表名,所以只有这些表才能应用这个新功能
    • 如果您在使用此 Exadata 功能时确实存在生产问题,您应该使用 Oracle 支持。如果您想使用未记录的参数,您甚至应该更多地使用 Oracle 支持(如果没有 Oracle 支持的同意,您不应该在生产中使用未记录的参数,否则您的系统可能不受 Oracle 支持)。抱歉,我不能提供更多帮助。
    猜你喜欢
    • 2021-06-24
    • 2021-03-20
    • 1970-01-01
    • 2020-10-15
    • 1970-01-01
    • 2022-08-03
    • 2018-01-21
    • 1970-01-01
    • 2016-03-11
    相关资源
    最近更新 更多