首页 » ORACLE [C]系列, ORACLE 9i-23c » Oracle 19/21c 新特性: Sequence dynamic cache resizing

Oracle 19/21c 新特性: Sequence dynamic cache resizing

从Oracle 19.10 及更高版本中提供的sequence新增强功能“Sequence dynamic cache resizing ”, 在Oracle中如果应用中频繁的调用sequence的nextval值是可能存在性能问题,如enq:SQ 或row cache lock,  之前在一个客户的业务系统有一个非常糟糕的设计全库使用一个sequence, 所以及时cache值调到了2万依旧在高并发调用时sequence性能问题还是非常明显。

默认sequence cache通常为20, 我还是建议创建时配置cache 200起步。

该功能默认启用,不需要 DBA 或最终用户进行额外设置。此功能根据sequence的消耗率动态调整sequence cache的大小。因此,sequence cache大小可以远远超过配置的 DDL 缓存大小。这意味着cache可以随时间自动增长和缩小,具体取决于使用情况,同时永远不会低于 DDL 指定的缓存大小。

动态缓存大小调整可以显着提高使用序列的快速插入工作负载的性能。这是通过减少补充cache缓存所需的磁盘访问次数来实现的,这在 Oracle RAC 环境中尤其重要。如果在 RAC 设置中跨节点使用序列,这可能会导致跨实例看到的sequence存在较大差距。

禁用方法

_dynamic_sequence_cache = FALSE;

相关参数(虽然文档中是19.10引入该物性,但是19.3就已经引入了该参数)

SQL> @pd dynamic_sequ
Show all parameters and session values from x$ksppi/x$ksppcv...

       NUM N_HEX NAME                                                     VALUE                          DESCRIPTION
---------- ----- -------------------------------------------------------- ------------------------------ ---------------------------------------------------------------------------------------------------
      2882   B42 _dynamic_sequence_cache                                  TRUE                           Enable/disable sequence dynamic cache sizing
      2883   B43 _dynamic_sequence_cache_scale                            10                             Max scale factor for dynamic sequence cache size
      2884   B44 _dynamic_sequence_cache_max                              1000000                        Sequence dynamic cache maximum size


打赏

对不起,这篇文章暂时关闭评论。