关于实时统计oracle 19c仅适用于特定表

关于实时统计oracle 19c仅适用于特定表,oracle,performance-testing,query-performance,database-administration,oracle19c,Oracle,Performance Testing,Query Performance,Database Administration,Oracle19c,Reg Real-Time statistics,它扩展了在线统计数据收集(12c),还包括传统的DML语句。 实时统计信息有助于优化器生成更优化的计划。大容量装载操作收集所有必要的统计信息,而实时统计信息会增强而不是取代传统的统计信息 Oracle引入了新参数 \u optimizer\u在常规\u dml上收集\u统计信息\u和\u optimizer\u在常规\u dml上使用\u统计信息\u,默认情况下为true,并且 \u优化器\u统计数据\u常规\u dml\u采样率\u为100%

Reg Real-Time statistics,它扩展了在线统计数据收集(12c),还包括传统的DML语句。 实时统计信息有助于优化器生成更优化的计划。大容量装载操作收集所有必要的统计信息,而实时统计信息会增强而不是取代传统的统计信息

Oracle引入了新参数

\u optimizer\u在常规\u dml上收集\u统计信息\u
\u optimizer\u在常规\u dml上使用\u统计信息\u
,默认情况下为true,并且
\u优化器\u统计数据\u常规\u dml\u采样率\u
为100%

实时统计是如何工作的

默认情况下,dml上的
\u optimizer\u gather\u stats\u是真的,因此它会自动启动

当DML操作当前正在修改表(常规)时,如果启用上述参数,Oracle数据库将动态计算最基本统计信息的值

考虑一个表的例子,该表有很多插入项,并且行数在增加。实时统计信息跟踪插入行时增加的行数。如果优化器对新查询执行硬解析,那么优化器可以使用实时统计信息获得更准确的成本估算

USER\u TAB\u COL\u STATISTICS
USER\u TAB\u STATISTICS
有列注释,说明使用了实时统计信息。“常规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

加载表常规
优化器统计数据收集
是添加到此新功能的解释计划中的新参数

我们能否只对一组特定的表应用实时统计数据?如果是,如何进行

我们知道,获取超过10万行的任何dml操作的实时统计数据是非常昂贵的操作


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

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

请注意,
优化器统计信息收集
实际上是一个12.1执行计划操作,根据 . 看起来12.1在线统计功能在19c中针对Exadata进行了修改,并重命名为实时统计

实时统计信息仅在Exadata上可用,根据:您不能在常规Enterprise Edition数据库上使用实时统计信息


你们有可用的Exadata系统吗?如果没有,您无法测试此功能。

即使我没有exadata系统可用,我们也可以使用
alter system set“\u exadata\u feature\u on”=true scope=spfile。这里我的问题是我们是否可以只对单个表使用实时统计数据,我不想对我的整个数据库模式实现这一点,可以用这个未记录的参数测试Exadata特性。一些与12.1相关的新功能可能在19版本中被重命名和修改。然而,根据文档,实时统计是一种自动功能。有一个提示
NO_GATHER\u OPTIMIZER\u STATISTICS
可以在特定查询中禁用它,但我没有发现任何在查询或表级别启用它的提示,也没有在表级别启用它的DBMS\u STATS功能。我已经修改了关于在线统计和实时统计功能的回答。是的,我也找到了相同的提示,但在生产环境中,我们有1000个表,我们无法使用此提示手动修改所有表的插入、删除、更新查询
NO\u GATHER\u OPTIMIZER\u STATISTICS
。那么,是否有其他方式可以提及表名,以便仅对这些表应用此新功能如果此Exadata功能确实存在生产问题,则应与Oracle支持部门合作。如果您想使用未记录的参数,您甚至应该更多地使用Oracle支持(未经Oracle支持部门同意,您不应该在生产中使用未记录的参数,否则您的系统可能不受Oracle支持)。对不起,我再也帮不上忙了。