Oracle数据泵expdp遭遇Streams AQ: Enqueue Blocked On Low Memory等待事件
Oracle 版本:11.2.0.4.0
查看数据泵导出的会话在等待什么:
select s.sid,s.serial# from v$session s,dba_datapump_sessions d where s.saddr=d.saddr;
通过查到的sql找到等待事件:
select enevt from v$session where sid='';
Streams AQ: enqueue blocked on low memory
查看当前导出任务:
select * from dba_datapump_jobs;
删除当前任务:
select owner,object_name,object_type,status,LAST_DDL_TIME from dba_objects where object_name=upper('SYS_EXPORT_SCHEMA_01')
OWNER_NAME JOB_NAME OPERATION JOB_MODE STATE DEGREE ATTACHED_SESSIONS DATAPUMP_SESSIONS
------------ ------------------- ------------ --------- -------------- -------------- --------------------------------------
SYS SYS_EXPORT_SCHEMA_01 EXPORT SCHEMA EXECUTING 8 1 2
drop table sys.SYS_EXPORT_SCHEMA_01
查看当前streams pool大小:
select COMPONENT,CURRENT_SIZE/1024/1024 CURRENT_SIZE_MB from V$SGA_DYNAMIC_COMPONENTS where COMPONENT='streams pool';
检查以下查询是否一直返回“1”。该值表示 streams pool 处于收缩阶段。当 streams pool 完成收缩时,该值应返回“0”,但如果它一直返回“1”,则您可能遇到此问题。
SQL> select shrink_phase_knlasg from X$KNLASG;
SHRINK_PHASE_KNLASG
-------------------
1
即使 streams pool 已经结束收缩,该标志也没有被修改,这导致各种 stream pool 操作(例如数据泵的内部操作)等待 "StreamsAQ: enqueue blocked on low memory"。
由于“StreamsAQ: enqueue blocked on low memory”等待事件导致expdp / impdp命令出现严重性能问题,并且X$KNLASG.SHRINK_PHASE_KNLASG 列保持返回1并持续几分钟,则从sqlplus运行以下命令强制streams pool缩小完成,也可以应用Patch 27634991以防止发生此问题。在版本19.1及更高版本中修复了该问题。
处理:
SQL>alter system set events 'immediate trace name mman_create_def_request level 6';
SQL> select shrink_phase_knlasg from X$KNLASG;
SHRINK_PHASE_KNLASG
-------------------
0
重新expdp导出完成。
搜索mos,根据等待 ”Streams AQ: Enqueue Blocked On Low Memory" 而导致expdp,Impdp变慢 (文档 ID 2469587.1),