expdp备份hang住问题
1、 问题描述
oracle版本11.2.0.4,在做expdp备份时,一直卡在初始化位置
。

2、 问题分析
检查
Io等待非常高

检查
io居高的进程为ora_m00X,该进程为MMON子任务,kill掉也不影响,但实际上kill之后io负载降下来了,但备份也还是hang在那。

实际上在 vda磁盘上的数据文件并不多,大部分文件放在vdb、vdc和vdd上。 查看等待事件: SQL> select event,count(*) from gv$session where wait_class<>'Idle' group by event; EVENT COUNT(*) ---------------------------------------------------------------- ---------- Streams AQ: enqueue blocked on low memory 1 SQL*Net message to client 1 其中 “ Streams AQ: enqueue blocked on low memory ”事件比较可疑 查询 mos,有一篇文档比较符合 Datapump Expdp Or Impdp Slowdown Due To Frequent Waits On ”Streams AQ: Enqueue Blocked On Low Memory" (Doc ID 2386566.1)
3、 问题原因
造成这个原因是由于
BUG 27634991,改bug会造成EXPDP等候'STREAMS AQ: ENQUEUE BLOCKED ON LOW MEMORY',在19.1版本修复。

在 Auto SGA 环境(设置了 sga_target 或 memory_target )下,当 buffer cache 负载较高并且 streams pool 中的内存正被移动到 buffer cache 时,可能会发生此问题。
如果遇到类似的性能问题时,请检查以下查询是否一直返回 “ 1 ”。该值表示 streams pool 处于收缩阶段。当 streams pool 完成收缩时,该值应返回“ 0 ”,但如果它一直返回“ 1 ”,则您可能遇到此问题。
4、 问题解决
查询 streams pool 收缩状态: SQL> select shrink_phase_knlasg from X$KNLASG; SHRINK_PHASE_KNLASG ------------------- 1 强制完成 streams pool 收缩: SQL> alter system set events 'immediate trace name mman_create_def_request level 6'; System altered. SQL> select shrink_phase_knlasg from X$KNLASG; SHRINK_PHASE_KNLASG ------------------- 0 当状态为 0了,说明收缩完成,再次通过expdp备份恢复正常。
5、 总结建议
1、该问题 最终结论( 由于 BUG 27634991导致 streams pool 收缩异常 )( Doc ID 2386566.1) 。 2、expdp/impdp备份恢复任务检查: SQL> select * from dba_datapump_jobs; OWNER_NAME JOB_NAME OPERATION JOB_MODE STATE DEGREE ATTACHED_SESSIONS DATAPUMP_SESSIONS ------------ ------------------- ------------ --------- -------------- -------------- ------------------------------------- SYS SYS_EXPORT_SCHEMA_01 EXPORT SCHEMA EXECUTING 6 1 2 SYS SYS_EXPORT_SCHEMA_0 2 EXPORT SCHEMA NOT RUNNING 0 0 0 SYS SYS_EXPORT_SCHEMA_0 3 EXPORT SCHEMA NOT RUNNING 0 0 0 SYS SYS_EXPORT_SCHEMA_0 4 EXPORT SCHEMA NOT RUNNING 0 0 0
数据泵任务停止,需要通过 kill_job去终止任务,通过操作系统层面kill在job里还是存在的, dba_datapump_job s 可以看到有一些并未运行的job,但是资源未释放。可以通过 expdp attach =SYS_EXPORT_SCHEMA_01进入,通过kill_job去终止任务 ,但是NOT RUNNING 的任务,有时候 会显示任务并不存在。 可以通过删除临时表进行清理: drop table SYS_EXPORT_SCHEMA_0 2 purge; drop table SYS_EXPORT_SCHEMA_0 3 purge; drop table SYS_EXPORT_SCHEMA_0 4 purge;
