ITPub博客

首页 > 数据库 > Oracle > 使用Oracle 19c,必须要注意这个Bug

使用Oracle 19c,必须要注意这个Bug

原创 Oracle 作者:Roger的数据库专栏 时间:2024-10-10 11:59:19 0 删除 编辑

今天数据库诊断付费文章订阅伙伴群中,有个小伙伴提到,一个抽取软件报错out of memory。

小伙伴不太理解的地方是,这里看上去有ora-04031错误。老实说,stream pool用的很少,我也很少见这个内存结构报4031错误。那么大概率就是用到了这个内存组健。

从提供的图片来看,似乎stream pool的free memory还是非常多的,高达10GB。

刚好下午这会儿不太忙,就顺便看了下这个case,感觉有点意思。

从我的理解,既然free memory 还有10GB之多,那么居然还报错,因此有没有可能是Oracle 19c这个版本中内存的管理有一些变化呢?

我看了一下我的测试环境19.23环境,发现多了一个参数:

NAME                                                                   VALUE                DESCRIB

---------------------------------------------------------------------- -------------------- --------------------------------------------------------------------------------
__streams_pool_size                                                    0                    Actual size  in bytes of streams pool
streams_pool_size                                                      0                    size  in bytes of the streams pool
_bug34010877_enable_streams_pool_subpools                              FALSE                 enable streams pool multiple subpools
_disable_streams_pool_auto_tuning                                      FALSE                 disable streams pool auto tuning
_streams_pool_max_size                                                 0                    streams pool maximum size when auto SGA enabled
_memory_broker_shrink_streams_pool                                     900                  memory broker allow policy to shrink streams pool
_redo_transport_stream_writes                                          TRUE                 Stream network writes?
_redo_transport_stream_test                                            TRUE                  test stream connection?
_disable_streams_diagnostics                                           0                    streams diagnostics
_aq_streaming_threshold                                                10485760             large payload threshold size

10 rows selected.

实际上就是打了补丁,多了一个_bug34010877_enable_streams_pool_subpools 参数而已。 顾名思义,也就是说从某个版本开始,Oracle 默认情况之下,也将stream pool 变成了subpool结构,类似Oracle shared pool一样。

我们知道,oracle 9i开始引入了shared pool的subpool 机制,后面版本中,默认会是7个子池。基于这个思路,我查了下mos,果然发现了这个官方的说明:

小伙伴这里查了下,果然还真是7个子池。 那么既然如此,就极有可能是个别子池free memory不足了,也就是说各个子池内存使用很不均匀,实际上这个问题还是挺常见的,特别是大家之前处理shared pool的时候。

经了解该网友使用的抽取软件使用oracle xstream,难怪需要要用stream pool。

比较有意思的是,我发现oracle 23 Ai版本中,直接引入了一个新的参数:

而且我们发现_enable_streams_pool_subpools 默认就是false,也就是并没有启用这个功能。

难道Oracle很早就意识到了这个问题了?


-----------------------------------------------------------------------------------

喜欢本文的朋友,欢迎关注公众号      Roger的数据库专栏,收看更多精彩内容


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/14306684/viewspace-3035765/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
2015年获得Oracle ACE称号, 15年数据库从业经验,擅长数据库诊断、恢复和架构设计! 熟悉OceanBase、openGauss、达梦等国产数据库! 《Roger的数据库专栏》作者!

注册时间:2019-05-17

  • 博文量
    38
  • 访问量
    37787