ITPub博客

首页 > 数据库 > Oracle > 一次expdp备份hang住问题分析

一次expdp备份hang住问题分析

原创 Oracle 作者:yingyifeng306 时间:2025-03-10 14:01:58 0 删除 编辑

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;

 


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

下一篇: 一次SQL优化分析
请登录后发表评论 登录
全部评论
ITpub论坛高可用版主,擅长研究Oracle 内部原理、新特性、高可用和性能调优等,多年来一直保持着对新事务旺盛的求知欲。热切关注 Oracle 和其它相关技术

注册时间:2011-10-12

  • 博文量
    291
  • 访问量
    1593072