expdp遇到StreamsAQ: enqueue blocked on low memory

在Oracle 12.2.0.1环境中,expdp备份速度异常缓慢,出现StreamsAQ: enqueue blocked on low memory等待事件。问题可能因Auto SGA环境下Stream pool调整失败导致。解决方案包括通过设置事件跟踪来解决问题,并考虑增加SGA大小以避免内存争用。增加SGA大小后,expdp备份得以正常进行。

有套oracle12.2.0.1环境,expdp备份一直很正常,但突然有一天备份的特别慢,由于数据库有1个多T,导致24小时都备份不完,但之前大概需要5个小时左右。

监控的时候发现备份进程一直在等待StreamsAQ: enqueue blocked on low memory,印象中以前也遇到过,增加了large pool的大小后即可,但这次不好使了。

查了下相关资料,有种情况是sga设置成自动调整,expdp备份的过程中需要调整stream pool大小,但没有调整成功,就会一直卡在该等待事件上:

This problem may potentially occur in Auto SGA environment (sga_target or memory_target is set), when there is a load in the buffer cache and streams pool memory is being moved to buffer cache.

If encountering similar slowdowns, check if following query constantly returns "1".  This value indicates that streams pool is in shrinking phase.  The value should return "0" when streams pool finishes shrinking, but if it keeps returning "1", then you may have encountered this problem.

执行了如下语句:

SQL> select shrink_phase_knlasg from X$KNLASG;

SHRINK_PHASE_KNLASG
-------------------
1

发现结果确实是1,说明stream pool调整不成功。

给出的解决方案是:

alter system set events 'immediate trace name mman_create_def_request level 6';

亲测可用。

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

由于我这边现在的版本基线就是oracle12.2.0.1,所以绝大多数的版本都是基于此并且很多系统已经上线有三四年之久,但这个问题是第一次遇到。

一定程度可以说明遇到此问题的系统存在一定的特殊性,该库数据量较大,但发现sga只有2g多点,但操作系统的内存是32g。

大致推论一下,该系统上线之初应该是给的8g的内存资源,所以在dbca创建数据库的时候,sga默认分配大概2g多点,但在后续使用过程中,应该是有再申请过扩充系统内存资源,但并未修改数据库的内存大小,导致oracle依旧运行在2g多内存情况下,加上该库存在大量批量任务,内存资源吃紧,sga中各个内存区存在争用,导致expdp执行时候申请资源也身不由己,触发了意外状况。

基于此,找个维护窗口增加sga大小,应该也可以解决该问题。

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

expdp跑了一会后,再次出现该等待事件,再次执行alter system set events 'immediate trace name mman_create_def_request level 6'; 后又可以欢快的导出了。

说明,还是需要增加sga的大小。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值